Node-fluent-ffmpeg: Invalid argument when creating thumbnails. video(readStream) -> png(writeStream)

Created on 3 Feb 2017  路  1Comment  路  Source: fluent-ffmpeg/node-fluent-ffmpeg

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.

Most helpful comment

I was able to get it working by using the following options:

FFMPEG(input)
    .outputOptions('-vframes 1')
    .outputOptions('-f image2pipe')
    .outputOptions('-vcodec png')

>All comments

I was able to get it working by using the following options:

FFMPEG(input)
    .outputOptions('-vframes 1')
    .outputOptions('-f image2pipe')
    .outputOptions('-vcodec png')
Was this page helpful?
0 / 5 - 0 ratings

Related issues

odigity picture odigity  路  4Comments

joergbirkhold picture joergbirkhold  路  5Comments

echo66 picture echo66  路  3Comments

baoxiangyang picture baoxiangyang  路  3Comments

epdev picture epdev  路  3Comments