我正在尝试使用 fluent-ffmpeg 在 NodeJS 后端运行 ffmpeg,从 Google Cloud Storage 读取输入文件。如果我先下载文件,一切正常:
const file = storage
.bucket('example_bucket')
.file('examplefile.mp4');
file.download({destination: 'test.mp4'}, (err) => {
let command = ffmpeg()
.input('test.mp4')
.duration(10)
.format('mp4');
command.save('test_out.mp4');
});
res.json([{
message: 'Command sent!'
}]);
但是如果我尝试使用可读流作为输入,它会失败:
const file = storage
.bucket('example_bucket')
.file('examplefile.mp4');
var filestream = file.createReadStream()
let command = ffmpeg()
.input(filestream)
.duration(10)
.format('mp4');
command.save('test_out.mp4');
});
res.json([{
message: 'Command sent!'
}]);
这是尝试进行转换时 ffmpeg 的完整输出。似乎可以很好地读取文件的详细信息,但由于某种原因它失败了,说“无法处理视频:ffmpeg 以代码 1 退出:管道:0:处理输入时发现无效数据”
Spawned Ffmpeg with command: ffmpeg -i pipe:0 -y -t 10 -f mp4 test_out.mp4
Stderr output: ffmpeg version 4.0.1 Copyright (c) 2000-2018 the FFmpeg developers
Stderr output: built with Apple LLVM version 9.1.0 (clang-902.0.39.2)
Stderr output: configuration: --prefix=/opt/local --enable-swscale --enable-avfilter --enable-avresample --enable-libmp3lame --enable-libvorbis --enable-libopus --enable-librsvg --enable-libtheora --enable-libopenjpeg --enable-libmodplug --enable-libvpx --enable-libsoxr --enable-libspeex --enable-libass --enable-libbluray --enable-lzma --enable-gnutls --enable-fontconfig --enable-libfreetype --enable-libfribidi --disable-libjack --disable-libopencore-amrnb --disable-libopencore-amrwb --disable-libxcb --disable-libxcb-shm --disable-libxcb-xfixes --disable-indev=jack --enable-opencl --disable-outdev=xv --enable-audiotoolbox --enable-videotoolbox --enable-sdl2 --mandir=/opt/local/share/man --enable-shared --enable-pthreads --cc=/usr/bin/clang --arch=x86_64 --enable-x86asm --enable-libx265 --enable-gpl --enable-postproc --enable-libx264 --enable-libxvid
Stderr output: libavutil 56. 14.100 / 56. 14.100
Stderr output: libavcodec 58. 18.100 / 58. 18.100
Stderr output: libavformat 58. 12.100 / 58. 12.100
Stderr output: libavdevice 58. 3.100 / 58. 3.100
Stderr output: libavfilter 7. 16.100 / 7. 16.100
Stderr output: libavresample 4. 0. 0 / 4. 0. 0
Stderr output: libswscale 5. 1.100 / 5. 1.100
Stderr output: libswresample 3. 1.100 / 3. 1.100
Stderr output: libpostproc 55. 1.100 / 55. 1.100
Stderr output: [mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fb6db80a200] stream 2, offset 0x30: partial file
Stderr output: [mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fb6db80a200] Could not find codec parameters for stream 0 (Video: h264 (avc1 / 0x31637661), none, 1920x1080, 4647 kb/s): unspecified pixel format
Stderr output: Consider increasing the value for the 'analyzeduration' and 'probesize' options
Stderr output: Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'pipe:0':
Stderr output: Metadata:
Stderr output: major_brand : isom
Stderr output: minor_version : 512
Stderr output: compatible_brands: isomiso2avc1mp41
Stderr output: encoder : Lavf58.12.100
Stderr output: location-eng : +60.2121+024.8754/
Stderr output: location : +60.2121+024.8754/
Stderr output: Duration: 00:02:23.13, bitrate: N/A
Stderr output: Stream #0:0(eng): Video: h264 (avc1 / 0x31637661), none, 1920x1080, 4647 kb/s, SAR 1:1 DAR 16:9, 59.94 fps, 59.94 tbr, 60k tbn, 120k tbc (default)
Stderr output: Metadata:
Stderr output: handler_name : VideoHandler
Stderr output: Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
Stderr output: Metadata:
Stderr output: handler_name : SoundHandler
Stderr output: Stream #0:2(eng): Data: none (tmcd / 0x64636D74)
Stderr output: Metadata:
Stderr output: handler_name : TimeCodeHandler
Stderr output: Stream mapping:
Input is aac (mp4a / 0x6134706D) audio with h264 (avc1 / 0x31637661) video
Stderr output: Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
Stderr output: Stream #0:1 -> #0:1 (aac (native) -> aac (native))
Stderr output: [mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fb6db80a200] stream 0, offset 0x34: partial file
Stderr output: pipe:0: Invalid data found when processing input
Stderr output: Cannot determine format of input stream 0:0 after EOF
Stderr output: Error marking filters as finished
Stderr output: Conversion failed!
Stderr output:
Cannot process video: ffmpeg exited with code 1: pipe:0: Invalid data found when processing input
Cannot determine format of input stream 0:0 after EOF
Error marking filters as finished
Conversion failed!