将命令行输入转换为Node Fluent ffmpeg

时间:2015-11-04 10:35:02

标签: javascript node.js ffmpeg

我想使用node-fluent-ffmpeg运行ffmpeg命令行(将png图像编译为视频):

ffmpeg -framerate 20 -i static/tmp/img%03d.png -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4  

我正在尝试以下方法,但没有运气。

var ffmpeg = require('fluent-ffmpeg');

var proc = new ffmpeg()
    .addInputOption('-framerate 20')
    .addInputOption('static/tmp/img%03d.png')
    .addInputOption('-c:v libx264')
    .addInputOption('-r 30')
    .addInputOption('-pix_fmt yuv420p out.mp4')
    .output('outputfile.mp4')
    .output(stream);

我查看了github存储库以及stackoverflow上的所有Q / A,但没有正确答案。

如何将命令行格式化为js代码?

谢谢!

1 个答案:

答案 0 :(得分:8)

你现在可能已经想到了这一点,但无论如何我都会回答。

试试这个:

var ffmpeg = require('fluent-ffmpeg');

var proc = new ffmpeg();

proc.addInput('static/tmp/img%03d.png')
.on('start', function(ffmpegCommand) {
    /// log something maybe
})
.on('progress', function(data) {
    /// do stuff with progress data if you want
})
.on('end', function() {
    /// encoding is complete, so callback or move on at this point
})
.on('error', function(error) {
    /// error handling
})
.addInputOption('-framerate 20')
.outputOptions(['-c:v libx264', '-r 30', '-pix_fmt yuv420p'])
.output('out.mp4')
.run();

基本上,-i之前的任何内容都被视为输入选项,输入和输出文件之间的任何内容都被视为输出选项。

你可以使用一组选项在一行中添加多个输入或输出选项,流畅的ffmpeg github也会指向一些javascript代码,作为其中一些命令的快捷方式,尽管我仍然觉得它更容易使用命令行语法。 https://github.com/fluent-ffmpeg/node-fluent-ffmpeg

如果你想要多个输出,你可以在你的例子中添加更多.output(虽然你的命令行ffmpeg没有这样做)。