php - FFMPEG : Add a fixed size image on a video, 不管视频的宽高(分辨率)

标签 php video ffmpeg 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');

它运行良好,但问题是,图像在视频分辨率上按比例缩小或放大。例如在下面的图像中, Logo 宽度为 50px 但视频分辨率不同:

enter image description here

还有这个

enter image description here

如何防止图像缩小/放大?


更新

感谢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

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

enter image description here

还有这个

enter image description here

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

最佳答案

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

这会将 Logo 的高度调整为视频高度的 1/8。

您必须将 W/H 替换为图像的值,例如如果 PNG 是 320x270,那么它应该是 scale2ref=(320/270)*ih/8:ih/8

关于php - FFMPEG : Add a fixed size image on a video, 不管视频的宽高(分辨率),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38268528/

相关文章:

PHP 正在更改我的变量的值,因为我将它绑定(bind)为 mysqli 参数?

python - ffmpeg使用python子进程设置文件名模式

c# - Emgu CV 从视频文件中获取所有帧

java - 使用 Ffmpeg 设置视频流元数据

video - 为什么我无法将 4 秒 60 fps 的剪辑缩小到正好 1 秒?

php - Codeigniter:加载 session 库时出现错误

php - MariaDb 不支持 ANY_VALUE() 函数

php - Codeigniter 的 `where` 和 `or_where`

video - 获取 ffmpeg 报告的错误的(估计)时间偏移量

javascript - 部分拥有的影片上的YouTube Player API错误150