Применение прозрачного PNG-изображения к видео с помощью FFMPEG и NVENC: пошаговая инструкция

Введение в наложение водяных знаков с помощью 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 для достижения желаемого результата.

Применение прозрачного PNG-изображения к видео с помощью FFMPEG и NVENC: пошаговая инструкция

Заключение

Во время наложения водяных знаков убедитесь, что используете совместимые форматы, чтобы избежать проблем с прозрачностью и совместимостью. Использование графических ускорителей NVIDIA и правильных фильтров FFMPEG может значительно упростить процесс. Надеюсь, эта статья помогла вам разобраться в сложностях наложения водяных знаков и даст новые возможности в обработке видео.

Источник

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *