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 值?

  1. 确定你的「质量底线」:先问自己,这个视频最终在哪里播放?如果是 B 站、YouTube,CRF 23 到 25 足够了。如果是给客户交付的母版,CRF 18 起步。
  2. 做「三分钟测试」:别上来就压整部片子。截取一段 3 分钟、包含复杂场景(快速运动、暗场、纹理丰富)的片段。用 CRF 20、23、26、29 各压一遍。
  3. AB 对比:把压好的片段和源文件放在一起,来回切换看。重点关注:边缘是否锐利、暗场有没有噪点、快速运动时有没有马赛克。
  4. 检查文件体积:找到那个「画质你满意,体积能接受」的 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 就是那个最省心、效果又好的选择。你只需要找到那个「甜蜜点」,剩下的交给编码器就好。

CRF 调优决策流程图 确定视频用途 网络发布 / 存档 / 专业交付? 网络发布 CRF 23 - 25 高质量存档 CRF 18 - 20 专业交付 CRF 16 - 18 截取 3 分钟复杂场景片段进行测试 AB 对比:画质满意?体积可接受? 确定最终 CRF 值