Я искал несколько дней, чтобы найти это решение. Все, что я нашел, это способы добавить логотип в первые секунды или через несколько секунд или только между определенными частями (например, между 30 и 210 секундами).

Итак, главный вопрос: как добавить мой логотип за последние 60 секунд в видео с ffmpeg? У меня много видео разной длины, и я просто хочу, чтобы последние 60 секунд накладывались на логотип .png (в данном случае также в левом нижнем углу экрана).

В настоящее время я использую то, что вы видите ниже, которое работает отлично (показывает логотип всегда, кроме как между 30-210 секундами видео), но, как я уже упоминал в заголовке, это не делает именно то, что я хочу.

-i video.mp4 -vf "movie=/logo.png [watermark]; [in][watermark] overlay=1:main_h-overlay_h-1:enable=not(between'(t,30,210)') [out]"

2 ответа2

2

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

Основной шаблон

ffmpeg -i in.mp4 -sseof -60 -copyts -i in.mp4 -loop 1 -i logo.png -filter_complex "[1][2]overlay=shortest=1[logo];[0][logo]overlay" out.mp4

Видео вводится дважды. На втором входе установлена опция sseof которая позволяет искать, используя интервал времени, измеренный с конца. Конечно, если не указано иное, FFmpeg будет сбрасывать входные метки времени, поэтому copyts устанавливается для сохранения входного TS.

Сначала логотип накладывается на обрезанное видео, и этот результат накладывается на первый вход. Поскольку временные метки сохраняются, кадры выровнены, и цель достигнута.

1

overlay и enable не имеют возможности указывать конец или продолжительность видео. Вам нужно будет использовать дополнительную команду (возможно, ffprobe и grep , как описано в этом ответе), чтобы извлечь длительность, а затем использовать ее для генерации команды ffmpeg с правым значением between значениями.

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