FFmpeg视频缩放命令不生效:无法将视频转为480*360
这个问题其实是FFmpeg默认的宽高比保护机制在起作用,很容易踩坑!
你的原视频是1280×720,比例是16:9(1280/720≈1.777),而你指定的目标分辨率480×360是4:3(480/360≈1.333),两者比例不匹配。FFmpeg的scale滤镜默认会优先保持原视频的宽高比,避免画面拉伸变形——它会自动调整其中一个维度的值,让缩放后的视频符合原比例。对于你的情况,目标高度是360,按照16:9的比例计算,对应的宽度应该是360×(16/9)=640,所以最终输出成了640×360,而不是你指定的480×360。
解决方法分两种场景:
1. 强制拉伸到480×360(接受画面变形)
如果你不在乎画面比例变形,只想严格输出480×360的分辨率,需要显式关闭宽高比保护,使用force_original_aspect_ratio=disable参数:
ffmpeg -i oldVideo.mp4 -vf scale=480:360:force_original_aspect_ratio=disable newVideo.mp4
2. 保持原比例,适配480×360(无变形)
如果希望画面不变形,有两种常见处理方式:
添加黑边填充:把视频缩放到能放进480×360的最大尺寸,然后用黑边填充剩余空间:
ffmpeg -i oldVideo.mp4 -vf "scale=w='min(480,ih*16/9)':h='min(360,iw*9/16)',pad=480:360:(480-iw)/2:(360-ih)/2" newVideo.mp4这里
scale先计算出不超过目标尺寸的最大适配分辨率,再用pad补黑边居中。裁剪多余画面:把视频缩放到高度360后,裁剪左右两侧多余部分,得到480×360:
ffmpeg -i oldVideo.mp4 -vf "scale=-1:360,crop=480:360" newVideo.mp4注意:
scale=-1:360中的-1表示自动按原比例计算宽度,这里会得到640×360,再用crop裁剪到480×360,会切掉左右各80像素的内容。
补充说明
FFmpeg官方教程里的scale=480:360命令,默认是在原视频比例与目标比例一致的情况下生效的。如果比例不同,就会触发自动适配逻辑——这也是为什么你遇到了和预期不符的结果。
内容的提问来源于stack exchange,提问作者Neer Patel




