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 四者关系:一张图看懂
这四个参数不是孤立的。它们共同决定了编码的最终结果。我画了一张图,帮你理清它们的关系:
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。
好了,这四个参数的核心逻辑就这些。你试试看,用我给的组合压一段视频,对比一下输出文件的大小和画质。实践出真知,编码这东西,光看理论是不够的。