FFmpeg AVFilter наложение / водяной знак программно - PullRequest
12 голосов
/ 06 февраля 2012

Я пытаюсь программно наложить изображения или видео поверх другого видео с помощью FFmpeg.Кажется, что AVFilter может сделать это.

Есть много примеров того, как сделать это или подобные вещи с командной строкой, однако я не нашел примеров использования AVFilter программно, кроме doc / examples / filtering.с, который помогает мне, но не совсем достаточно.Я уже могу декодировать и кодировать видео, мне просто нужно научиться фильтровать декодированные кадры и добавлять водяные знаки.

Есть ли примеры использования libavfilter программно?

Есть ли примерыиспользовать наложения или фильтры фильмов?

1 Ответ

7 голосов
/ 30 августа 2012

Команда:

ffmpeg –i inputvideo.avi -vf "movie=watermarklogo.png [watermark]; [in][watermark] overlay=10:10 [out]" outputvideo.flv

создает видео с изображением «watermarklogo.png» в верхнем левом углу.Вызов этой команды из другой программы должен быть достаточно простым.

Разбивая это по частям, чтобы понять это:

ffmpeg - это программа, которую вы будете использоватьдля добавления водяного знака.

-i используется для указания входных файлов.

inputvideo.avi - ваш входной файл, заданный -i.

-vfиспользуется для указания видеофильтра.В этом случае это все в кавычках.

movie=watermarklogo.png загрузит файл, который вы хотите использовать в качестве водяного знака.Здесь мы загружаем файл как источник видео (используя movie) независимо от того, является ли файл видео.В данном случае это изображение.

[watermark] обозначает файл, который вы только что загрузили.Эта метка будет использоваться в остальной части кода.

[in] и [out] относятся к входному потоку и выходному потоку видео.

overlay используется правильнопосле метки [watermark], чтобы он ссылался на нее.В этом простом случае мы помещаем overlay в 10:10.Это означает, что водяной знак будет смещен на 10 пикселей сверху и слева.Если бы вы хотели внизу справа, вы бы использовали overlay=main_w-overlay_w-10:main_h-overlay_h-10, где main_w - ширина входного потока, overlay_h - высота оверлейного файла и т. Д.

Наконец, outputvideo.flv явнофайл, в который вы хотите сохранить результаты.

Дополнительная информация:

Я нашел эту информацию на сайте, о котором Дмитрий упоминал в комментариях.Алекс упоминал, что эта страница может быть слишком сложной для тех, кто плохо знаком с такими вещами.Тем не менее, я никогда не делал ничего подобного, и в течение пары минут я получил результаты, которые, как я считаю, ищутся.

Примечание: у меня был момент проблемы, когда я получал ошибку:

error while opening encoder for output stream #0.1

Если у вас возникла та же проблема, вам, вероятно, потребуется вручную установить частоту дискретизации с помощью параметра -ar (например, -ar 22050).

...