我正在用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中编写这样的命令。
答案 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)