4. 编码参数调优(上):预设(preset)与调优(tune)详解、码率控制模式(CBR/VBR/CRF)选择
编码参数调优,说白了就是跟编码器“讨价还价”。你想让它跑快点,它就得牺牲画质;你想让它压得小,它就得花更多时间。这中间的门道,全在 preset 和 tune 这两个参数里。
我刚开始接触 H.265 编码时,总觉得参数越多越好。后来踩了不少坑才明白——选对参数,比堆参数重要得多。
4.1 预设(Preset)——速度与压缩率的博弈
Preset 是编码器内置的一套“策略模板”。它决定了编码器在编码速度和压缩效率之间如何取舍。
x265 提供了 10 个预设等级,从快到慢依次是:
| 预设等级 | 相对速度 | 压缩率提升 | 典型场景 |
|---|---|---|---|
| ultrafast | 最快 | 基准 | 实时预览、调试 |
| superfast | 极快 | +5% | 低延迟直播 |
| veryfast | 很快 | +10% | 快速转码 |
| faster | 较快 | +15% | 日常批量处理 |
| fast | 中等偏快 | +20% | 点播转码 |
| medium | 中等 | +25% | 默认值,通用场景 |
| slow | 较慢 | +35% | 高质量存档 |
| slower | 慢 | +45% | 高压缩率需求 |
| veryslow | 很慢 | +55% | 极限压缩 |
| placebo | 最慢 | +60% | 几乎不用,收益极低 |
核心结论:从 medium 到 slow 是性价比最高的区间。再往下走,时间翻倍,压缩率提升却越来越小。
我在项目中遇到过一件事:有个同事为了省存储,把所有视频都用了 veryslow 预设。结果一个 2 小时的 4K 视频,编码跑了整整 8 个小时。最后算下来,比 slow 预设只多省了 3% 的码率。你说值不值?
4.2 调优(Tune)——为特定场景“定制”编码器
Tune 是在 preset 基础上,针对特定内容类型做的微调。它告诉编码器:“嘿,这段视频是动画,别用运动估计那套算法了。”
x265 支持的 tune 选项:
- psnr:以峰值信噪比为优化目标,适合客观质量评测
- ssim:以结构相似性为优化目标,更接近人眼感知
- grain:保留胶片颗粒感,适合电影、老片源
- fastdecode:牺牲压缩率换取解码速度,适合低端设备播放
- zerolatency:零延迟模式,适合视频会议、直播
- animation:针对卡通、动画内容优化
我的习惯:做点播转码时,我一般不加 tune,让编码器自己判断。但遇到动画片源,我一定会加 --tune animation,效果立竿见影。
你想想看,动画片里大块纯色区域多,运动边缘清晰。如果用默认的运动估计,反而会浪费码率去处理那些“假纹理”。--tune animation 会调整量化参数,让平坦区域更平滑,边缘更锐利。
4.3 码率控制模式——CBR、VBR、CRF 怎么选?
码率控制,就是决定“每秒钟给视频分配多少比特”。选错了,要么画面糊成一片,要么文件大得离谱。
4.3.1 CBR(恒定码率)
输出码率始终保持在设定值附近,波动很小。
- 优点:带宽可控,适合直播、视频会议
- 缺点:复杂场景画质下降明显,简单场景浪费码率
- 命令示例:
--bitrate 5000 --vbv-maxrate 5000 --vbv-bufsize 5000
避坑指南:我曾经在一个直播项目里用了 CBR,结果画面剧烈运动时全是马赛克。后来加了 --vbv-bufsize 参数,允许短时间码率波动,才解决了问题。
4.3.2 VBR(可变码率)
允许码率在一定范围内波动,复杂场景多用码率,简单场景少用。
- 优点:画质更稳定,文件大小可控
- 缺点:峰值码率可能超出预期
- 命令示例:
--bitrate 5000 --vbv-maxrate 8000 --vbv-bufsize 6000
说白了,VBR 是 CBR 和 CRF 之间的折中方案。你设一个目标码率,再设一个上限,编码器在两者之间自由发挥。
4.3.3 CRF(恒定质量)
这是我最常用的模式。它不关心码率,只关心感知质量。
- 优点:画质恒定,一次编码搞定
- 缺点:输出文件大小不可控
- 命令示例:
--crf 23
CRF 的取值范围是 0~51,数值越小质量越高。我个人习惯:
- CRF 18~20:视觉无损,适合存档
- CRF 23~25:高质量,适合点播
- CRF 28~30:可接受质量,适合移动端
重要提醒:CRF 模式下,--vbv-maxrate 和 --vbv-bufsize 依然有效。如果你需要限制峰值码率,可以同时使用。
4.4 知识体系总览
下面这张图,把 preset、tune 和码率控制的关系梳理清楚了:
4.5 实战组合推荐
说了这么多理论,直接给几套我常用的组合拳:
| 场景 | Preset | Tune | 码率控制 | 备注 |
|---|---|---|---|---|
| 1080p 点播 | slow | 不指定 | CRF 23 | 通用配置,画质与体积平衡 |
| 4K 存档 | slower | 不指定 | CRF 18 | 视觉无损,保留细节 |
| 直播推流 | veryfast | zerolatency | CBR 5000k | 低延迟,码率稳定 |
| 动画转码 | medium | animation | CRF 25 | 节省码率,边缘清晰 |
| 移动端点播 | fast | fastdecode | CRF 28 | 降低解码压力 |
我的建议:别一上来就追求“最佳参数”。先拿一小段素材跑几组对比,看看实际效果。毕竟,参数是死的,你的业务场景才是活的。