4. 编码器核心参数:CRF、preset、profile 与 level

好,咱们进入正题。这四个参数,可以说是 x264 和 x265 编码器的「四根柱子」。你调明白了它们,画质和码率的平衡基本就握在手里了。我刚开始接触编码时,也对着这些参数发懵,后来踩了不少坑才摸清门道。今天咱们一个一个拆开讲。

4.1 CRF:恒定质量因子

CRF 是啥?说白了,就是告诉编码器:「你就按这个质量水平给我压,码率你自己看着办。」它不像 CBR(固定码率)那样死板,也不像 VBR(可变码率)那样需要你设目标码率。CRF 的核心思路是:画面复杂的地方多给码率,简单的地方少给。

CRF 的取值范围通常是 0–51,但实际常用的区间是 18–28。

CRF 值 质量水平 典型码率 适用场景
18 视觉无损 较高 存档、母版
23 优秀 中等 在线发布、日常使用
28 可接受 较低 移动设备、低带宽

我的习惯: 做 1080p 视频时,CRF 默认用 23。如果源素材噪点多,我会降到 21。记住,CRF 每减 1,码率大约增加 20%–30%。

举个例子,你用 CRF 23 压一部电影,动作场景码率会飙到 8–10 Mbps,而静态对话场景可能只有 2–3 Mbps。这就是 CRF 的聪明之处——把码率花在刀刃上。

4.2 preset:编码速度预设

preset 控制的是编码器的「努力程度」。它从 ultrafast 到 placebo 共 10 个等级。你想想看,越慢的 preset,编码器会尝试越多的算法和优化,画质自然更好,但时间成本也上去了。

preset 速度 压缩效率 推荐场景
ultrafast 极快 低 实时推流、预览
veryfast 很快 中低 快速转码
medium 中等 中等 日常使用(默认)
slow 较慢 高 高质量压制
veryslow 很慢 很高 存档、母版
placebo 极慢 极高(收益极小) 不推荐(收益递减)

我曾经踩过的坑: 刚入行时,为了追求极致画质,我用了 placebo 压一个 2 小时的纪录片。结果跑了整整 3 天,出来的文件只比 veryslow 小了不到 2%。从那以后,我再也没用过 placebo。记住,slow 到 veryslow 的收益已经足够,再往下就是边际效应递减。

我个人习惯是:日常用 medium,重要项目用 slow,时间充裕时上 veryslow。preset 和 CRF 是配合使用的——你设了 CRF 23 + preset slow,编码器就会用更多时间在 CRF 23 的目标下寻找更优的压缩方案。

4.3 profile:档次

profile 定义了编码器支持的「功能集」。H.264 有 Baseline、Main、High 三个主要档次。档次越高,支持的编码工具越多,压缩效率也越好。

profile 特点 典型应用
Baseline 低复杂度,不支持 B 帧 低端设备、视频会议
Main 支持 B 帧、CABAC 标清电视、DVD
High 支持 8×8 变换、自定义量化矩阵 高清视频、蓝光、网络流媒体

嗯,这里要注意:profile 不是越高越好。你得考虑播放设备的兼容性。比如,一些老旧的机顶盒只支持 Baseline,你用 High profile 压出来的视频它根本播不了。

我的建议: 面向现代设备(手机、电脑、智能电视),直接用 high profile。如果目标设备不确定,用 main profile 更稳妥。Baseline 基本可以退休了,除非你在做嵌入式开发。

4.4 level:级别

level 定义了编码器的「性能上限」。它限制了分辨率、帧率、码率的最大值。比如 Level 4.0 支持的最大分辨率是 1080p@30fps,码率上限约 20 Mbps。

为什么会需要 level?因为解码器需要知道自己的「工作量」。你压一个 4K 视频,但 level 设成 3.0,解码器会直接报错——因为它以为只需要处理 720p 的数据量。

Level 最大分辨率 最大帧率 最大码率(High profile)
3.0 720×576 30 10 Mbps
3.1 1280×720 30 14 Mbps
4.0 1920×1080 30 20 Mbps
4.1 1920×1080 60 50 Mbps
5.0 3840×2160 30 135 Mbps
5.1 3840×2160 60 240 Mbps

实用技巧: 大多数情况下,你可以让编码器自动选择 level。但如果你知道目标设备的解码能力有限(比如老款手机),手动设一个较低的 level 可以确保兼容性。

4.5 四者关系:一张图看懂

这四个参数不是孤立的。它们共同决定了编码的最终结果。我画了一张图,帮你理清它们的关系:

编码器核心参数关系图 编码器核心参数 CRF(质量因子) preset(速度预设) profile(档次) level(级别) CRF 决定质量目标,preset 决定编码耗时,profile 决定功能集,level 决定性能上限。 四者配合使用,才能达到画质与码率的最佳平衡。 实战示例: 压一部 1080p 电影,目标质量优秀,兼容主流设备: ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset slow -profile:v high -level 4.1 output.mp4

4.6 实战组合建议

说了这么多,到底怎么选?我直接给你几个组合,拿去就能用:

  • 日常网络发布(B站、YouTube): CRF 23 + preset medium + profile high + level auto
  • 高质量存档: CRF 18 + preset slow + profile high + level 4.1
  • 移动设备兼容: CRF 26 + preset veryfast + profile main + level 3.1
  • 实时推流: CRF 28 + preset ultrafast + profile baseline + level 3.0

记住这个原则: CRF 控制「画质天花板」,preset 控制「编码器努力程度」,profile 和 level 控制「兼容性边界」。先定 CRF,再选 preset,最后根据目标设备调整 profile 和 level。

好了,这四个参数的核心逻辑就这些。你试试看,用我给的组合压一段视频,对比一下输出文件的大小和画质。实践出真知,编码这东西,光看理论是不够的。