1 码率基础概念及其重要性
码率(Bitrate),又称比特率 ,是嵌入式音视频开发中的核心概念之一,指单位时间内传输或处理的视频数据量,通常以比特每秒(bit/s 或 bps)为单位,常用单位还包括 kbps(千比特/秒)和 Mbps(兆比特/秒)。码率直接决定了视频编码的压缩效率 和输出质量,是平衡视频质量、文件大小和网络带宽需求的关键参数。
1.1 码率的定义与单位
在多媒体领域,码率用于描述音频、视频文件的压缩程度以及数据传输的质量和速度。高码率意味着更多的数据在单位时间内被传输,这通常会带来更高的音质或画质,但同时也意味着更大的文件大小或更高的带宽需求。码率的基本单位包括:
- 比特/秒 (bit/s 或 bps):最基本单位
- 千比特/秒 (kbit/s 或 kbps, k=1000):常用于标清视频
- 兆比特/秒 (Mbps, M=1000000):常用于高清和超高清视频
1.2 码率对视频质量的影响
码率直接影响视频的清晰度 和流畅性 。较低的码率可能导致视频出现马赛克、块效应等压缩伪影,而较高的码率则能提供更细腻的画面细节,但也需要更多的存储空间和网络带宽。因此,在视频编码时,码率控制是一个重要的参数,它需要在视频质量、存储空间和网络带宽之间找到一个平衡点。
1.3 影响码率的因素
视频码率受多种因素影响,这些因素决定了视频文件的大小和传输时所需的网络带宽。主要影响因素包括:
- 视频内容本身:复杂动态场景(如体育比赛)比静态场景(如新闻播报)需要更高的码率
- 视频分辨率:更高的分辨率(如4K vs 720p)需要更高的码率
- 帧率:高帧率(如60fps vs 30fps)需要更高的码率
- 编码格式和压缩算法:H.265比H.264具有更高的压缩效率
- 编码参数:包括量化参数(QP)、GOP结构等
表:不同分辨率下的典型码率需求(H.264编码)
| 分辨率 | 建议码率范围 | 应用场景 |
|---|---|---|
| 640×360 (360p) | ≥800 kbps | 移动设备视频 |
| 1280×720 (720p) | ≥1500 kbps | 高清在线视频 |
| 1920×1080 (1080p) | ≥2500 kbps | 全高清视频 |
| 3840×2160 (4K) | ≥25000 kbps | 超高清内容 |
1.4 码率计算公式
基本的码率计算算法是:
码率(kbps) = 文件大小(KB) × 8 / 时间(秒)
例如,一个视频文件大小为3.446GB(约3.446×1024×1024KB),视频长度100分钟(6000秒),计算结果码率约等于4818kbps。
理解码率的基础概念对于嵌入式音视频开发至关重要,它为后续的码率控制策略选择提供了理论基础。在实际应用中,开发者需要根据具体场景需求 和硬件限制,选择合适的码率值和码率控制模式,以达到最佳的用户体验。
2 码率控制的核心方式
码率控制是视频编码中的关键技术模块,指通过选择一系列编码参数,使得视频编码后的比特率满足所需要的速率限制,并且使编码失真尽可能小。在嵌入式音视频开发中,主要的码率控制方式包括恒定比特率(CBR)、可变比特率(VBR)、平均比特率(ABR)、自适应可变码率(AVBR)以及它们的变种模式。每种方式都有其独特的特性和适用场景。
2.1 恒定比特率(CBR)
恒定比特率(CBR)是一种固定码率控制模式。在CBR模式下,编码器将视频压缩至一个预先设定的固定比特率,无论视频内容的复杂度如何。这意味着即使面对复杂动态场景,编码器也会维持相同的输出码率。
工作原理 :当视频中出现运动发生时,由于码率保持恒定,编码器只能通过增大QP值 (量化参数)来减少码字大小,导致图像质量变差;当场景静止时,图像质量又会变好。这种优先考虑 节省码率(带宽) 而牺牲画面质量的算法。
优点:
- 便于网络传输 和存储规划,因为比特率恒定,易于管理带宽分配
- 对于实时流媒体服务尤其重要,可以避免突发的比特率峰值导致的缓冲或丢包
- 压缩速度非常快,码率平稳不会出现码率跳变
缺点:
- 当视频内容简单时,可能会浪费比特率,导致文件大小过大
- 当视频内容复杂时,为了维持恒定的比特率,可能会牺牲视频质量
- 编码内容的质量不稳定,容易产生马赛克
应用场景 :CBR主要适用于 网络流媒体视频编码和实时通信场景,如视频会议、直播传输等对带宽稳定性要求较高的场合。
c
// H264_CBR结构体:
typedef struct rkVENC_H264_CBR_S {
RK_U32 u32Gop; // RW; Range:[1, 65536]; the interval of I Frame. 关键帧间隔
RK_U32 u32SrcFrameRateNum; //数据源帧率分子
RK_U32 u32SrcFrameRateDen; //数据源帧率分母
RK_FR32 fr32DstFrameRateNum; //目标帧率分子
RK_FR32 fr32DstFrameRateDen; //目标帧率分母
RK_U32 u32BitRate; // RW; Range:[2, 614400]; average bitrate. 平均比特率[2000, 98000000]
} VENC_H264_CBR_S;
// H265_CBR结构体:
typedef struct rkVENC_H264_CBR_S VENC_H265_CBR_S;
// MJPEG_CBR_S结构体:
/* the attribute of mjpege cbr*/
typedef struct rkVENC_MJPEG_CBR_S {
RK_U32 u32SrcFrameRateNum;
RK_U32 u32SrcFrameRateDen;
RK_FR32 fr32DstFrameRateNum;
RK_FR32 fr32DstFrameRateDen;
RK_U32 u32BitRate; // RW; Range:[2000, 98000000]; average bitrate
} VENC_MJPEG_CBR_S;
2.2 可变比特率(VBR)
可变比特率(VBR)是一种动态码率控制模式。VBR模式下,编码器根据视频内容的复杂度动态调整比特率,目标是在保持视频质量的同时,实现比特率的最小化。
工作原理 :VBR的比特分配根据 图像内容的复杂度 进行。如果图像细节较丰富或者含有大量的运动,则给其分配大一点的码流;若图像比较平坦,则分配较少的码流。这样既保证了质量,又兼顾带宽限制。
优点:
- 能够更有效地利用比特率,避免在简单场景中浪费比特率,同时在复杂场景中保证足够的比特率以维持视频质量
- 文件大小通常小于同样质量下的CBR编码
- 尽可能保证整个图像编码质量,利用VBR编码的图像很少会出现马赛克、画面丢失的情况
缺点:
- 比特率的波动可能不适合某些网络环境,特别是那些对带宽有严格限制的环境
- 实时流媒体应用中,VBR可能导致缓冲区溢出或不足
- 编码算法复杂度高,会导致解码端的复杂度升高
应用场景:VBR适用于媒体存储、DVD、蓝光、HD录播等对画质要求较高且对码率波动不敏感的场景。
c
// VENC_H264_VBR_S结构体:
/* the attribute of h264e vbr*/
typedef struct rkVENC_H264_VBR_S {
RK_U32 u32Gop; // RW; Range:[1, 65536]; the interval of ISLICE.
RK_U32 u32SrcFrameRateNum;
RK_U32 u32SrcFrameRateDen;
RK_FR32 fr32DstFrameRateNum;
RK_FR32 fr32DstFrameRateDen;
RK_U32 u32MaxBitRate; // RW; Range:[2, 614400];the max bitrate
} VENC_H264_VBR_S;
// VENC_H265_VBR_S结构体:
typedef struct rkVENC_H264_VBR_S VENC_H265_VBR_S;
// VENC_MJPEG_VBR_S的结构体:
/* the attribute of mjpege vbr*/
typedef struct rkVENC_MJPEG_VBR_S {
RK_U32 u32SrcFrameRateNum;
RK_U32 u32SrcFrameRateDen;
RK_FR32 fr32DstFrameRateNum;
RK_FR32 fr32DstFrameRateDen;
RK_U32 u32BitRate; // RW; Range:[2000, 98000000]; average bitrate
} VENC_MJPEG_VBR_S;
2.3 平均比特率(ABR)
平均比特率(ABR)是VBR的一种变体,它试图在VBR的基础上,将整个视频的平均比特率控制在一个目标值。ABR是在CBR和VBR两者之间的一种权衡。
工作原理:ABR设定一段时间的平均码率,在此时间内,对简单、静态的图像分配低于平均码率的码率,对于复杂、大量运动的图像分配高于平均码率的码率。它结合了VBR的高效性和CBR的稳定性,能够在保证平均比特率的同时,根据内容复杂度灵活调整。
优点:
- 结合了VBR的高效性 和CBR的稳定性
- 适合网络传输
- 在保证整体质量的同时,使输出文件大小相对可控
缺点:
- 某些部分的比特率可能远高于或低于平均值,这可能影响特定片段的视频质量或网络传输效率
- 编码效率和质量平衡的调优较为复杂
应用场景:ABR适合网络传输和需要兼顾质量与文件大小的通用场景,如视频点播(VOD)业务应用等。
2.4 自适应可变码率(AVBR)
AVBR(Adaptive Variable Bitrate,自适应可变码率)是一种能智能感知视频内容变化,并动态调整编码码率的码率控制模式。它本质上属于VBR的增强版,旨在兼顾码率使用效率与复杂场景下的画面质量,特别适合处理动静交替频繁的视频内容。
工作原理 :AVBR的核心思想是 在静止画面时节省码率,在运动画面时提升码率 以保证质量。其工作流程大致如下:
- 场景检测:编码器会实时分析视频序列,判断当前帧或图像区域属于静止画面还是运动画面。
- 码率决策:
- 当识别到运动画面 (如人物跑动、球类飞行)时,AVBR会提高编码码率,分配更多数据位来精确描述运动细节,从而减少马赛克和模糊。
- 当识别到静止或简单画面 (如静态背景、谈话镜头)时,AVBR会主动降低码率,节省下来的带宽资源可以被预留或用于后续的运动场景。
- 码率调整:通过在最大码率(运动场景)和最小码率(静止场景)之间动态且平滑地切换,AVBR力图在整体码率可控的前提下,使不同内容的视觉质量趋于一致。
优点:
- 智能适应内容:能有效提升运动画面的质量,同时避免在静态画面上浪费码率
- 兼顾效率与质量:在整体码率得到一定控制的前提下,力争使最终观看体验更佳
缺点:
- 参数调优更复杂:需要配置多个参数,且参数之间可能相互影响,调优难度较CBR高
- 码率波动性:其输出码率仍是变化的,在网络带宽极度受限或波动剧烈的环境中,可能带来挑战
应用场景:AVBR特别适用于视频内容动静对比明显、场景切换频繁的应用,如体育赛事直播、大型会议或演出直播、动作类游戏直播等。
c
// VENC_H264_AVBR结构体:
/* the attribute of h264e vbr*/
typedef struct rkVENC_H264_AVBR_S {
RK_U32 u32Gop; // RW; Range:[1, 65536]; the interval of ISLICE.
RK_U32 u32SrcFrameRateNum;
RK_U32 u32SrcFrameRateDen;
RK_FR32 fr32DstFrameRateNum;
RK_FR32 fr32DstFrameRateDen;
RK_U32 u32MaxBitRate; // RW; Range:[2, 614400];the max bitrate
} VENC_H264_AVBR_S;
// VENC_H265_AVBR结构体:
typedef struct rkVENC_H264_AVBR_S VENC_H265_AVBR_S;
2.5 其他码率控制方式
除了上述三种基本模式外,还存在一些改进或变种的码率控制方式:
约束可变比特率(CVBR) :CVBR是VBR的一种改进方法,兼顾了CBR和VBR的优点。在图像内容静止时,节省带宽;有Motion发生时,利用前期节省的带宽来尽可能地提高图像质量,达到同时兼顾带宽和图像质量的目的。这种方法通常会让用户输入最大码率 和最小码率。
固定码率系数(CRF):CRF是一种恒定编码质量(constant quality)的视频编码模式。使用CRF编码时,选择一种目标质量,编码器会通过调整码率达到该质量水平。CRF值分布为从0到51,一般来说这个取值越小,视频帧编码质量相对越高,取值为0则是无损压缩。
固定质量参数(CQP):每一帧图像在压缩的时候,采用相同的QP值。QP值决定了量化编码时从像素宏块的原始信息中丢弃多少信息,QP越大压缩率越高同时质量越低,QP越小压缩率越低同时质量越高。
表:主要码率控制方式对比
| 控制模式 | 核心特点 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
| CBR | 固定输出码率 | 带宽稳定,压缩速度快 | 质量波动,可能浪费带宽 | 实时通信、直播流媒体 |
| VBR | 动态调整码率 | 画质稳定,压缩效率高 | 码率波动,可能缓冲 | 媒体存储、高清录播 |
| ABR | 控制平均码率 | 平衡质量与文件大小 | 局部质量可能波动 | 网络传输、点播服务 |
| AVBR | 在VBR基础上控制平均码率 | 比VBR更好的文件大小可控性,比CBR更高的质量 | 编码复杂度较高,需预先分析内容 | 对最终文件大小有预估要求的VBR场景 |
| CVBR | 约束码率范围 | 兼顾带宽与质量 | 参数配置复杂 | 带宽受限的高质量应用 |
| CRF | 恒定质量 | 视觉质量稳定 | 输出码率不可控 | 质量优先的存储场景 |
在实际嵌入式音视频开发中,码率控制模式的选择需要综合考虑硬件能力 、网络条件 、应用场景 和用户体验等多种因素。例如,RV1126芯片的VENC模块就提供了CBR、VBR和AVBR等多种码率控制方式可供选择。开发者需要根据具体需求,灵活选择和配置合适的码率控制策略,以达到最佳的性能与效果平衡。
3 编码参数与码率控制的交互
在嵌入式音视频开发中,码率控制不是孤立存在的,它与多种编码参数相互影响、相互制约。理解这些参数如何影响码率控制,对于优化视频质量和系统性能至关重要。
3.1 编码格式的影响
不同的视频编码格式具有不同的压缩效率和算法特性,直接影响码率控制的效果。主流的编码格式包括:
- H.264/AVC:目前业界最流行的视频编码格式,具有高压缩率、高图像质量、网络适应性很强等特点。在同等的图像质量下,H.264的压缩比远超绝大部分编码格式(HEVC除外)。
- H.265/HEVC:相比H.264压缩率提升50%,更适合4K及更高分辨率视频。
- VP9:Google推出的开源编码格式,适用于WebRTC、YouTube等场景。
- AV1:开放免版税格式,具有超高效压缩特性。
表:主要编码格式的压缩效率对比
| 编码格式 | 相对压缩效率 | 主要优势 | 典型应用场景 |
|---|---|---|---|
| H.264 | 1x | 兼容性广泛,编码效率平衡 | 实时通信、通用视频服务 |
| H.265 | 1.5-2x | 高压缩效率,支持高分辨率 | 4K视频、有限带宽传输 |
| VP9 | 1.5-2x | 开源免费,Web集成友好 | WebRTC、YouTube |
| AV1 | 2-2.5x | 超高压缩效率,免版税 | 流媒体服务、开源项目 |
编码格式的选择直接影响码率控制策略的制定。高效编码格式如H.265和AV1可以在相同码率下提供更好的视频质量,或者在相同质量下显著降低带宽消耗。然而,这些高效编码格式通常需要更强的计算能力,在嵌入式设备中需要平衡压缩效率与硬件性能。
3.2 GOP结构与帧类型
GOP(Group of Pictures,图像组)结构是影响码率控制的重要因素之一。GOP是指一个图像序列中连续几个图像组成的小组,本质上是两个I帧的距离。GOP结构包括以下几种帧类型:
- I帧(关键帧):完整编码的帧,不参考其他帧,包含完整的图像数据。I帧是GOP的起始帧,压缩率相对较低。
- P帧(预测帧):基于前向预测的帧,只存储与前一帧的差异信息,压缩率高于I帧。
- B帧(双向预测帧):基于前后帧预测的帧,只记录本帧和前后帧的差值,压缩比是三种帧里面最高的,能达到200:1。
GOP长度 (两个I帧间的帧数)直接影响压缩率和容错性。较长的GOP可以包含更多的P帧和B帧,从而提高压缩效率;但过长的GOP会降低容错能力,因为错误传播会影响更多帧。在直播场景中,常使用短GOP以减少延迟和错误传播。
GOP结构的设计与码率控制密切相关。在VBR模式下,编码器可以根据场景复杂度动态调整GOP内的帧类型分布;而在CBR模式下,GOP结构则相对固定,以确保输出码率的稳定性。
3.3 量化参数(QP)
量化参数(Quantization Parameter,QP)是直接控制码率的核心技术手段。QP值决定了量化过程中从像素宏块的原始信息中丢弃多少信息:
- QP值越大,量化步长越大,压缩率越高,但同时丢失的信息越多,视频质量越低。
- QP值越小,量化步长越小,压缩率越低,保留的细节越多,视频质量越高。
在不同的码率控制模式下,QP的调整策略也不同:
- CBR模式:QP会根据内容复杂度动态调整以维持恒定码率。当场景复杂时,QP值增大以降低码率;当场景简单时,QP值减小以提高质量。
- VBR模式:QP相对稳定,码率随内容复杂度变化,从而保持相对稳定的视频质量。
- CQP模式:每一帧采用相同的QP值,不考虑内容复杂度和输出码率。
3.4 熵编码方式
熵编码是视频编码中的无损压缩阶段,其方式选择也会影响码率控制效果。主要的熵编码方式包括:
- CAVLC(上下文自适应可变长编码):对出现概率大的符号分配短码字,对出现概率小的符号提供长码字。算法相对简单,压缩效率较低。
- CABAC(上下文自适应二进制算术编码):采用一个浮点数代替一串输入符号,范围是[0,1),具有更高的编码效率。
CABAC的编码压缩率远远大于CAVLC,但计算复杂度也更高。在嵌入式设备中,选择熵编码方式时需要权衡压缩效率与计算开销。
3.5 分辨率、帧率与像素格式
除了上述参数外,还有其他关键参数影响码率控制:
- 分辨率:视频图像的像素尺寸(宽×高),直接影响码率需求。分辨率越高,所需的码率也越高。
- 帧率:每秒显示的图像帧数,影响视频流畅度。高帧率视频需要更高的码率支持。
- 像素格式:常见的YUV 4:2:0格式使用亮度全采样、色度半采样,是最常用的格式;YUV 4:4:4格式色度无压缩,画质更高但文件更大。
- 色深:单个像素的颜色信息位数。8bit色深支持1670万色,是主流标准;10bit色深支持10.7亿色,适用于HDR视频。
这些参数共同构成了视频编码的"黄金三角"平衡:高分辨率 + 高帧率 → 需高码率支撑,否则画质下降。在实际开发中,需要根据应用场景权衡这些参数。例如,视频会议优先低延迟(720p + 15 FPS + VBR),而4K流媒体则需要HEVC + 高码率 + 10bit色深。