Создайте водяной знак на отдельной дорожке с помощью 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. Это входит в детали позиционирования.

Другие вопросы по тегам