参数调优 约 8 分钟
视频压缩的 CRF:原理、取值与和码率模式的取舍
CRF(Constant Rate Factor,恒定质量因子)是 x264/x265 编码器的质量优先模式:你给一个目标质量,编码器按画面复杂度自动分配码率。同一画质目标下,CRF 模式的体积通常优于固定码率模式,代价是输出体积不可预知。
CRF 在做什么
人眼对画面瑕疵的感知不均匀:静态场景中轻微的模糊立刻可见,剧烈运动中的瑕疵却很难察觉。CRF 利用这一点,给静态画面多分配码率、给剧烈运动画面少分配码率,把钱花在刀刃上。
固定码率模式(CBR/ABR)正好相反:给每秒同样的码率预算,简单场景浪费、复杂场景不足。这就是同体积下 CRF 成片通常更干净的原因。
取值对照
| CRF | 画质 | 典型用途 |
|---|---|---|
| 0 | 数学无损 | 中间片、存档母版 |
| 18 | 视觉无损(普遍共识起点) | 高质量留存 |
| 23 | x264 默认值,肉眼接近无损 | 一般压制 |
| 26 | 轻微损失,体积明显下降 | 网页分享(本站默认) |
| 30 以上 | 可见损失 | 预览、草稿 |
经验值:同一片源,CRF 每降低 6,输出码率约翻倍。CRF 23 与 CRF 17 的体积差约一倍,而多数屏幕上画质差异难以察觉。
preset 与 CRF 的关系
preset 控制编码耗时:从 ultrafast 到 veryslow 共八档,越慢同画质下体积越小,代价是编码时间成倍增加。它不改变画质目标,只改变编码器的搜索精度。
浏览器环境(ffmpeg.wasm)的算力有限,本站默认 veryfast:这是速度与体积的平衡点。从 veryfast 换到 slow,体积大约再省 10%,但编码时间增加 3-5 倍,本地处理场景不划算。
CRF 的边界:不保证体积
同一个 CRF 值,动画片源与手持夜景片源的输出体积可相差数倍——噪点多的画面对编码器而言全是「高频细节」。CRF 锁定的是画质,不是体积。
需要精确控制体积的场景(微信 25MB、邮件附件、平台投稿上限),应使用目标码率模式:按「目标体积 × 8 ÷ 时长」反推码率,输出体积偏差可控制在 5% 以内。