1

Я пытаюсь наложить входное видео со многими изображениями, где каждое изображение должно быть показано в течение короткого времени. Я добился этого с помощью сложного фильтра (команда ниже). Проблема в том, что у меня много-много изображений (> 1000) :-)

ffmpeg -y -i in.mp4 

-i logo1.png 
-i logo2.png 
-i logo3.png 

-filter_complex "

[0:v][1:v] overlay=10:10:enable='between(n,2,4)'    [tmp]; 
[tmp][2:v] overlay=30:30:enable='between(n,6,8)'    [tmp]; 
[tmp][3:v] overlay=50:50:enable='between(n,10,12)'; 

" out.mp4 

Позволяет ли FFmpeg пользователю передавать эти данные через текстовый файл? Изображения генерируются в памяти, поэтому каналы также хороши (на самом деле предпочтительнее).

(если это невозможно, могу ли я передать необработанное видео в формате Bgra ?; но я бы не предпочел это, потому что операция смешивания дороже + больше ввода-вывода: должна быть как можно быстрее)


Редактировать: если я использую следующую конфигурацию, накладывается только последнее отправленное изображение.

-i ski.mp4 
-f image2pipe -vcodec png -i -

-filter_complex "[0:v][1:v] overlay=10:10:enable='between(n,2,3)' [tmp]; 
                 [tmp][1:v] overlay=30:30:enable='between(n,6,7)'"

-f mp4", "out.mp4"

Вывод FFmpeg (кажется, что он пропускает изображения, если они имеют разные размеры):

 Input stream #1:0 frame changed from size:1417x665 fmt:rgba to size:1800x700 fmt:rgba
 Input stream #1:0 frame changed from size:1800x700 fmt:rgba to size:550x371 fmt:rgba
 Input stream #1:0 frame changed from size:550x371 fmt:rgba to size:256x256 fmt:rgba

Как я могу указать FFmpeg, что для первого фильтра используется 1-е изображение, для второго 2-го изображения в трубе и т.д. (Изображения имеют разные размеры)?

1 ответ1

2

Если вы можете ввести свои изображения в виде последовательности и указать свои оверлейные x , y и квалификаторы времени в качестве выражения, то это можно сделать в виде управляемой команды.

Вы можете вводить изображения через канал, используя -f image2pipe -vcodec png в качестве опции ввода.

Кроме того, FFmpeg может ссылаться на цепочку фильтров из скрипта

-filter_complex_script имя файла (глобальное)

Этот параметр аналогичен -filter_complex, единственное отличие состоит в том, что его аргументом является имя файла, из которого необходимо прочитать описание сложного фильтра.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .