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

时间:2016-07-08 13:57:40

标签: 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');

效果很好,但问题是,图像按比例缩小或向上,视频分辨率上升。例如,在以下图像中,徽标宽度为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 个答案:

答案 0 :(得分:10)

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

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