Фильтр оверлея FFMPEG частично преобразован
Я пытаюсь применить фильтр наложения к видео, чтобы смешать одно изображение в течение нескольких секунд. Поскольку продолжительность моего видео составляет около 1 минуты, это кажется расточительным, когда FFMPEG пытается повторно закодировать все видео снова, а не перекодировать ту часть видео, которую необходимо изменить.
Моя команда смешанного видео:
ffmpeg -i beach.mp4 -i logo.png
-filter_complex "[0:v][1:v] overlay=25:25:enable='between(t,0,20)'"
-pix_fmt yuv420p -c:a copy output.mp4
Кто-нибудь знает, как мне этого избежать? (Я думал разделить видео, но кажется, что видео нельзя разделить точно, указав начальный и конечный кадр)
1 ответ
Поскольку у вас все в порядке с некоторой неточностью, я предлагаю следующий метод:
Сегментируйте видео вход
ffmpeg -i beach.mp4 -c copy -segment_time 20 -f segment beach_seg%02d.mp4
Наложение логотипа на первый сегмент
ffmpeg -i beach_seg00.mp4 -loop 1 -i logo.png
-filter_complex "[0:v][1:v] overlay=25:25:shortest=1"
-pix_fmt yuv420p -c:a copy overlay.mp4
Конкат сегменты
Сначала подготовьте текстовый файл segments.txt
file 'overlay.mp4'
file 'beach_seg01.mp4'
file 'beach_seg02.mp4'
file 'beach_seg03.mp4'
...
Затем конкат
ffmpeg -f concat -i segments.txt -c copy beach_with_logo.mp4
Предостережение заключается в том, что временная база overlay.mp4 может не совпадать с временной шкалой пляжных сегментов. В этом случае проверьте временную базу одного из сегментов пляжа (tbn
) и добавить -video_track_timescale <tbn>
к команде наложения.