在处理视频素材、压缩上传文件、适配不同平台时,调整分辨率是最常见的需求之一。FFmpeg 提供了非常灵活的缩放能力,既可以快速把 4K 视频压成 1080p,也可以保持原始比例生成 720p、480p 等版本。掌握 scale 滤镜后,很多视频处理工作都可以用一条命令完成。
FFmpeg 调整分辨率主要使用视频滤镜 scale。基本写法是:
ffmpeg -i input.mp4 -vf "scale=1280:720" output.mp4
这条命令会把输入视频缩放到 1280×720。
需要注意的是,如果直接同时指定宽度和高度,而目标比例与原始比例不一致,画面可能会被拉伸或压扁。例如原始视频是 16:9,却被强制缩放到 4:3,人物和物体就会变形。
更稳妥的做法是只固定宽度或高度,另一边交给 FFmpeg 自动计算:
ffmpeg -i input.mp4 -vf "scale=1280:-1" output.mp4
这里 1280 表示宽度固定为 1280,-1 表示高度按原始比例自动计算。
如果输出视频需要使用 H.264 等编码器,宽度和高度通常要求是偶数。此时可以把 -1 改成 -2:
ffmpeg -i input.mp4 -vf "scale=1280:-2" output.mp4
这样可以避免因为高度为奇数而导致编码失败。
如果平台要求输出固定分辨率,但又不想画面变形,可以使用 scale 配合 pad 添加黑边:
ffmpeg -i input.mp4 -vf "scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2" output.mp4
这条命令会先按原始比例把视频缩放到能放入 1280×720 的最大尺寸,再用黑边填充剩余区域,最终输出固定分辨率且不变形的视频。
调整分辨率通常需要重新编码视频,不能直接使用 -c:v copy。
推荐配合 H.264 编码使用:
ffmpeg -i input.mp4 -vf "scale=1280:-2" -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k output.mp4
其中:
-c:v libx264:使用 H.264 编码,兼容性较好;
-crf 23:默认画质,数值越小画质越好,文件也越大;
-preset medium:编码速度与压缩率的平衡选项;
-c:a aac -b:a 128k:音频转成 AAC,适合大多数播放场景。
如果只需要缩小分辨率、不需要改动音频,可以把音频部分写成 -c:a copy。
优先保持比例:除非明确需要变形效果,否则不要随意同时固定宽和高。
高度尽量用 -2:可以避免编码器因奇数分辨率报错。
上采样不会提升画质:把低分辨率视频放大到 4K,只会增加文件体积,不会增加真实细节。
处理前可以先预览:如果不确定效果,可以先截取几秒测试:
ffmpeg -i input.mp4 -vf "scale=1280:-2" -t 5 -c:v libx264 -crf 23 -c:a aac -b:a 128k test.mp4
处理 4K/8K 视频时可考虑硬件加速:例如 NVIDIA 显卡可以使用 h264_nvenc 或 hevc_nvenc,但画质控制方式与 libx264 略有不同。
FFmpeg 调整分辨率的核心就是 scale 滤镜。日常使用中最推荐的写法是:
ffmpeg -i input.mp4 -vf "scale=1280:-2" -c:v libx264 -crf 23 -c:a aac -b:a 128k output.mp4
如果只是临时查看效果,可以用更简单的:
ffmpeg -i input.mp4 -vf "scale=1280:-2" output.mp4
掌握这些命令后,无论是压缩视频、统一素材规格,还是为不同平台导出多档分辨率,都可以快速完成。