我正在尝试编写一个小的脚本来自动创建视频文件。我几乎可以正常工作,但停留在一部分,以下是我的节点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,以便可以执行它们?
答案 0 :(得分:0)
像-i sourceVideos/a1.mkv
这样适合在一起的参数应该分开({-i
,sourceVideos/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。