ffmpeg.js过滤器命令不带引号

时间:2019-04-10 04:56:17

标签: ffmpeg ffmpeg.js

我想在针对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(' '),

1 个答案:

答案 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"]