【发布时间】:2018-10-17 09:50:04
【问题描述】:
我正在尝试编写一个小脚本来自动创建视频文件。我几乎可以工作但卡在一个部分,以下是我的节点 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
所以我将参数放在 str2 中,将选项/输入放在 str1 中。问题是,当我在 str1 中传递带有选项的输入并将其放在我的 execFileSync 命令中时,该命令不会对其进行解析。我还测试了确认,如果我以以下格式传递选项,它可以在节点 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 以便执行?
【问题讨论】:
-
如果启用
shell: true像execFileSync('ffmpeg), [...args], { shell: true }),会发生什么? -
嘿!!!....它起作用了...您能详细说明发生了什么变化吗?我将标记这是正确的响应。谢谢@axm__