VBR(Variable Bit Rate)动态比特率,又称可变比特率或者非固定比特率,是在视频或者音频进行编码压缩时采用的一种方式。使用编码压缩的目的是为了在保证视频或者音频最低或者最好质量的前提下,尽可能的压缩文件或者数据流的大小,以方便传输或者在传输线路上能够承载更多的数据量。即可以选择从最差音质/最大压缩比到最好音质/最低压缩比之间最佳匹配。
在MP3文件编码之时,程序软件会尝试保持选定文件的品质,将文件的不同部分用不同的比特率来编码,比如将复杂部分用高比特率编码如224KBit/s进行压缩,简单部分用低比特率编码如32KBit/s进行压缩;,通过这种动态调整编码速率的方式,得到音质和文件体积之间的平衡。其优点是保证一定品质要求,缺点是编码时无法估计压缩后的文件大小。对于视频,VBR码率随着图像复杂程度的不同而不同,编码效率高,快速运动画面的马赛克很少。
VBR编码软件在压缩时,根据视频数据,即时确定使用什么比特率,既保证了质量又兼顾文件大小。使用VBR编码程序可以选择从最差音视频质量(一般此时压缩比最高)到最好音视频质量(一般此时压缩比最低)之间的各种视频质量。在视频文件编码的时候,编码程序会尝试保持所选定的整个文件的品质,对视频文件的不同部分选择不同的比特率来编码。
CBR(Constant bitrate)固定码率,又称为静态比特率,是一种固定采样率的压缩方式。CBR对于视频压缩实现的方式为:编码器先检测每一帧图像的复杂程度,然后计算出码率。如果码率过小,就填充无用数据使之与指定码率保持一致;如果码率过大,就降低码率使之与指定码率保持一致。固定码率模式的编码效率比较低。在快速运动画面部分,由于画面细节较多需要更多的比特来描述,但由于强行降低码率,会丢失部分画面的细节信息,出现画面模糊、不清晰或者是马赛克。CBR对于音频压缩来说,比特率是最重要的因素,它用来表示每秒钟的音频数据占用了多少个比特,这个值越高,音质就越好。使用固定比特率编码音频,MP3从头至尾为固定值如128 kbps进行编码。在杂文音频那段有介绍,有兴趣的可以点击这里进行更多了解。
对于音视频编码,CBR方式编码的优点是压缩快,能被大多数软件和设备支持;当在一个带宽受限的信道中进行多媒体通讯的时候,CBR是非常有用的,因为这时候受限的是最高码率,CBR可以更好的易用这样的信道。但是缺点是占用空间相对大,不适合进行存储,因为CBR将导致没有足够的码率对复杂的内容部分进行编码,从而导致质量下降,同时在简单的内容部分会浪费一些码率。
ABR(average bitrate)也被称为“safe VBR”,它可以将生成的 MP3 控制在给定的 bitrate 上。如指定用 300kbps、ABR 对一段 wav 文件进行编码,LAME 会将该文件的 90% 用300kbps 编码,对剩余 10% 进行优化,复杂部分用高于 300kbps 来编码、简单部分用低于 300kbps 来编码。与 300kbps的CBR 相比,300kbps的ABR在文件大小上相差不多,音质却能提高。
三者对比
使用Windows Media编码器:用CBR或VBR分别对音视频内容进行编码。
CBR编码在流式播放方案中最为有效。比特率在流的进行过程中基本保持恒定并且接近目标比特率,始终处于由缓冲区大小确定的时间窗内。缺点在于编码内容的质量不稳定。
VBR编码当计划提供内容供用户下载、将内容在本地播放或者在读取速度有限的设备(如CD或DVD播放机)上播放时非常有效。(计划流式播放内容时也可以采用峰值VBR编码模式)当编码内容中混有简单数据和复杂数据(在快动作和慢动作间切换的视频)时,VBR 编码是很有优势的。系统自动为内容的简单部分分配较少的比特,留出足量的比特用于生成高质量的部分。对混合内容使用 VBR 编码时,在文件大小相同的条件下,VBR编码的输出结果要比CBR编码的输出结果质量好得多。在某些情况下,与CBR编码文件质量相同的VBR编码文件,其大小可能只有前者的一半。
ABR 编码在速度上是 VBR 编码2 -3 倍,在 128-256kbps 范围内质量要好于 CBR。 VBR有三个参数分别是MAX(视频的最大比码率),Average(平均码率)和MIN(最小码率)。有MAX,ARG和MIN三个参数,采用VBR压缩输出视频的时候,计算机会先进行一下逐帧的扫描把运动量大的画面码率调高,运动量小或是静止的画面码率调低并保证平均后的码率等于ARG值。VBR的优点就体现出来了画面质量相对高,但是缺点也出来了运算量大压缩时间长,更严重的对解码算法的要求就复杂了很多相对的对解码器的CPU要求就也高了(很多手机可以播出CBR的RM视频却播不了VBR的RMVB视频的原因,是因为手机的CPU还没有足够的强,内存也不能运算如此复杂的解码算法)。 在MPEG4级压缩的应用还出现了Bitrate VBR和Quality VBR即码率控制与质量控制,前者是单纯的调整码率达到平均值,后者复杂一些是根据图像质量而定,所以并不能先给出一个平均值来,只是保证每一帧画面的质量达到要求,至于这一帧画面为了保证质量会达到什么样的码率值并不是提前知道的,当然这种运算就更复杂了。更高级保持质量的压缩方式Two-pass即Two-pass Encoding 的先对影片作一次分析,即First-pass。此时整个影片档案会被先作扫描,定义影片中的影格是动态或是静态,所以再决定相应的每一帧画面的码率来进行压缩,当然处理的时间也更长。
一般合成相同质量视频,采用CBR合成时间会短一些,但文件的长度会大一些。CBR是以恒定的码率编码,因为家用DVD机需硬件解码,使用的是固化的硬件解码器,只能读取恒定码流的Mpeg文件,所以如果你刻录的光盘是在DVD机上观看,一般家庭选择CBR比较合适,兼容性较好。VBR是指系统根据图像数据量改变的大小决定用多大的码率编码,这种格式的解码需软件调节,故刻录的光盘如果是在电脑的DVD光驱中播放可以采取这种方式。以下作为CBR、ABR与VBR三种方式的总结对比:
1、VBR 适合的应用场景是媒体存储,而不是网络传输。
2、网络传输中所谓的 CBR 一般是 ABR,即只要是单位时间内把码率控制在额定码率就可以,编码输出本来就有缓冲从而起到平滑波动的作用。
3、严格意义上的 CBR 是每一帧都分配同样的码字,这样编下来,整体序列质量会忽好忽坏发生跳变。ABR 才是最适合网络传输的方案。
4、无论是 CBR、ABR 还是 VBR 都是属于码率控制,而码率控制是视频编码的开放部分,它不会改变码流结构的合法性,因此无论在 MPEG2、MPEG4 还是 H.263、H.264 当中都没有做规定;
5、由于目前的视频编码标准都是基于块编码的混合编码框架,因此一个码率控制算法可以用到任何协议上(当然有时候需要做点小的改动),只不过是控制效果好不好的问题,没有哪个 RC 是专属哪个协议的。