Масштаб наложения водяного знака на размер видео через FFmpeg

Я хотел бы масштабировать водяной знак до 5% от ширины видео.

Мне нужно что-то вроде этого:

ffmpeg -i 1.mp4 -i logo.png -filter_complex "[1:v] scale=1_MP4_VIDEO_WIDTH*0.05:-1 [logo1]; [0:v][logo1] overlay=0:0" -y -b 1600k -c:v libx264 -profile high -level 4.1 -c:a libfaac -q:a 128k 2.mp4

Как я могу ссылаться на ширину видео?

10
задан Journeyman Geek
05.01.2023 17:35 Количество просмотров материала 3490
Распечатать страницу

3 ответа

предполагая среду linux (или cygwin в windows), единственный способ, который я нашел, - выполнить 2 команды.

во-первых, чтобы получить основной размер видео и выполнять математику на них (Примечание:x/20 == x*0.05:

val=`ffmpeg.exe -i 1.mp4 2>&1 | grep Video: | sed 's_.*, \([0-9]*x[0-9]*\) .*__' | awk 'BEGIN {FS="x"} {print int(/20)"x"int(/20)}'`

во-вторых, чтобы масштабировать и накладывать видео

ffmpeg -i 1.mp4 -i logo.png -filter_complex "[1:v] scale=$val [logo1]; [0:v][logo1] overlay=0:0" -y -b 1600k -c:v libx264 -profile high -level 4.1 -c:a libfaac -q:a 128k 2.mp4

кроме того, вы можете просто заменить $val на второй строке с первым выражением (включая обратные кавычки) и получите тот же результат, но мне немного легче читать команду расщепления на два.

3
отвечен NuTTyX 2023-01-07 01:23

теперь это может быть выполнено непосредственно с помощью scale2ref фильтр.

ffmpeg -i 1.mp4 -i logo.png \
-filter_complex "[1:v][0:v]scale2ref=iw*0.05:-1[logo1][base]; \
 [base][logo1]overlay=0:0[v]" \
-map [v] -map 0:a -y -b:v 1600k -c:v libx264 -profile high -level 4.1 \
-c:a libfaac -b:a 128k 2.mp4
5
отвечен Gyan 2023-01-07 03:40

Что касается Windows, я обнаружил следующий метод, используя ffprobe и ffmpeg. Вот такая .файл летучая мышь код:

@echo off
   SetLocal EnableExtensions EnableDelayedExpansion

   for %%a in ("*.mp4") do (
      For /F "usebackq" %%I In (`ffprobe -v error -show_entries stream"="width -of default"="noprint_wrappers"="1:nokey"="1 "%%~a"`) Do (

      Set V=%%~I
      ffmpeg -i "%%a" -i logo.png -b:v 1M -filter_complex "[1:v]scale=(SCALE_FACTOR*!V!):-1 [wm]; [0:v][wm] overlay=x=(main_w-overlay_w):y=(main_h-overlay_h)" -y -v 2 "new\%%~na.mp4"
)

)

здесь SLACE_FACTOR ширина наложения изображения делятся на справочные видео ширина файла (например., 320пк/1280 пикселей).

1
отвечен F'K 2023-01-07 05:57

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх