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

2022-08-30 19:18:46

这是我的代码,通过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');

它工作得很好,但问题是,图像在视频分辨率上被缩小或放大。例如,在下图中,徽标宽度是,但视频分辨率不同:50px

enter image description here

和这个

enter image description here

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


更新

多亏了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

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

效果很好,但它不能保持徽标宽高比。我在两个不同分辨率的视频上尝试了此代码,这就是结果

enter image description here

和这个

enter image description here

是否有可能改进此解决方案?


答案 1

您可以使用 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

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

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


答案 2

推荐