Как передать меньше параметров в ffmpeg при добавлении наложений изображений

#ffmpeg #video-processing

#ffmpeg #обработка видео

Вопрос:

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

Для этого конкретного типа команд вы можете загрузить график фильтра из файла. Все изображения могут быть загружены внутри 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)
 

Комментарии:

1. Большое вам спасибо. Но будет ли это также выделять много памяти, как в случае, если я использовал? Или, может быть, меньше? Было бы здорово, если бы это был правильный способ справиться с увеличением потребления памяти при использовании многих параметров.

2. Объем памяти, используемой обработкой, отличается от ограничений символов оболочки, о чем ваш вопрос. Этот ответ представляет собой другой способ выполнения той же обработки.

3. Большое вам спасибо. Я проверю это сам.

4. Кстати, когда я запускаю команду, которую вы опубликовали, я получаю: «Спецификатор потока’a’ в описании filtergraph movie … не соответствует потокам». Что-то не так в mygraph.txt ?

5. Я думаю, что это должно быть [0-a][xx] …, а не [0a] [xx] … для второго изображения.