Scale watermark overlay par taille de vidéo avec ffmpeg

J'aimerais étendre un filigrane à 5% de la largeur de la vidéo.

J'ai besoin de quelque chose comme ça:

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 

Comment puis-je faire référence à la largeur de la vidéo?

En supposant un environnement linux (ou cygwin sur Windows), la seule façon de trouver est d'exécuter 2 commandes.

D'abord d'obtenir la taille de la vidéo principale et d'effectuer des calculs sur elles (note: x/20 == x*0.05 :

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

Deuxième à l'échelle et superposer la vidéo

 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 

En outre, vous pouvez simplement remplacer $val sur la deuxième ligne par la première expression (y compris les backquotes) et obtenir le même résultat, mais je trouve un peu plus facile de lire la commande de fractionnement dans deux.

Cela peut maintenant être effectué directement à l'aide du filtre 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 

Quant à Windows, j'ai découvert la méthode suivante en utilisant ffprobe et ffmpeg. Voici un code de fichier .bat:

 @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" ) 

)

Ici SLACE_FACTOR est une largeur d'image superposée divisée en une largeur de fichier vidéo de référence (par exemple, 320px / 1280px).