Как добавить мой логотип за первые 30 секунд в видео с ffmpeg?

9

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

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

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

iwocan
источник
мое видео зовут d1.mp4, а мой логотип зовут logo.png, спасибо ..
iwocan
Тогда что ffmpeg -i d1.mp4 -i logo.pngпоказывает? Пожалуйста, просто введите эту команду и покажите нам, каков результат. Задавая вопросы ffmpeg, вы всегда должны включать как можно больше подробностей о том, какой у вас видео / аудио материал, что вы уже пробовали, а также вывод всей командной строки всего, что вы пробовали.
slhck
вот что я получаю на своем экране cmd. pastebin.com/bPCnhXh2
iwocan

Ответы:

13
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 секунды.

mark4o
источник
1
Очень интересно! Не могли бы вы объяснить, почему framerateи loopтребуются в этом случае, а не для простого наложения без фильтра затухания?
Раджиб
Большое спасибо mark40, но когда я пишу этот код, экран cmd не останавливается .. Я не знаю почему, но у меня это не сработало ..
iwocan
Привет, ЛордNeckbeard, вот скриншот .. u1312.hizliresim.com/1j/4/v5ny8.png ..
iwocan
1
@iwocan Я полагаю, вы можете скопировать вещи из окна Windows. Я предполагал, что вы будете искать, как это сделать, но посмотрите на Копировать в буфер обмена из командной строки Windows .
Llogan
4
@Rajib: причина для -framerateи -loopдля неподвижного изображения в том, что затухание будет работать. Если есть только один кадр, то он не может исчезнуть в течение 1 секунды. В идеале это должна быть та же частота кадров, что и у видео, чтобы затухание было как можно более плавным.
mark4o
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 .

llogan
источник
Большое спасибо! :) Я снова прошу прощения за мой ломаный английский. Эта команда работает отлично! :)
iwocan
наконец то понятно! что я должен использовать, чтобы он появился в начале, чем в конце?
cikatomo
Я хотел появиться в начале И в конце? Два раза. я попытался включить = между (t \, 0 \, 30): включить = между (t \, 50 \, 60), но действует только последний график времени
cikatomo
@cikatomo enable=not(between'(t,30,50)'). Это покажет наложение в любое время, но не в течение 30-60 секунд.
Llogan
Отлично спасибо. Несмотря на ваше предупреждение не использовать overlayвсе само по себе, я сделал, потому что положение по умолчанию в верхнем левом углу было то, что я хотел. (Так что в конце мои флаги были просто filter_complex overlay.)
Felwithe