【问题标题】:FFMPEG : Add a fixed size image on a video, regardless of the video width & height (resolution)FFMPEG:在视频上添加固定大小的图像,无论视频宽度和高度(分辨率)如何
【发布时间】:2016-11-11 03:11:41
【问题描述】:

这是我通过 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

效果很好,但它不会保持徽标的纵横比。 我在两个不同分辨率的视频上尝试了这段代码,结果就是这样

还有这个

是否可以改进此解决方案?

【问题讨论】:

    标签: php video ffmpeg resolution


    【解决方案1】:

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

    【讨论】:

    • 非常感谢。我更新了这个问题,你的解决方案出了点小问题
    • 您的徽标分辨率是多少?
    • 测试用,505X384。
    • 但是在设计完新标志后,我会替换尺寸
    • @Farzad “不工作”是什么意思?您应该提供一个指向显示您的实际命令和完整控制台输出的 pastebin 的链接。
    猜你喜欢
    • 2011-11-13
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    • 2019-12-05
    • 2010-10-15
    • 1970-01-01
    相关资源
    最近更新 更多