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