码率深度解析:码率的定义、单位与CBR/VBR
码率这东西,说白了就是视频在单位时间内占用的数据量。你想想看,视频本质上是一连串的图片快速播放,每张图片有多少像素、每个像素用多少bit来表示,最终都会汇总成一个数字——码率。
我刚开始做编码的时候,总觉得码率就是个简单的“大小”问题。后来踩了不少坑才明白,码率其实是画质和文件大小之间的那个“天平”。你往哪边偏,另一边就会翘起来。
码率的定义
码率(Bitrate),全称是比特率。它描述的是:每秒钟传输或处理的比特数。
公式很简单:
码率 = 总数据量 / 时长
举个例子。一个10秒钟的视频,文件大小是10MB(兆字节)。换算成比特:10MB = 10 × 8 = 80Mb(兆比特)。那么码率就是 80Mb / 10s = 8Mbps。
嗯,这里要注意:字节(Byte)和比特(bit)是两码事。1字节 = 8比特。很多新手在这里翻车,我见过有人把码率算错了十倍,结果视频传上去平台直接报错。
码率的单位
码率的单位其实就三个,从小到大排:
| 单位 | 全称 | 换算关系 | 常见场景 |
|---|---|---|---|
| bps | bits per second | 基础单位 | 极低码率、文本传输 |
| kbps | kilobits per second | 1 kbps = 1000 bps | 语音、低清视频 |
| Mbps | megabits per second | 1 Mbps = 1000 kbps | 高清视频、直播推流 |
我个人习惯在项目里统一用Mbps。为什么呢?因为现在主流视频的码率都在几M到几十M之间,用Mbps读数最舒服。你想想看,说“这个视频码率是8000kbps”,不如直接说“8Mbps”来得干脆。
-b:v 8M 表示8Mbps,-b:v 8000k 表示8000kbps。两者等价,但前者更简洁。
固定码率(CBR)
CBR,全称Constant Bitrate。意思就是:整段视频的码率始终保持不变。
不管画面是静态的文字,还是激烈的动作场面,每秒输出的数据量都一样。听起来很公平对吧?但实际编码时,问题就来了。
我曾经做过一个直播项目,客户要求必须用CBR。结果呢?静态画面时,编码器为了凑够码率,不得不往里面塞“垃圾数据”——也就是填充比特。而到了动作场景,码率又不够用,画面直接糊成一团。
CBR的优缺点很明显:
- 优点: 码率稳定,适合直播、视频会议等实时传输场景。带宽占用可预测,不会突然飙高。
- 缺点: 画质不均匀。简单场景浪费码率,复杂场景画质不足。说白了就是“一刀切”,不够聪明。
可变码率(VBR)
VBR,全称Variable Bitrate。意思就是:码率根据画面复杂度动态调整。
这才是现代编码的主流做法。编码器会分析每一帧的画面,简单的画面给低码率,复杂的画面给高码率。最终在保证画质的前提下,把整体码率降下来。
你想想看,一个视频里,大部分场景可能都是对话、静态背景,只有少数几秒是爆炸、快速运动。如果全程都用高码率,那大部分码率都浪费了。VBR就是来解决这个问题的。
VBR有两种常见模式:
- 1-pass VBR: 编码器边分析边编码,一次完成。速度快,但码率分配不够精准。
- 2-pass VBR: 第一遍分析视频内容,记录每帧的复杂度;第二遍根据分析结果精确分配码率。质量更好,但耗时翻倍。
我个人习惯,做离线转码时一定用2-pass VBR。虽然多花一倍时间,但画质提升是肉眼可见的。直播场景没办法,只能用1-pass或者干脆用CBR。
CBR vs VBR 对比
| 对比维度 | CBR | VBR |
|---|---|---|
| 码率波动 | 恒定 | 动态变化 |
| 画质一致性 | 差(简单场景好,复杂场景差) | 好(全程画质均匀) |
| 文件大小 | 可精确预测 | 不可精确预测(但可设目标) |
| 编码耗时 | 快 | 慢(尤其2-pass) |
| 适用场景 | 直播、视频会议、广播 | 点播、存储、流媒体 |
码率与画质的关系
码率越高,画质越好——这句话对,但不全对。
为什么?因为画质还取决于编码器效率、分辨率、帧率、编码参数等等。同样的码率,用H.265(HEVC)编码比H.264能提升30%-50%的画质。你想想看,码率只是“预算”,怎么花这笔钱才是关键。
我记得有一次,一个客户非要用10Mbps的H.264去编码1080p视频,觉得码率越高越好。我建议他换成H.265,码率降到6Mbps,画质反而更好。他不信,我当场做了AB对比,他才服气。
所以,码率不是越高越好,而是够用就好。多出来的码率,要么浪费存储,要么浪费带宽。
知识体系总览
下面这张图,把本章的核心知识点串起来了。你可以把它当作一个快速索引:
这张图从码率的定义出发,分出了三个核心分支:定义本身、单位体系、编码模式。单位里bps/kbps/Mbps是递进关系,编码模式里CBR和VBR是并列关系,而VBR下面又细分了1-pass和2-pass。你可以把它当作本章的“地图”,哪里不懂看哪里。