Как пакетно объединить две последовательности изображений с альфа-каналом, используя ffmpeg или imagemagick? - PullRequest
0 голосов
/ 10 мая 2018

Другие инструменты или простые API также приветствуются.

У меня есть последовательность PNG с альфа-каналом, которую я хочу наложить поверх нескольких видео. Использование ffmpeg было бы фантастическим, но использование imagemagick также приемлемо. Я мог бы извлечь все кадры в видео и использовать imagemagick для пакетного смешивания каждого кадра, а затем перекодировать (перекодирование приемлемо).

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

ffmpeg пример. Вы упомянули «две последовательности», поэтому в этом примере предполагается, что у вас есть два набора последовательно пронумерованных изображений:

ffmpeg -i input.mp4 -framerate 25 -i blue_%04d.png -framerate 25 -i red_%04d.png -filter_complex "[0][1]overlay=10:10:format=auto[bg];[bg][2]overlay=W-w-10:10:format=auto[v]" -map "[v]" -map 0:a? -c:a copy output.mp4

enter image description here
Пример размещения наложений.

  • Первая последовательность изображений ("blue") будет размещена в верхнем левом углу с отступом 10 пикселей, а вторая ("red") - в правом верхнем углу. Если вы хотите внизу слева: 10:H-h-10. Если вы хотите внизу справа: W-w-10:H-h-10.

  • Изображения в этом примере имеют имена blue_0001.png, blue_0002.png, blue_0003.png и т. Д. Шаблон такой же для последовательности "red".

  • Подробнее см. Демультиплексор файла изображения и .

0 голосов
/ 10 мая 2018

Пожалуйста, уточните последовательность png. Вы хотите, чтобы все PNG накладывались на каждый кадр видео? Или один другой PNG для каждого кадра видео. Или один и тот же png (по выбору), накладываемый на каждый кадр видео.

Последнее может быть сделано в ImageMagick с использованием композита -layers, при условии, что ваш ImageMagick имеет ffmpeg в качестве библиотеки делегатов

convert video.mpeg null: overlay.png -gravity G -geometry +X+Y -layers composite new_video.mpeg


Я не уверен, но вам может потребоваться добавить -coalesce после video.mpeg, если кадры оптимизированы каким-либо образом для изменения размеров кадра, как в анимации gif.

Альтернативно, предположим, что вы конвертируете все видеокадры в png. Тогда при условии, что все кадры имеют одинаковый размер и пронумерованы ведущими нулями,

convert video*.png null: overlay.png -gravity G -geometry +X+Y -layers composite new_video.mpeg


где G - настройка гравитации, например центр, X и Y - желаемые смещения от настройки гравитации.

или

convert video*.png null: overlay.png -gravity G -geometry +X+Y -layers composite new_video_%03d.png


где вы можете изменить% 03d.png на любое число, отличное от 3, чтобы установить число ведущих нулей. Тогда вам придется использовать ffmpeg для восстановления вашего видео.

...