Я безуспешно пытаюсь наложить анимированный gif на видео.
Мои цели следующие:
Максимум, чего я добился в этом отношении, это то, что gif покрывает все видео с помощью масштабного фильтра и зацикливается до тех пор, пока видео не закончится (но это, я думаю, не лучшим образом).
Что касается цикла, я знаю, что могу использовать параметр фильтра gif -ignore_loop 0 с самым коротким = 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
Хорошо, я отвечу на свой вопрос. Первая часть, невозможность добиться прозрачности gif, такая глупая проблема!! GIF, который я использовал, был непрозрачным, и я не понял !! OMG, подумал я, так что это первое, что нужно проверить, когда у вас возникнут проблемы с прозрачностью.
Во-вторых, зацикливание gif до конца видео, я не смог сделать это с -ignore_loop 0 вместе с shortest=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
Привет, ребята, если кто-то хочет добавить GIF в видео, используйте эту команду. Определенно вы получите правильный ответ
String strFilter = "[1:v]scale=h=-1:w=100[overlay_scaled],"
+ "[0:v][overlay_scaled]overlay=shortest=1:x=W*0:y=H*0";
String[] complexCommand = new String[] {
"-i",
yourRealPath,
"-itsoffset",
String.valueOf(0),
"-ignore_loop", "0", "-i",
fullPath,
"-filter_complex",
strFilter,
"-frames:v", "900", "-preset",
"ultrafast",
"-g",
"120",
dest.getAbsolutePath()
};
Как я могу удалить существующий анимированный gif из существующего видео?