Создайте водяной знак на отдельной дорожке с помощью FFmpeg

Создайте водяной знак на отдельной дорожке с помощью FFmpeg

У меня есть файл PNG (альфа) и видеофайл. Я хочу создать видео, в котором первая дорожка — это изображение, а вторая — видео (PNG поверх видео). Проблема в том, что PNG не сохраняет прозрачность.

Мне нужно создать водяной знак (PNG) на отдельной дорожке с помощью ffmpeg поверх видеодорожки.

ffmpeg -i base.mov -i logo.png -map 0 -map 1 output.mov

решение1

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

Я не уверен, что можно добавить прозрачный водяной знак на отдельную дорожку. Причина в том, что само изображение (PNG "поток") нужно превратить в фактическую видеодорожку (например, с помощью x264) – и поскольку видеокодеры не поддерживают прозрачность на этом этапе, вы не получите прозрачное изображение.


Следующий будет добавлен logo.pngв base.movправом верхнем углу. Вы можете использовать следующие параметры для определения положения – в моем примере я просто разместил его на расстоянии десяти пикселей от границы:

  • main_w(ширина основного видео)
  • main_h(высота основного видео)
  • overlay_w(ширина наложенного видео)
  • overlay_h (высота наложенного видео)

Тогда команда фильтра будет выглядеть так:

movie='logo.png' [logo]; [in][logo] overlay=main_w-overlay_w-10:10 [out]

Превращаем это в полноценную команду FFmpeg:

ffmpeg -i base.mov -vf "movie='logo.png' [logo]; [in][logo] overlay=main_w-overlay_w-10:10 [out]" -c:v libx264 -crf 20 out.mov

Параметры -c:v libx264 -crf 20определяют выходной видеокодек и его качество (где CRF, вероятно, будет от 19 до 24, в зависимости от желаемого качества; чем ниже, тем лучше).

На эту тему есть довольно хорошая запись в блоге:Как наложить водяной знак на видео с помощью FFmpeg. Это касается деталей позиционирования.

Связанный контент