I'm trying to extract thumbnails from an mp4 video file stream into an output png file stream.
This is the ffmpeg command I'm trying to run:
ffmpeg -i video.mp4 -vframes 1 out.png
const FS = require('fs');
const FFMPEG = require('fluent-ffmpeg');
const input = FS.createReadStream('video.mp4');
const output = FS.createWriteStream('out.png');
FFMPEG(input)
.outputOptions('-vframes 1')
.on('error', (err) => {
console.log('Error: ', err);
})
.on('end', () => {
console.log('Done.');
})
.pipe(output, { end: true });
I get this stacktrace:
Error: ffmpeg exited with code 1: pipe:1: Invalid argument
at ChildProcess.<anonymous> (/Users/juanjo/dev/fundidora/lambda/extract-video-thumbnails/node_modules/fluent-ffmpeg/lib/processor.js:177:22)
at emitTwo (events.js:106:13)
at ChildProcess.emit (events.js:191:7)
at Process.ChildProcess._handle.onexit (internal/child_process.js:215:12)
I read in another issue that output format detection does not work automatically for output streams so I then specify the format like so:
FFMPEG(input)
.outputOptions('-vframes 1')
.outputOptions('-f png')
.on('error', (err) => {
console.log('Error: ', err);
})
.on('end', () => {
console.log('Done.');
})
.pipe(output, { end: true });
But I get this stacktrace:
Error: Output format png is not available
at /Users/juanjo/dev/fundidora/lambda/extract-video-thumbnails/node_modules/fluent-ffmpeg/lib/capabilities.js:589:21
at nextTask (/Users/juanjo/dev/fundidora/lambda/extract-video-thumbnails/node_modules/async/dist/async.js:5070:14)
at /Users/juanjo/dev/fundidora/lambda/extract-video-thumbnails/node_modules/async/dist/async.js:5064:13
at apply (/Users/juanjo/dev/fundidora/lambda/extract-video-thumbnails/node_modules/async/dist/async.js:21:25)
at /Users/juanjo/dev/fundidora/lambda/extract-video-thumbnails/node_modules/async/dist/async.js:56:12
at /Users/juanjo/dev/fundidora/lambda/extract-video-thumbnails/node_modules/async/dist/async.js:840:16
at /Users/juanjo/dev/fundidora/lambda/extract-video-thumbnails/node_modules/fluent-ffmpeg/lib/capabilities.js:549:7
at handleExit (/Users/juanjo/dev/fundidora/lambda/extract-video-thumbnails/node_modules/fluent-ffmpeg/lib/processor.js:165:11)
at Socket.<anonymous> (/Users/juanjo/dev/fundidora/lambda/extract-video-thumbnails/node_modules/fluent-ffmpeg/lib/processor.js:192:11)
at emitOne (events.js:101:20)
at Socket.emit (events.js:188:7)
at Pipe._handle.close [as _onclose] (net.js:498:12)
I tried ffmpeg versions 3.1.1 and 3.2.2, same result on both.
I was able to get it working by using the following options:
FFMPEG(input)
.outputOptions('-vframes 1')
.outputOptions('-f image2pipe')
.outputOptions('-vcodec png')
Most helpful comment
I was able to get it working by using the following options: