FFmpeg 视频压缩怎么选参数?CRF、preset 和 tune 实战指南
FFmpeg 压缩视频的核心就三个参数:-crf 控制质量,-preset 控制编码速度和压缩率的平衡,-tune 针对特定内容类型优化。理解这三个参数,就能应对 90% 的压缩场景。
CRF:画质旋钮
CRF(Constant Rate Factor)是 H.264/H.265 的质量控制参数,范围 0-51。数字越小质量越高文件越大,数字越大质量越低文件越小。
关键参考值:
- 18:视觉无损,和原片几乎看不出差别,文件很大
- 23:默认值,质量和体积的平衡点,大多数场景够用
- 28:明显有损但能看,适合手机端播放
- 30+:质量较差,只在极端节省空间时使用
bashffmpeg -i input.mp4 -c:v libx264 -crf 23 output.mp4
CRF 是感知质量恒定——运动多的场景自动多分配码率,静态场景少分配。所以同一个 CRF 值,不同视频的文件大小可能差很多。如果需要精确控制文件大小,得用两遍编码(two-pass)或指定码率。
Preset:时间换空间
Preset 控制编码器用多少计算时间来寻找更优的压缩方案。越慢的 preset 压缩率越高(同画质文件更小),但编码时间越长。
| Preset | 编码速度 | 同 CRF 文件大小 | 适用场景 |
|---|---|---|---|
| ultrafast | 最快 | 最大(约 2x) | 实时流媒体 |
| veryfast | 很快 | 较大 | 直播推流 |
| fast | 快 | 中等 | 日常快转 |
| medium | 中等(默认) | 基准 | 一般用途 |
| slow | 慢(约 3x 时间) | 较小(约 -15%) | 离线转码 |
| veryslow | 很慢(约 6x) | 更小(约 -25%) | 归档存储 |
实际建议:离线处理用 slow,实时场景用 veryfast,不确定就用 medium。ultraslow 不存在,veryslow 已经是极限了。从 medium 切到 slow,编码时间翻 3 倍但文件只小 15%——值不值看你的需求。
bash# 离线高质量压缩 ffmpeg -i input.mp4 -c:v libx264 -crf 20 -preset slow output.mp4 # 快速压缩(直播/即时预览) ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset veryfast output.mp4
Tune:针对性优化
Tune 让编码器针对特定内容类型调整策略:
- film:电影/真人视频,去胶片颗粒感,优化暗部细节
- animation:动画片,优化大面积色块和平滑区域
- stillimage:PPT 录屏/幻灯片,优化静态画面
- fastdecode:牺牲一点压缩率换取更快解码速度(低端设备播放)
- zerolatency:零延迟,实时流媒体和直播专用
大部分情况不加 tune 就行。加错了反而比不加差——对真人视频用 animation,细节会糊掉。
bash# 压缩电影 ffmpeg -i movie.mkv -c:v libx264 -crf 20 -preset slow -tune film output.mp4 # 压缩动画 ffmpeg -i anime.mkv -c:v libx264 -crf 20 -preset slow -tune animation output.mp4 # 压缩录屏教程 ffmpeg -i screen.mp4 -c:v libx264 -crf 23 -preset medium -tune stillimage output.mp4
H.265 压缩:省空间但要考虑兼容性
H.265(HEVC)比 H.264 同画质文件小 30-50%,但编码慢 3-5 倍,且老设备可能不支持播放。如果目标平台是手机/智能电视/浏览器,H.264 兼容性最好。如果目标是存档或只在 PC 上播放,H.265 更划算。
bashffmpeg -i input.mp4 -c:v libx265 -crf 28 -preset slow output.mp4
注意 H.265 的 CRF 值不能和 H.264 直接对比——H.265 的 CRF 28 大致对应 H.264 的 CRF 23,因为 H.265 的范围和感知曲线不同。
两个常见坑
1. 忘了 -movflags +faststart:MP4 文件的元数据(moov atom)默认放在文件末尾,浏览器必须下载完整个文件才能开始播放。加 -movflags +faststart 把元数据移到开头,允许边下载边播放。网络视频必加。
2. 音频不要忘:压缩视频时音频默认也会被重编码。如果只是压缩视频不想动音频,加 -c:a copy 直接拷贝音频流。要压缩音频就用 -c:a aac -b:a 128k,128kbps 对大多数内容够用。