Как я могу масштабировать оверлей внутри фильтра ffmpeg?

1493
d3vid

Я хотел бы применить наложение PNG (водяной знак) к произвольному видеофайлу с помощью ffmpeg. Мне бы хотелось, чтобы видео оставалось в своем первоначальном размере (о котором я не знаю заранее), а PNG масштабировалось относительно видео.

Например, следующая команда помещает оверлей вверху слева:

ffmpeg.exe -i input.mov -i header.png -filter_complex \ "[0][1] overlay=0:0" output.mkv 

И следующая команда масштабирует оверлей относительно себя (1/5 ширины, высоты относительно):

ffmpeg.exe -i input.mov -i header.png -filter_complex \ "[1] scale=iw/5:-1 [scaled]; \ [0][scaled] overlay=0:0" output.mkv 

Как сделать оверлей на 1/5 ширины input.mov? (Например, возможно ли сохранить и / или запросить ширину другого предложения фильтра?)

Самый близкий вопрос, с которым я столкнулся, это наложение водяного знака Scale на размер видео с помощью ffmpeg, но в этом ответе используются внешние команды Linux / Cygwin. Водяной знак FFmpeg также был полезен, пока я выяснял ffmpeg. Однако я нахожусь в Windows и вызываю ffmpeg через Python, поэтому я хотел бы сделать все это в предложении filter_complex. Если это невозможно, я хотел бы знать наверняка, чтобы я мог перестать пытаться :)

2

1 ответ на вопрос

3
Chamath

Мой подход - две отдельные команды: одна для расчета размеров, а другая для наложения. Вы можете просто использовать, FFprobeкоторый идет вместе с FFmpeg. Для расчета размеров вы можете использовать следующую команду.

ffprobe -v error -show_entries stream=width,height -of default=noprint_wrappers=1 input_video 

Это приведет к следующему.

ширина = 1280

высота = 720

После того, как вы можете делать то, что хотите, и применять это к своей команде наложения. Также здесь есть еще несколько вариантов масштабирования.

Надеюсь это поможет!