添加图像叠加层时如何将较少的参数传递给ffmpeg

时间:2019-04-17 14:33:43

标签: ffmpeg video-processing

我正在用ffmpeg处理视频,并且试图在某些时间添加图像叠加层。我有这样的命令:

ffmpeg -i video.mp4 -i img_a.png -i img_xx.png -i some_third_image.png -i yy_img.png 
-filter_complex overlay=185:H-h-85:enable=between(t\\,1.1\\,2.3),overlay=285:H-h-415:enable=between(t\\,3.3\\,4.7),overlay=185:H-h-35:enable=between(t\\,5.7\\,6.0),overlay=45:H-h-515:enable=between(t\\,7.1\\,8.6) 
-c:v libx264 -crf 20 -preset veryfast vid0.mp4

当我动态(以编程方式)将参数形成/传递给ffmpeg时,可能会出现非常长的参数列表太大了,我什至可以收到有关参数列表过长的消息(基于操作系统),然后我就无法处理视频。我想避免这种情况。我想知道如何用ffmpeg编写代码,以便传递给ffmpeg的参数更少?例如,相反:

-i img_a.png -i img_xx.png -i some_third_image.png -i yy_img.png

是否可以像这样:

-i "img_a.png,img_xx.png,some_third_image.png,yy_img.png"

(或类似的东西,较少的参数将传递给ffmpeg)。如果可以,请提供示例如何在ffmpeg中编写这样的命令。

1 个答案:

答案 0 :(得分:2)

对于此特定类型的命令,您可以从文件中加载过滤图。所有图像都可以加载到滤镜内部。

ffmpeg -i video.mp4 -filter_complex_script mygraph.txt -c:v libx264 -crf 20 -preset veryfast vid0.mp4

mygraph.txt在哪里

movie=img_a.png[a];
movie=img_xx.png[xx];
movie=some_third_image.png[3rd];
movie=yy_img.png[yy];
[0][a]overlay=185:H-h-85:enable=between(t\,1.1\,2.3)[0-a];
[0-a][xx]overlay=285:H-h-415:enable=between(t\,3.3\,4.7)[0-xx];
[0-xx][3rd]overlay=185:H-h-35:enable=between(t\,5.7\,6.0)[0-3rd];
[0-3rd][yy]overlay=45:H-h-515:enable=between(t\,7.1\,8.6)