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会将画面放大到覆盖1600x800crop命令裁剪掉画面超出1600x800的部分,保留中心区域
额外注意事项
- 确认原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)一致,这是判断变形原因的核心依据。
- 透明背景处理:MP4容器不支持透明通道,原PNG的透明部分会被默认转为黑色。如果需要保留透明效果,建议转成WebM格式:
ffmpeg -framerate 30 -pattern_type glob -i "*.png" -c:v libvpx-vp9 -pix_fmt yuva420p result.webm
内容的提问来源于stack exchange,提问作者v_b
相关产品推荐
相关产品推荐

