I'm trying to run ffmpeg on a NodeJS backend with fluent-ffmpeg, reading input files from Google Cloud Storage. Everything works fine if I download the file first:
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!'
}]);
But if I try to use a readable stream as the input, it fails:
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!'
}]);
Here is the full output of ffmpeg when trying to do the conversion. It seems to read the details of the file fine but for some reason it fails, saying "Cannot process video: ffmpeg exited with code 1: pipe:0: Invalid data found when processing input"
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!