Я пытаюсь добавить свой логотип на первые 30 секунд видео с помощью ffmpeg. У меня есть видео с названием d1.mp4
и логотип с названием logo.png
.
При запуске видео водяной знак должен находиться в верхнем левом или верхнем правом углу видео и исчезнуть через 30 секунд.
Можете ли вы показать мне, как это добавить?
решение1
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 секунду.
решение2
С использованием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.