gpt4 book ai didi

node.js - 在 execFileSync 中传递选项对于 ffmpeg 失败

转载 作者:行者123 更新时间:2023-12-04 23:24:43 24 4
gpt4 key购买 nike

我正在尝试编写一个小脚本来自动创建视频文件。我几乎可以工作但卡在一个部分,以下是我的 Node 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 命令中时,该命令不会对其进行解析。我还测试了确认,如果我以以下格式传递选项,它可以在 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 以便执行它们?

最佳答案

可以组合在一起的参数,例如 -i sourceVideos/a1.mkv如果您尚未在 -i 对象中启用 sourceVideos/a1.mkv,则应分开( shell: trueoptions :

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

这真的应该放在 nodejs 文档中。显然它与程序在 C 中的调用方式有关。在更深层次上。见 this answer了解更多信息。

关于node.js - 在 execFileSync 中传递选项对于 ffmpeg 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52851942/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com