这是我的代码,可通过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
效果很好,但不能保持徽标的宽高比。我在具有不同分辨率的两个视频上尝试了此代码,这就是结果
还有这个
有可能改进此解决方案吗?
您可以使用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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句