#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] … для второго изображения.