4

Я делаю видео для YouTube, и я уже отредактировал и исправил его в полной программе для редактирования видео. Последнее, что я хочу сделать, это добавить оверлейный баннер с кнопками подписки и плейлиста, который я превращу в аннотации. Я хочу, чтобы это появилось в первые 5 секунд видео. К сожалению, моя полная программа для редактирования видео не может этого сделать, поэтому я бы хотел использовать FFMPEG для достижения этого эффекта.

Я видел несколько уроков по этому поводу (этот, в частности, показался довольно хорошим), но ни в одном из них не упоминается, как указать продолжительность оверлея.

У кого-нибудь есть идеи, как мне этого добиться? Заранее спасибо! :)

1 ответ1

4

Fade and Overlay

Вы можете связать фильтр постепенного изменения и наложения вместе следующим образом:

ffmpeg -i input.mp4 -f image2 -loop 1 -r 24 -i banner.png -filter_complex \
'[1:v]fade=out:96:24:alpha=1[wm];[0:v][wm]overlay=10:10[outv]' \
-map [outv] -map 0:a -c:a copy -c:v libx264 -preset veryfast output.mp4

-f image2 -loop 1 -r 24 -i banner.png превращает banner.png в видео со скоростью 24 кадра в секунду, повторяя цикл до бесконечности.

[1:v]fade=out:96:24:alpha=1[wm] заставляет водяной знак начинать исчезать в 96-м кадре (4 секунды при 24 кадрах в секунду) и постепенно исчезать в течение 24 кадров (1 секунда при 24 кадрах в секунду); и он исчезнет из альфа-канала, означая, что водяной знак станет прозрачным, а не исчезнет в черный блок. Это создает вывод с пометкой [wm]. Обратите внимание, что самое низкое значение длины фейдера составляет 1 кадр.

[0:v][wm]overlay=0:0[outv] накладывает баннер на input.mp4, создавая вывод с пометкой [outv].

-map [outv] -map 0:a указывает ffmpeg использовать [outv] и аудио из input.mp4 в выходных данных. Остальные параметры являются параметрами кодирования.

Вы можете заставить баннер появляться и исчезать, связывая два фильтра исчезновения. Следующее заставит баннер исчезать, начиная с кадра 96, с продолжительностью 24 кадра; и затем исчезают, начиная с кадра 216 (9 секунд при 24 кадрах в секунду), в течение 24 кадров:

ffmpeg -i input.mp4 -f image2 -loop 1 -r 24 -i banner.png -filter_complex \
'[1:v]fade=in:96:24:alpha=1,fade=out:216:24:alpha=1[wm];[0:v][wm]overlay=10:10[outv]' \
-map [outv] -map 0:a -c:a copy -c:v libx264 -preset veryfast output.mp4

Поиск потока с помощью -ss и -t

Это достигает аналогичного конечного результата, но требует создания больших промежуточных файлов. Однако он перекодирует только первую пятисекундную секцию и, таким образом, экономит вычислительную мощность и, возможно, будет быстрее.

Это включает в себя разрезание видео на два бита с использованием -t и -ss , размещение водяного знака над первым, пятисекундным видео, а затем объединение двух видео вместе.

ffmpeg -i input.mp4 -i watermark.png \
-filter_complex '[0:v][1:v]overlay[outv]' -map [outv] -map 0:a \
-t 5 -c:a copy -c:v libx264 -crf 22 -preset veryfast start.mp4

ffmpeg -i input.mp4 -ss 5 -c copy end.mp4

Затем объедините два видео, используя демультиплексор concat: сначала создайте файл с именем input.txt, содержащий следующие строки:

file 'start.mp4'
file 'end.mp4'

Затем,

ffmpeg -f concat -i inputs.txt -c copy output.mp4

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