这是我的代码,通过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
,但视频分辨率不同:
和这一个
如何防止图像缩小/缩小?
感谢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
效果很好,但不保持徽标宽高比。 我在两个分辨率不同的视频上尝试了这个代码,这就是结果
和这一个
是否有可能改进此解决方案?
答案 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