You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

FFmpeg Zoompan叠加图片时如何保持原比例?

解决FFmpeg zoompan滤镜拉伸竖屏图片的问题

这确实是zoompan滤镜的常见“坑”——它默认会把输入媒体强制适配你指定的输出尺寸,完全忽略原始比例,所以竖屏图才会被硬生生拉成16:9。要保住图片比例,核心思路是先让图片按原始比例适配画布,再交给zoompan做动态缩放,而不是让zoompan直接“硬拉”。

下面给你两种可靠的解决方案:

方法1:先适配画布再叠加zoompan

先通过scale+pad组合滤镜,让竖屏图片按原始比例缩放到画布内并居中(上下留黑边),再对合成后的画面用zoompan做动态缩放。示例命令:

ffmpeg -i input.mp4 -i portrait_image.jpg -filter_complex \
"[1:v]scale=w=1920:h=1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2[img]; \
[0:v][img]overlay=x=0:y=0,zoompan=z='min(zoom+0.001,1.5)':d=125" \
-c:v libx264 output.mp4
  • scale=...force_original_aspect_ratio=decrease:让图片按原始比例缩小,刚好能放进16:9画布(1920x1080),不会超出边界
  • pad=...(ow-iw)/2:(oh-ih)/2:把缩放后的图片居中放置,自动补上下黑边(竖屏图专属)
  • 最后用zoompan对整个合成画面做动态缩放,此时图片比例已经锁定,不会被拉伸

方法2:在zoompan内指定原始尺寸

如果你不想提前做适配,也可以直接在zoompan里明确图片的原始尺寸,让它基于原始比例做缩放,再通过overlay放到视频中央。比如你的图片是1080x1920(竖屏),命令如下:

ffmpeg -i input.mp4 -i portrait_image.jpg -filter_complex \
"[1:v]zoompan=z='min(zoom+0.001,1.5)':d=125:s=1080x1920[img]; \
[0:v][img]overlay=x=(W-w)/2:y=(H-h)/2" \
-c:v libx264 output.mp4

这里zoompan=s=1080x1920指定了处理时的输入尺寸(即图片原始大小),zoompan会基于这个比例做动态缩放,之后用overlay把缩放后的图居中叠加到视频上,同样不会破坏比例。

关键提醒

别浪费时间试sar参数了——这个问题和样本宽高比无关,纯粹是zoompan默认强制适配输出尺寸导致的,只要先把图片比例锁死,再用zoompan就没问题。

内容的提问来源于stack exchange,提问作者Pier Giorgio Misley

火山引擎 最新活动