Я пытаюсь наложить входное видео со многими изображениями, где каждое изображение должно быть показано в течение короткого времени. Я добился этого с помощью сложного фильтра (команда ниже). Проблема в том, что у меня много-много изображений (> 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-го изображения в трубе и т.д. (Изображения имеют разные размеры)?