我正在使用Lambda函数将给定的文件拆分成多个片段,并且在文件处理过程中经常收到一个错误:
{
"errorType": "Error",
"errorMessage": "ffprobe exited with code 1\nffprobe version 4.2.2-static https://johnvansickle.com/ffmpeg/ Copyright (c) 2007-2019 the FFmpeg developers\n built with gcc 8 (Debian 8.3.0-6)\n configuration: --enable-gpl --enable-version3 --enable-static --disable-debug --disable-ffplay --disable-indev=sndio --disable-outdev=sndio --cc=gcc --enable-fontconfig --enable-frei0r --enable-gnutls --enable-gmp --enable-libgme --enable-gray --enable-libaom --enable-libfribidi --enable-libass --enable-libvmaf --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librubberband --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libvorbis --enable-libopus --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libdav1d --enable-libxvid --enable-libzvbi --enable-libzimg\n libavutil 56. 31.100 / 56. 31.100\n libavcodec 58. 54.100 / 58. 54.100\n libavformat 58. 29.100 / 58. 29.100\n libavdevice 58. 8.100 / 58. 8.100\n libavfilter 7. 57.100 / 7. 57.100\n libswscale 5. 5.100 / 5. 5.100\n libswresample 3. 5.100 / 3. 5.100\n libpostproc 55. 5.100 / 55. 5.100\n[mov,mp4,m4a,3gp,3g2,mj2 @ 0x6f35c40] Format mov,mp4,m4a,3gp,3g2,mj2 detected only with low score of 1, misdetection possible!\n[mov,mp4,m4a,3gp,3g2,mj2 @ 0x6f35c40] moov atom not found\n/tmp/file.mp4: Invalid data found when processing input\n",
"stack": [
"Error: ffprobe exited with code 1",
"ffprobe version 4.2.2-static https://johnvansickle.com/ffmpeg/ Copyright (c) 2007-2019 the FFmpeg developers",
" built with gcc 8 (Debian 8.3.0-6)",
" configuration: --enable-gpl --enable-version3 --enable-static --disable-debug --disable-ffplay --disable-indev=sndio --disable-outdev=sndio --cc=gcc --enable-fontconfig --enable-frei0r --enable-gnutls --enable-gmp --enable-libgme --enable-gray --enable-libaom --enable-libfribidi --enable-libass --enable-libvmaf --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librubberband --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libvorbis --enable-libopus --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libdav1d --enable-libxvid --enable-libzvbi --enable-libzimg",
" libavutil 56. 31.100 / 56. 31.100",
" libavcodec 58. 54.100 / 58. 54.100",
" libavformat 58. 29.100 / 58. 29.100",
" libavdevice 58. 8.100 / 58. 8.100",
" libavfilter 7. 57.100 / 7. 57.100",
" libswscale 5. 5.100 / 5. 5.100",
" libswresample 3. 5.100 / 3. 5.100",
" libpostproc 55. 5.100 / 55. 5.100",
"[mov,mp4,m4a,3gp,3g2,mj2 @ 0x6f35c40] Format mov,mp4,m4a,3gp,3g2,mj2 detected only with low score of 1, misdetection possible!",
"[mov,mp4,m4a,3gp,3g2,mj2 @ 0x6f35c40] moov atom not found",
"/tmp/file.mp4: Invalid data found when processing input",
"",
" at ChildProcess.<anonymous> (/var/task/node_modules/fluent-ffmpeg/lib/ffprobe.js:233:22)",
" at ChildProcess.emit (events.js:198:13)",
" at ChildProcess.EventEmitter.emit (domain.js:448:20)",
" at Process.ChildProcess._handle.onexit (internal/child_process.js:248:12)"
]
}
我看到了错误消息,它告诉我的是什么,但我不能理解的是,这个文件有时是有效的。在这个过程开始之前,我将文件从S3下载到我的Lambda容器中,也许这是我的问题,但它有时仍然有效。
发布于 2020-06-24 18:56:39
经过长时间的调查,我发现我的问题确实是如何从S3下载我的源文件,所以在修复这个问题之后,没有抛出更多的错误!
为了以后的参考,这里是我的过程中所发生的变化,希望对将来的人有所帮助。
这是它下载文件的方式:
return new Promise((resolve: Function, reject: Function): void => {
const s3Stream: stream.Readable = this.client.getObject(params).createReadStream()
const fileStream: stream.Writable = fs.createWriteStream(filePath)
s3Stream.on('error', () => {
fileStream.destroy()
reject()
})
fileStream.on('error', () => {
s3Stream.destroy()
reject()
})
s3Stream.pipe(fileStream)
.on('close', resolve())
})
}
现在,在更改之后:
return new Promise((resolve: Function, reject: Function): void => {
const fileStream: stream.Writable = fs.createWriteStream(filePath)
this.client.getObject(params)
.on('error', (err: NodeJS.ErrnoException) => {
fileStream.destroy()
reject(err)
})
.on('httpData', (chunk: unknown) => {
fileStream.write(chunk);
})
.on('httpDone', () => {
fileStream.end();
resolve()
})
.send();
})
}
https://stackoverflow.com/questions/62435633
复制相似问题