ffmpeg在execFileSync中传递选项失败

时间:2018-10-17 09:50:04

标签: node.js ffmpeg

我正在尝试编写一个小的脚本来自动创建视频文件。我几乎可以正常工作,但停留在一部分,以下是我的节点js代码:

let str1 = "-c:v libvpx -i sourceVideos/a1.mkv -c:v libvpx -i sourceVideos/a2.mkv -c:v libvpx -i sourceVideos/a3.mkv";
let str2 = "[1]setpts=PTS+5.00/TB[a2];[2]setpts=PTS+10.00/TB[a3];[0][a2]overlay[o2];[o2][a3]overlay";
let outFile = 'validout.mp4';
const masterStream = execFileSync('ffmpeg', [str1, '-filter_complex', str2, outFile]);

console.log('All processing completed');

上面的代码表示此ffmpeg命令,用于从多个视频创建视频:

ffmpeg -c:v libvpx -i sourceVideos/a1.mkv -c:v libvpx -i sourceVideos/a2.mkv -c:v libvpx -i sourceVideos/a3.mkv -filter_complex "[1]setpts=PTS+5.00/TB[a2];[2]setpts=PTS+10.00/TB[a3];[0][a2]overlay[o2];[o2][a3]overlay" validationout.mp4

因此,我将args放在了str2中,并将选项/输入放在了str1中。问题是,当我在str1中传递带有选项的输入并将其放置在execFileSync命令中时,该命令不会对其进行解析。我还测试过确认,如果我以以下格式传递选项,则可以在node js脚本中使用:

//version 1 with separated arguments
const masterStream = execFileSync('ffmpeg', ['-c:v', 'libvpx', '-i', 'sourceVideos/a1.mkv', '-c:v', 'libvpx', '-i', 'sourceVideos/a2.mkv', '-c:v', 'libvpx', '-i', 'sourceVideos/a3.mkv', '-filter_complex', str2, outFile]);

我的问题是:如何将选项/输入传递给str1中的execFileSync,以便可以执行它们?

1 个答案:

答案 0 :(得分:0)

-i sourceVideos/a1.mkv这样适合在一起的参数应该分开({-isourceVideos/a1.mkv,如果您尚未在shell: true对象中启用options

execFileSync('ffmpeg'), ['-i', 'sourceVideos/a1.mkv']) // must be separate
// or
execFileSync('ffmpeg', ['-i sourceVideos/a1.mkv'], { shell: true })

这确实应该放在nodejs文档中。显然,它与在更深层次上如何在C中调用程序有关。有关更多信息,请参见this answer