我想应用 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
?(例如,是否可以存储和/或查询另一个过滤子句的宽度?)
我遇到过最接近的问题是使用 ffmpeg 根据视频大小缩放水印叠加但该答案使用外部 Linux/Cygwin 命令。FFmpeg 水印在我弄清楚 ffmpeg 时也很有用。但是,我在 Windows 上,并通过 Python 调用 ffmpeg,所以我想在 filter_complex 子句中完成所有操作。如果这不可能,我想确定一下,这样我就可以停止尝试了 :)
答案1
答案2
比使用 FFprobe 然后“做任何你想做的数学运算”更简单的解决方案是简单地使用 FFmpeg 的内置scale2ref
过滤器,使用主视频作为参考:
ffmpeg -i input.mp4 -i watermark.png -filter_complex "[1][0]scale2ref=w=oh*mdar:h=ih*0.1[logo][video];[video][logo]overlay=5:H-h-5" -c:a copy output.mp4
本示例将使徽标成为主视频大小的 10%(即 1/10),并由llogan 对 SO 的回答。