ffmpeg накладывает прозрачный анимированный GIF на видео и сохраняет прозрачность GIF фона - PullRequest
0 голосов
/ 07 апреля 2019

Я пытаюсь перекрыть анимированный GIF-файл над видео безуспешно.

Мои цели следующие:

  1. GIF-анимация должна повторяться до конца видео.
  2. gif масштабируется, чтобы охватить все видео.
  3. gif сохраняет прозрачность.

Самое большее, чего я достиг в этом отношении, это то, что gif покрывает все видеофильтр масштабирования и его циклы до конца видео (но это не лучшим образом, я думаю).

Что касается цикла, я знаю, что могу использовать параметр фильтра -ignore_loop 0 gif с кратчайшим = 1 в оверлее, но этопотому что это не работает, поэтому я получил -frames: v 900 (мое видео 30 кадров в секунду и 30 секунд, поэтому 900 - это количество кадров).

Моя самая важная проблема - я не могу сохранитьПрозрачность gif и все, что я пробовал, не дали успеха.

Это моя команда ffmpeg с аргументами, поэтому я надеюсь, что кто-нибудь может помочь (я использую ffmpeg 4.1).

ffmpeg -y 
-i videoin.mp4 
-i anim01.gif 
-filter_complex [1:v]scale=1080:1920[ovrl] [0:v][ovrl]overlay=main_w-overlay_w:main_h-overlay_h
-frames:v 900 
-codec:a copy
-codec:v libx264
-preset ultrafast
video.mp4

1 Ответ

1 голос
/ 11 апреля 2019

Хорошо, я отвечу на свой вопрос.Первая часть, неспособность достичь прозрачности gif, такая глупая проблема !!GIF, который я использовал, не был прозрачным, и я не понял !!OMG, подумал я, так что это первая вещь, которую нужно проверять всякий раз, когда у вас есть проблема с прозрачностью.

Вторая, зацикливая gif до конца видео, я не смог сделать это с -ignore_loop 0 вдольс кратчайшим = 1, но я сделал -ignore_loop 0 и -кадры: v 900 , и это сработало как талисман.

То, что не работало, не было-ignore_loop 0, но самый короткий = 1, и поэтому ffmpeg никогда не заканчивал кодирование, но если вы установите его для завершения с определенным количеством кадров, которое решает проблему.

900 происходит из видео 30 кадров в секунду x 30 секунд.

В итоге мои полные параметры командной строки ffmpeg оказались такими:

ffmpeg -y -i xxx.mp4 -ignore_loop 0 -i xxx.gif -filter_complex "[1:v]scale=1080:1920[ovrl];[0:v][ovrl]overlay=0:0" -frames:v 900 -codec:a copy -codec:v libx264 -max_muxing_queue_size 2048 video.mp4
...