使用 ffmpeg 按视频大小缩放水印叠加

fac*_*ace 5 video ffmpeg watermark overlay

我想将水印缩放到视频宽度的 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
Run Code Online (Sandbox Code Playgroud)

如何参考视频宽度?

Gya*_*yan 10

现在可以直接使用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
Run Code Online (Sandbox Code Playgroud)


NuT*_*TyX 5

假设 Linux 环境(或 Windows 上的 cygwin),我发现的唯一方法是执行 2 个命令。

首先获取主视频大小并对它们进行数学计算(注意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)}'`
Run Code Online (Sandbox Code Playgroud)

其次缩放并覆盖视频

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
Run Code Online (Sandbox Code Playgroud)

另外,您可以将$val第二行替换为第一个表达式(包括反引号)并获得相同的结果,但我发现将命令分成两部分更容易阅读。