FFMPEG:在视频上添加固定大小的图像,无论视频宽度和高度(分辨率)如何
FFMPEG : Add a fixed size image on a video, regardless of the video width & height (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
,但视频分辨率不同:
还有这个
如何防止图像缩放 down/up?
更新
感谢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
这是我的代码,用于向视频添加图像,运行 通过 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
,但视频分辨率不同:
还有这个
如何防止图像缩放 down/up?
更新
感谢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