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