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

2

Поскольку у вас все в порядке с некоторой неточностью, я предлагаю следующий метод:

Сегментируйте видео вход

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> к команде наложения.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .