8

Я пытаюсь добавить свой логотип в первые 30 секунд в видео с ffmpeg. У меня есть видео под названием d1.mp4 и логотип logo.png .

Когда видео начинается, водяной знак должен находиться в верхнем левом или правом верхнем углу видео и исчезать через 30 секунд.

Можете ли вы показать мне, как добавить его?

2 ответа2

19

Использование overlay видеофильтра для добавления логотипа к видео:

ffmpeg -i video.mp4 -i logo.png -filter_complex "[0:v][1:v]overlay" \
-codec:a copy out.mp4

Чтобы понять эту команду, вам нужно знать, что такое спецификатор потока, и вам поможет чтение Введение в фильтрацию FFmpeg . [0:v] относится к видеопотоку (ам) первого входа (video.mp4), а [1:v] относится к видеопотоку второго входа (logo.mp4). Вот как вы можете указать overlay какие входы использовать. Вы можете опустить [0:v][1:v] , и overlay все равно будет работать, но рекомендуется быть явным и не полагаться на возможно неизвестные значения по умолчанию.

По умолчанию логотип будет размещен в левом верхнем углу.

Использование -codec:a copy будет транслировать поток аудио. Это просто перекодирует аудио вместо перекодирования. Думайте об этом как о "скопировать и вставить" аудио.

Перемещение логотипа

Этот пример переместит логотип на 10 пикселей вправо и на 10 пикселей вниз:

ffmpeg -i video.mp4 -i logo.png -filter_complex "[0:v][1:v]overlay=10:10" \
-codec:a copy out.mp4

Этот пример переместит логотип на 10 пикселей с правой стороны и на 10 пикселей вниз:

ffmpeg -i video.mp4 -i logo.png -filter_complex \
"[0:v][1:v]overlay=main_w-overlay_w-10:10" -codec:a copy out.mp4

main_w относится к ширине "основного" ввода (фон или [0:v]), а overlay_w относится к ширине "оверлейного" ввода (логотип или [1:v]). Таким образом, в примере это можно перевести как overlay=320-90-10:10 или overlay=220:10 .

Время наложения

Некоторые фильтры могут обрабатывать редактирование временной шкалы, которое позволяет вам использовать арифметические выражения, чтобы определить, когда фильтр должен быть применен. Обратитесь к ffmpeg -filters чтобы увидеть, какие фильтры поддерживают редактирование временной шкалы.

Этот пример покажет логотип до 30 секунд:

ffmpeg -i video.mp4 -i logo.png -filter_complex \
"[0:v][1:v]overlay=10:10:enable=between(t\,0\,30)" -codec:a copy out.mp4

Если вы хотите исчезнуть логотип, обратитесь к ответу mark4o.

12
ffmpeg -i in.mp4 -framerate 30000/1001 -loop 1 -i logo.png -filter_complex
  "[1:v] fade=out:st=30:d=1:alpha=1 [ov]; [0:v][ov] overlay=10:10 [v]" -map "[v]"
  -map 0:a -c:v libx264 -c:a copy -shortest out.mp4

Это предполагает, что логотип представляет собой одно неподвижное изображение с альфа-каналом, и вы хотите наложить его на видео с частотой кадров 30000/1001 (частота NTSC). Измените -framerate чтобы соответствовать входному видео, если оно отличается. Если ваш логотип является видео, опустите -framerate 30000/1001 -loop 1 . Если у логотипа нет альфа-канала, добавьте его, вставив, например, format=yuva420p, непосредственно перед fade .

Логотип будет отображаться в позиции x, y 10,10 в течение 30 секунд, а затем исчезнет на 1 секунду.

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