Введение в наложение водяных знаков с помощью FFMPEG
Наложение водяных знаков на видео — важная часть защиты авторских прав и брендинга. В этой статье мы рассмотрим, как накладывать водяной знак с использованием FFMPEG, а также как избежать проблем с форматом видео. Мы рассмотрим код с применением графических ускорителей NVIDIA, что поможет значительно упростить процесс обработки и повысить производительность.
Использование FFMPEG для наложения водяных знаков
Чтобы наложить водяной знак на видео, можно использовать следующую команду в FFMPEG:
ffmpeg -y -vsync 0 -hwaccel cuda -hwaccel_output_format cuda -i ./input.avi -i ./watermark.png -filter_complex "
[0]hwdownload,format=nv12[downloaded_video];
[1]format=rgba,colorchannelmixer=aa=0.3[logo];
[logo]scale=300:300[scaled_logo];
[downloaded_video][scaled_logo]overlay=W-w-10:H-h+10[overlayed_video];
[overlayed_video]hwupload_cuda=extra_hw_frames=5" -c:v h264_nvenc ./output.mp4
Однако, возможно, у вас возникла проблема с сохранением прозрачности изображения PNG, в результате чего ваш водяной знак отображается как большой белый блок. Мы рассмотрим альтернативные методы, чтобы это исправить.
Проблемы с форматами при наложении водяных знаков
Когда вы работали с последней версией FFMPEG (например, 7.1), вы могли столкнуться с ошибкой Can't overlay yuva420p on nv12
. Это говорит о том, что используемое вами видео и водяной знак имеют несовместимые форматы. Мы можем исправить это с помощью следующей команды:
ffmpeg -y -hwaccel cuda -hwaccel_output_format cuda -c:v h264_cuvid -i ./input.avi -i ./watermark.png -filter_complex "[0:v]scale_cuda=format=yuv420p[yuv420p_video];[1]format=rgba,colorchannelmixer=aa=0.3,scale=300:300,hwupload_cuda[uploaded_logo];[yuv420p_video][uploaded_logo]overlay_cuda=W-w-10:H-h+10" -c:v h264_nvenc ./output.mp4
Объяснение ключевых операторов
-c:v h264_cuvid
: этот параметр позволяет выбрать правильный декодер для вашего видео.[1]format=rgba,colorchannelmixer=aa=0.3,scale=300:300,hwupload_cuda[uploaded_logo]
: здесь мы подготавливаем логотип, устанавливая его прозрачность.[0:v]scale_cuda=format=yuv420p[yuv420p_video]
: этот шаг преобразует формат видео из NV12 в yuv420p, что необходимо для успешного наложения водяного знака.[yuv420p_video][uploaded_logo]overlay_cuda=W-w-10:H-h+10
: используется для наложения логотипа на видео на уровне графического процессора.
Тестирование и результаты
Чтобы протестировать получившийся алгоритм, создайте образец входного видео:
ffmpeg -y -f lavfi -i testsrc=size=640x480:rate=10:duration=10 -c:v libx264 -pix_fmt yuv420p input.avi
Затем выполните вашу команду с водяным знаком, изменив значение aa
на 0.9 для достижения желаемого результата.
Заключение
Во время наложения водяных знаков убедитесь, что используете совместимые форматы, чтобы избежать проблем с прозрачностью и совместимостью. Использование графических ускорителей NVIDIA и правильных фильтров FFMPEG может значительно упростить процесс. Надеюсь, эта статья помогла вам разобраться в сложностях наложения водяных знаков и даст новые возможности в обработке видео.