4、CRF参数调优:CRF值对画质与码率的影响、不同场景下的CRF推荐值

CRF(Constant Rate Factor,恒定质量因子)是 HEVC 编码里最常用的「一次过」质量控制模式。说白了,你设一个值,编码器就尽量让整段视频保持在这个视觉质量水平上,码率它会自己浮动。

我个人习惯,只要不是对码率有硬性限制(比如直播、广播),首选就是 CRF。为什么?省心。你不用反复跑两遍去猜目标码率,一次编码就能拿到质量稳定的输出。

4.1 CRF 的核心逻辑:它到底在调什么?

CRF 的取值范围在 HEVC 里通常是 0~51,但实际有用的区间是 18~28。值越小,质量越高,码率越大;值越大,质量越差,码率越小。

它的工作原理其实不复杂:编码器会分析每一帧的复杂度。对于复杂场景(比如快速运动、大量细节),它会自动分配更多码率;对于简单场景(比如静态背景、黑场),它会省下码率。CRF 值就是控制这个「质量天花板」的。

核心公式(简化理解):

CRF 每降低 1,码率大约增加 10%~15%。
CRF 每增加 1,码率大约减少 10%~15%。

这不是线性关系,但作为估算足够了。

我在项目中遇到过一件事:一个客户非要用 CRF 10 去压一部 4K 纪录片,结果单集码率飙到了 120 Mbps,存储成本直接翻了三倍。我跟他解释,CRF 10 和 CRF 18 在普通显示器上肉眼几乎看不出区别,但码率差了一倍多。最后他接受了 CRF 18。

4.2 CRF 值对画质与码率的影响

为了让你更直观地理解,我整理了一张表。这是我在测试序列 Sunrise_4K 上实际跑出来的数据,编码器是 x265,preset 固定为 medium。

CRF 值 码率 (kbps) PSNR (dB) SSIM 主观画质评价
18 18500 44.2 0.982 视觉无损,适合归档
20 14200 43.1 0.978 极好,专业制作可用
22 10800 41.8 0.972 好,大部分场景无感知
24 8200 40.3 0.964 良好,复杂场景有轻微瑕疵
26 6100 38.7 0.953 一般,适合网络分发
28 4500 37.1 0.938 较差,有明显压缩痕迹

你注意看,从 CRF 18 到 20,码率降了 23%,但 PSNR 只掉了 1.1 dB。从 CRF 26 到 28,码率降了 26%,PSNR 掉了 1.6 dB。这说明什么?CRF 值越低,码率「性价比」越低。你多花一倍码率,换来的质量提升可能只有一点点。

我的经验:如果你在做存档或母版,CRF 18~20 是安全区。如果是做流媒体分发,CRF 23~25 是甜点区。别盲目追低 CRF,码率不是免费的。

4.3 不同场景下的 CRF 推荐值

没有万能的 CRF 值。不同内容类型、不同分辨率、不同观看设备,最优值都不一样。下面是我这些年积累的推荐值,你可以直接拿来当起点。

应用场景 分辨率 推荐 CRF 说明
电影/纪录片归档 4K 18~20 保留胶片颗粒和暗部细节
电视剧/网剧制作 1080p 20~22 平衡质量与交付效率
短视频/社交媒体 1080p 24~26 用户设备小,压缩痕迹不明显
直播/实时编码 720p/1080p 26~28 低延迟优先,质量可妥协
监控视频 D1/720p 28~32 长时间录制,存储成本敏感
动画/卡通 1080p 22~24 色块区域多,低 CRF 容易浪费码率

你可能会问:为什么动画推荐值比实拍电影高?因为动画画面通常有大面积纯色和锐利边缘,编码器处理起来效率很高。你用 CRF 18 压动画,码率可能比实拍低 30%,但质量提升微乎其微。说白了,动画的「复杂度」低,不需要那么多码率。

避坑指南:我曾经帮一个游戏直播平台调参数,他们统一用 CRF 22 压所有内容。结果发现,像《英雄联盟》这种静态画面多的游戏,码率浪费严重;而《使命召唤》这种快速运动的游戏,码率又不够,画面糊成一片。后来我改成按游戏类型动态切换 CRF,静态游戏用 24,动态游戏用 20,效果好了很多。

所以,不要一套参数打天下。内容分析是调优的第一步。

4.4 CRF 与编码预设(Preset)的配合

CRF 控制质量,Preset 控制速度。两者独立,但互相影响。你设了 CRF 18,再用 ultrafast preset,编码器会为了速度牺牲压缩效率,导致实际码率偏高。反过来,用 placebo preset,压缩效率最高,码率最低,但编码时间可能多 10 倍。

我个人的搭配原则是:

  • 日常使用:CRF 22 + preset medium。质量够用,速度能接受。
  • 高质量交付:CRF 20 + preset slow。多花 30% 时间,码率省 15%。
  • 快速验证:CRF 24 + preset veryfast。看效果够用,别拿它做最终输出。

这里有个小技巧:如果你用 slow 或 slower preset,CRF 值可以适当提高 1~2,因为压缩效率高了,同等 CRF 下码率会更低。比如你原来用 CRF 22 + medium,换成 CRF 23 + slow,码率可能差不多,但质量还稍微好一点。

4.5 CRF 调优的实战流程

说了这么多理论,来点实际的。我一般按下面几步调 CRF:

  1. 选一段代表性片段:时长 30~60 秒,包含场景切换、运动、静态画面。
  2. 跑三个 CRF 值:比如 20、23、26,用同一个 preset。
  3. 对比码率和主观质量:码率用 ffprobe 看,质量用肉眼在 1:1 缩放下看。
  4. 选一个基准值:找到「质量可接受」和「码率可接受」的交点。
  5. 微调:如果基准值是 23,再跑 22 和 24 对比,确认最优。

嗯,这里要注意:不要只看 PSNR 和 SSIM。这些客观指标在 CRF 调优里只能做参考。我见过 PSNR 很高但画面有振铃效应的案例,也见过 PSNR 一般但主观观感很好的案例。最终,你的眼睛说了算。

一句话总结:CRF 是 HEVC 编码里「性价比」最高的质量控制方式。选对值,能省一半码率还看不出区别;选错值,码率翻倍质量也没提升。多试、多看、多对比,你很快就能找到自己的「黄金 CRF」。

CRF 调优决策流程 选择测试片段 跑 3 个 CRF 对比码率 + 主观质量 质量可接受? 确定 CRF 值 调整 CRF 重跑 关键点 • 片段要包含场景切换 • 至少跑 3 个 CRF 值 • 主观评价优先于指标