FFMPEG:在视频上添加固定大小的图像,无论视频宽度和高度(分辨率)如何

M a*_*a D 19 php video ffmpeg resolution

这是我的代码,通过PHP运行为视频添加图像:

exec('ffmpeg -i input.mp4 -i logo.png -filter_complex 
"[0:v][1:v] overlay=10:10"  -pix_fmt yuv420p -c:a copy output.mp4');
Run Code Online (Sandbox Code Playgroud)

它运作良好,但问题是,图像按比例缩小或向上,取决于视频分辨率.例如,在以下图像中,徽标宽度是50px但视频分辨率不同:

在此输入图像描述

还有这个

在此输入图像描述

如何防止图像缩小/缩小?


更新

感谢Mulvya,他提出了这些代码

ffmpeg -i input.mp4 -i logo.png -filter_complex 
"[1:v][0:v]scale2ref=(W/H)*ih/8:ih/8[wm][base];[base][wm]overlay=10:10"
-pix_fmt yuv420p -c:a copy output.mp4
Run Code Online (Sandbox Code Playgroud)

ffmpeg -i input.mp4 -i logo.png -filter_complex 
"[1:v][0:v]scale2ref=(W/H)*ih/8:ih/8[wm][base];[wm]setsar=1[wmsar];
[base][wmsar]overlay=10:10"
-pix_fmt yuv420p -c:a copy output.mp4
Run Code Online (Sandbox Code Playgroud)

这非常有效,但它不保持徽标宽高比.我在两个分辨率不同的视频上尝试了这个代码,这就是结果

在此输入图像描述

还有这个

在此输入图像描述

有可能改进这个解决方案吗?

Gya*_*yan 11

您可以使用scale2ref过滤器.

ffmpeg -i input.mp4 -i logo.png -filter_complex 
"[1:v][0:v]scale2ref=(W/H)*ih/8/sar:ih/8[wm][base];[base][wm]overlay=10:10"
-pix_fmt yuv420p -c:a copy output.mp4
Run Code Online (Sandbox Code Playgroud)

这会将徽标的高度调整为视频高度的1/8.

您必须替换W/H图像的值,例如,如果PNG是320x270,那么它应该是scale2ref=(320/270)*ih/8:ih/8

  • 非常感谢。我**更新了**问题,您的解决方案几乎没有问题 (2认同)
  • @Farzad你是什么意思,"不工作"?您应该提供指向显示实际命令和完整控制台输出的pastebin的链接. (2认同)