Как передать меньше параметров в ffmpeg при добавлении наложений изображений - PullRequest
1 голос
/ 17 апреля 2019

Я делаю обработку видео с помощью 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 Ответ

2 голосов
/ 17 апреля 2019

Для этого конкретного типа команды вы можете загрузить фильтр-фильтр из файла. Все изображения могут быть загружены внутри filtergraph.

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)
...