You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FFmpeg转PNG为MP4时画面异常拉伸缩放问题求助

解决PNG转MP4时画面拉伸/缩放异常的问题

你的问题出在强制指定了输出分辨率1600x800,但该尺寸的比例(2:1)和原PNG的分辨率比例不匹配,ffmpeg默认会直接拉伸画面填满指定尺寸,导致变形。以下是几种针对性的解决方案:

方案1:保持原比例,添加黑边适配1600x800

用滤镜先按原比例缩放画面,再补黑边填满目标尺寸:

ffmpeg -framerate 30 -pattern_type glob -i "*.png" -vf "scale=1600:800:force_original_aspect_ratio=decrease,pad=1600:800:(ow-iw)/2:(oh-ih)/2" -pix_fmt yuv420p -c:v libx264 result.mp4
  • scale参数里的force_original_aspect_ratio=decrease会将画面缩放到不超过1600x800的最大适配尺寸
  • pad命令自动在画面上下或左右添加黑边,填满1600x800的同时保持原比例

方案2:直接使用原PNG的分辨率输出

如果不需要固定1600x800分辨率,去掉强制指定的-s:v参数即可:

ffmpeg -framerate 30 -pattern_type glob -i "*.png" -pix_fmt yuv420p -c:v libx264 result.mp4

ffmpeg会自动沿用输入PNG的分辨率作为输出分辨率,完全避免缩放变形。

方案3:保持比例,裁剪画面适配1600x800

如果想填满1600x800且不想加黑边,可以先放大画面覆盖目标尺寸,再裁剪超出部分:

ffmpeg -framerate 30 -pattern_type glob -i "*.png" -vf "scale=1600:800:force_original_aspect_ratio=increase,crop=1600:800" -pix_fmt yuv420p -c:v libx264 result.mp4
  • scale参数里的force_original_aspect_ratio=increase会将画面放大到覆盖1600x800
  • crop命令裁剪掉画面超出1600x800的部分,保留中心区域

额外注意事项

  1. 确认原PNG分辨率比例:可以用以下命令查看单张PNG的分辨率:
ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=s=x:p=0 example.png

对比该分辨率的比例是否与1600x800(2:1)一致,这是判断变形原因的核心依据。

  1. 透明背景处理:MP4容器不支持透明通道,原PNG的透明部分会被默认转为黑色。如果需要保留透明效果,建议转成WebM格式:
ffmpeg -framerate 30 -pattern_type glob -i "*.png" -c:v libvpx-vp9 -pix_fmt yuva420p result.webm

内容的提问来源于stack exchange,提问作者v_b

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 00:42:34