3. 码率控制模式详解:CBR、VBR、CRF、ABR

码率控制,说白了就是决定「每一秒视频该分配多少数据量」。选错了模式,要么文件大得离谱,要么画质糊成一团。我早期做直播时吃过这个亏——用了 VBR 推流,结果码率波动太大,观众端频繁缓冲。从那以后,我对这四种模式算是刻骨铭心。

一句话总结:CBR 稳如老狗,VBR 灵活高效,CRF 画质优先,ABR 折中方案。
码率控制模式全景图 码率控制模式 CBR 恒定码率 VBR 可变码率 CRF 恒定质量 ABR 平均码率 适用场景 直播推流 视频会议 广电传输 适用场景 本地存储 蓝光原盘 点播存档 适用场景 画质优先 一次编码 归档备份 适用场景 OTT 点播 多码率自适应 HLS/DASH 核心选择逻辑:带宽稳定 → CBR | 存储宽松 → VBR | 画质为王 → CRF | 兼顾两者 → ABR

3.1 CBR(恒定码率)—— 直播场景的定海神针

CBR 要求编码器在整个视频中保持码率恒定。你设 2 Mbps,它就尽量贴着 2 Mbps 跑,波动范围通常控制在 ±5% 以内。

原理:编码器通过调整量化参数(QP)来维持目标码率。画面简单时降低 QP 提升质量,画面复杂时提高 QP 牺牲细节。说白了,就是用质量换带宽稳定。

适用场景:

  • 直播推流(RTMP、SRT)
  • 视频会议(WebRTC)
  • 广电/有线电视传输
  • 带宽严格受限的管道
我的经验:做直播时,CBR 的 buffer 大小很关键。我习惯设 buffer 为目标码率的 2 倍,既能平滑波动,又不会引入过大延迟。

参数配置示例(x264):

ffmpeg -i input.mp4 -c:v libx264 \
  -b:v 2000k -minrate 2000k -maxrate 2000k -bufsize 4000k \
  -nal-hrd cbr -x264-params "vbv-maxrate=2000:vbv-bufsize=4000" \
  output.ts
注意:CBR 在复杂场景下画质会明显下降。我曾经用 CBR 编码一段烟花视频,结果码率不够,画面全是块效应。这种场景建议换 VBR 或 CRF。

3.2 VBR(可变码率)—— 存储场景的省码利器

VBR 允许码率根据画面复杂度动态变化。简单场景给低码率,复杂场景给高码率。最终文件大小比 CBR 小 20%-50%,画质却更好。

原理:编码器设定一个目标质量范围,然后自由分配码率。VBR 又分两种:

  • 1-pass VBR:一次编码,速度快但码率控制不够精准
  • 2-pass VBR:第一遍分析场景复杂度,第二遍精准分配码率。我强烈推荐这个

适用场景:

  • 本地视频文件存储
  • 蓝光/DVD 制作
  • 视频点播存档
  • 对文件大小有要求但带宽不敏感的场景

参数配置示例(2-pass VBR):

# 第一遍
ffmpeg -i input.mp4 -c:v libx264 -b:v 2000k -pass 1 -f mp4 /dev/null

# 第二遍
ffmpeg -i input.mp4 -c:v libx264 -b:v 2000k -pass 2 \
  -maxrate 4000k -bufsize 8000k output.mp4
避坑指南:我曾经用 1-pass VBR 编码一个 2 小时的电影,结果后半段码率分配失衡,高潮部分画质崩了。从那以后,但凡重要项目我都用 2-pass。

3.3 CRF(恒定质量因子)—— 画质党的终极选择

CRF 不关心码率,只关心画质。你设一个质量值,编码器自动调整码率来维持这个质量。CRF 值范围通常是 0-51,数值越小质量越高。

常用 CRF 值参考:

CRF 值 质量等级 典型文件大小 适用场景
18 视觉无损 较大 归档、母版
23 优秀 适中 日常存储
28 良好 较小 移动设备
35 可接受 很小 预览、缩略图

参数配置示例:

# CRF 23,适合大多数场景
ffmpeg -i input.mp4 -c:v libx264 -crf 23 output.mp4

# CRF 18,视觉无损,适合归档
ffmpeg -i input.mp4 -c:v libx264 -crf 18 -preset slow output.mp4
注意:CRF 无法控制输出码率。我遇到过用 CRF 18 编码一段静态画面,结果码率飙到 50 Mbps 的情况。如果你有带宽或存储限制,别用 CRF。

3.4 ABR(平均码率)—— 折中主义的智慧

ABR 是 CBR 和 VBR 的混合体。它允许码率在一定范围内波动,但保证整体平均码率接近目标值。说白了,就是「既要带宽可控,又要画质灵活」。

原理:编码器设定一个目标平均码率,同时允许短时间内的码率波动。波动范围由 maxrate 和 bufsize 控制。

适用场景:

  • OTT 点播平台(Netflix、YouTube)
  • HLS/DASH 多码率自适应流
  • 需要控制文件大小但不想牺牲太多画质

参数配置示例:

ffmpeg -i input.mp4 -c:v libx264 \
  -b:v 2000k -maxrate 3000k -bufsize 4000k \
  output.mp4
我的习惯:做 OTT 点播时,我通常把 maxrate 设为 b:v 的 1.5 倍,bufsize 设为 2 倍。这样既能应对复杂场景的码率峰值,又不会让整体文件大小失控。

3.5 四种模式对比总结

特性 CBR VBR CRF ABR
码率稳定性 ★★★★★ ★★☆☆☆ ★☆☆☆☆ ★★★★☆
画质表现 ★★☆☆☆ ★★★★☆ ★★★★★ ★★★☆☆
文件大小可控性 ★★★★★ ★★★☆☆ ★☆☆☆☆ ★★★★☆
编码速度 快 慢(2-pass) 快 中等
推荐场景 直播、会议 存储、蓝光 归档、母版 OTT、点播

3.6 实战选择指南

选哪种模式,其实就三个问题:

  1. 带宽是否严格受限? → 是 → CBR
  2. 画质是否第一优先级? → 是 → CRF
  3. 需要控制文件大小吗? → 是 → 再问:能接受 2-pass 吗?能 → VBR,不能 → ABR
我的建议:新手先从 CRF 23 开始,感受一下不同场景下的码率变化。等你对码率有了直觉,再尝试 CBR 和 VBR。ABR 适合做生产环境的默认选项——它不会让你翻车。

嗯,这四种模式其实没有绝对的好坏。关键是你得清楚自己的场景需求。我见过有人用 CBR 做归档,结果画质惨不忍睹;也有人用 CRF 做直播,结果码率失控导致卡顿。选对了,事半功倍;选错了,事倍功半。