我想在针对Javascript(ffmpeg.js)编译的ffmpeg版本中使用过滤器。但是解析器似乎不处理引号,因此我需要编写不带引号的完整命令。
如何编写不带引号的以下命令?
ffmpeg -i video.mp4 -i image.jpg -filter_complex "[1][0]scale2ref[i][v];[v][i]overlay=10:10:enable=\'between(t,1,2)\'" -c:a copy output.mp4
在javascript中,我按如下所示指定命令:
worker.postMessage({
type: 'command',
arguments: "-i video.mp4 -i image.jpg -filter_complex '[1][0]scale2ref[i][v];[v][i]overlay=10:10' -c:a copy output.mp4".split(' '),
files: [
{
data: new Uint8Array(videofile),
name: 'video.mp4'
},
{
data: new Uint8Array(imagefile),
name: 'image.jpg'
},
] });
但是会导致:
[AVFilterGraph @ 0xdf4c30]没有这样的过滤器: '[1] [0] scale2ref [i] [v]; [v] [i] overlay = 10:10'
我检查了一下,覆盖过滤器在没有引号的更简单版本中起作用,例如,此命令起作用:
arguments: "-i video.mp4 -i image.jpg -filter_complex overlay=10:10 -c:a copy output.mp4".split(' '),
答案 0 :(得分:0)
我认为问题在于'
在拆分之后仍然存在,这使ffmpeg感到困惑。如果这是真正的外壳,则参数解析器将拆分并正确解析引号。
尝试像这样删除原始字符串中的'
:
arguments: "-i video.mp4 -i image.jpg -filter_complex [1][0]scale2ref[i][v];[v][i]overlay=10:10 -c:a copy output.mp4".split(' ')
或者甚至跳过跳过split并直接传递参数列表:
arguments: ["-i", "video.mp4", "-i", "image.jpg", "-filter_complex", "[1][0]scale2ref[i][v];[v][i]overlay=10:10", "-c:a", "copy", "output.mp4"]