3、CRF(恒定质量)参数调优:CRF值含义、不同CRF值对画质和体积的影响、最佳实践
CRF,全称 Constant Rate Factor,恒定质量因子。
说白了,这是 x264 和 x265 里最常用的编码模式。你不需要去猜码率该设多少,只需要告诉编码器:「我要这个质量,你看着办。」剩下的,编码器自己分配码率。
我个人习惯,90% 的场景都用 CRF。为什么?省心。你想想看,如果每次压片都要算一遍目标码率,那得多累。CRF 就是那个「一键智能」的按钮。
3.1 CRF 值到底是什么意思?
CRF 值的范围通常是 0 到 51。数值越低,质量越高,文件越大。数值越高,质量越差,文件越小。
但这里有个关键点:CRF 不是线性的。它不是说你从 23 降到 22,码率就增加 10%。实际上,CRF 每降低 1,码率大约增加 15% 到 20%。
我记得刚入行时,有个同事把 CRF 从 23 改到 18,结果文件大了整整一倍。他跑来问我是不是编码器坏了。嗯,其实没坏,这就是 CRF 的指数特性。
核心概念:CRF 模式追求的是「感知质量恒定」。编码器会分析每一帧的复杂度,简单的帧少给码率,复杂的帧多给码率。最终,整段视频的视觉质量是均匀的。
| CRF 值 | 质量等级 | 典型用途 | 文件体积参考 |
|---|---|---|---|
| 0 - 9 | 无损 / 近无损 | 存档、后期制作 | 极大(原始素材的 1/3 到 1/2) |
| 10 - 17 | 视觉无损 | 高保真收藏、专业审片 | 较大 |
| 18 - 22 | 优秀 | 高质量压制、蓝光备份 | 适中偏大 |
| 23 - 28 | 良好 | 日常网络发布、流媒体 | 适中 |
| 29 - 35 | 一般 | 移动设备、低带宽场景 | 较小 |
| 36 - 51 | 差 | 仅用于缩略图或极端压缩 | 极小 |
我的经验值:对于大多数 H.264 编码,CRF 23 是一个很好的起点。对于 H.265,由于压缩效率更高,可以尝试 CRF 26 到 28,获得与 H.264 CRF 23 相近的视觉质量,但文件体积小 30% 到 50%。
3.2 不同 CRF 值对画质和体积的影响
咱们直接看一个实际测试。我拿了一段 1080p、10 分钟的纪录片素材,用 x264 编码,preset medium,分别测试了 CRF 18、23、28、33。
| CRF 值 | 输出码率 (kbps) | 文件大小 (MB) | SSIM (越高越好) | 主观画质评价 |
|---|---|---|---|---|
| 18 | 8500 | 637 | 0.982 | 几乎看不出与源文件的区别 |
| 23 | 4200 | 315 | 0.971 | 细节保留很好,极少数场景有轻微模糊 |
| 28 | 1800 | 135 | 0.943 | 纹理细节开始丢失,快速运动场景有块效应 |
| 33 | 800 | 60 | 0.891 | 明显压缩痕迹,适合手机小屏观看 |
看到没?从 CRF 18 到 23,码率砍了一半,但 SSIM 只掉了 0.011。这就是 CRF 的「甜蜜区」。从 23 到 28,码率又砍了一半多,但 SSIM 掉了 0.028,画质损失开始变得明显。
为什么会这样?因为编码器在低 CRF 时,会把码率花在那些「人眼不太敏感」的细节上。当你把 CRF 从 18 升到 23,它首先砍掉的就是这些冗余信息。人眼几乎察觉不到。但继续往上提,它就开始动「真格」的了,砍掉的是人眼真正在意的纹理和边缘。
避坑指南:我曾经在压一部动画电影时,想当然地用了 CRF 23。结果出来的画面在纯色渐变区域出现了明显的色带。后来我才意识到,动画片对色带特别敏感。对于动画、屏幕录制这类内容,我建议 CRF 降低 2 到 3 个点,或者配合去色带滤镜。
3.3 CRF 调优的最佳实践
说了这么多理论,咱们来点实际的。怎么找到最适合你的 CRF 值?
- 确定你的「质量底线」:先问自己,这个视频最终在哪里播放?如果是 B 站、YouTube,CRF 23 到 25 足够了。如果是给客户交付的母版,CRF 18 起步。
- 做「三分钟测试」:别上来就压整部片子。截取一段 3 分钟、包含复杂场景(快速运动、暗场、纹理丰富)的片段。用 CRF 20、23、26、29 各压一遍。
- AB 对比:把压好的片段和源文件放在一起,来回切换看。重点关注:边缘是否锐利、暗场有没有噪点、快速运动时有没有马赛克。
- 检查文件体积:找到那个「画质你满意,体积能接受」的 CRF 值。如果体积超标,别急着降 CRF,先试试调高 preset 或开启更多优化选项。
我的工作流:我通常从 CRF 23 开始。如果文件太大,我会先尝试 CRF 24,而不是直接跳到 25。每次只调 1 个单位,配合 preset 和 tune 参数微调。记住,CRF 调优是「小步快跑」,不是「一步到位」。
3.4 CRF 与其它参数的配合
CRF 不是孤立的。它需要和 preset、profile、tune 等参数协同工作。
- Preset:preset 控制编码速度和压缩效率。如果你用 veryfast,CRF 23 出来的文件可能比用 slow 的 CRF 25 还大。我建议至少用 medium,追求质量用 slow 或 slower。
- Profile:对于 H.264,main profile 就够了。除非你需要 10bit 色深或 4:2:2 色彩采样,才用 high profile。
- Tune:这是 x264/x265 的「场景优化器」。压电影用 film,压动画用 animation,压静态画面用 grain。选对了,同样的 CRF 值,画质能提升一档。
一个实用组合:对于大多数网络视频,我推荐:-crf 23 -preset slow -tune film。这个组合在质量和体积之间取得了很好的平衡。如果你压的是动画,把 tune 改成 animation,CRF 可以降到 21 或 22。
# 一个完整的 CRF 编码命令示例 (x264)
ffmpeg -i input.mp4 \
-c:v libx264 \
-crf 23 \
-preset slow \
-tune film \
-profile:v high \
-pix_fmt yuv420p \
-c:a aac -b:a 128k \
output.mp4
最后,我想说一句:CRF 不是银弹。对于某些特殊内容,比如纯黑背景上的白色文字,或者高速运动的体育比赛,CRF 模式可能会分配过多的码率给简单场景,导致复杂场景质量不足。这时候,你可能需要切换到 2-pass VBR 模式。
但话说回来,对于 90% 的日常编码需求,CRF 就是那个最省心、效果又好的选择。你只需要找到那个「甜蜜点」,剩下的交给编码器就好。