FFMPEG:在视频上添加一个固定大小的图像,不考虑视频的宽度和高度(分辨率)

23

这是我用 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

这个方法效果很好,但是它不能保持标志的纵横比。

我在两个分辨率不同的视频上尝试了这段代码,结果如下:

输入图像描述

和这个

输入图像描述

有没有可能改进这个解决方案?

1个回答

15

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


2
非常感谢。我已经更新了问题,你的解决方案有一个很小的问题。 - M a m a D
1
但是在设计新Logo后,我会更换尺寸。 - M a m a D
1
我尝试了新代码,但没有改变任何东西。生成了相同的结果。 - M a m a D
3
“not working” 是什么意思?你应该提供一个 Pastebin 链接,展示你的实际命令和完整的控制台输出。 - llogan
1
根据我的计算,我相信第一个“ih”应该是“iw”。 - Youans
显示剩余12条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接