VBR、ABR、CBR三种编码方式

CBR,就是静态编码,比如一段视频一共有10分钟,我们设置的码流为1M,那么这个视频中每一秒的画面都是1M码流。

VBR,动态编码,编码器会根据视频画面的复杂程度在一定范围内调整码流。


VBR编码原理示意:


上图的示意图很能说明问题,在画面不复杂的情况下,用比较低的码流编码。在画面复杂,人物较多,或者人物大量做运动的画面,采用比较高的码流编码,这个就是VBR动态编码

VBR与CBR对比效果:

如果采用一个较低的码流进行CBR编码,也就是静态编码,无论简单的场景和复杂的场景都用同一个码流,简单的场景还好说,有动作的画面就会由于码流过低而产生马赛克情况


平均码流和最大码流之间不要相差太多
 比如视频只有两个画面,最大码流设置为了8M,平均码流设置成了1M。那么复杂画面的码流为8M,简单画面的码流为多少呢?做个简单的运算, (8+?)/2=1,得出的结论是简单画面的码流为-6M。虽然这是一个比较极端的例子,但只要最大码流和平均码流相差太多,遇到简单画面的时候,画质就 会很粗糙。


CBR编码
  在流式播放方案中使用CBR编码最为有效。使用CBR编码时,比特率在流的进行过程中基本保持恒定并且接近目标比特率,始终处于由缓冲区大小确定的时间窗内。CBR编码的缺点在于编码内容的质量不稳定。因为内容的某些片段要比 其他片段更难压缩,所以CBR流的某些部分质量就比其他部分差。此外,CBR编码会导致相邻流的质量不同。通常在较低比特率下,质量的变化会更加明显。 采用CBR编码方式时节目合成时间会短一些,但文件的长度会大一些(即相同时长的节目会占用更多的空间或者相同的空间只能容纳更短的节目)。

VBR编码
  当计划提供内容供用户 下载、 将内容在本地播放或者在读取速度有限的设备(如CD或DVD播放机)上播放时,请使用VBR编码。(计划流式播放内容时也可以采用峰值VBR编码模式)当 编码内容中混有简单数据和复杂数据(例如,在快动作和慢动作间切换的视频)时,VBR 编码是很有优势的。使用VBR编码时,系统将自动为内容的简单部分分配较少的比特,从而留出足量的比特用于生成高质量的复杂部分。这意味着复杂性恒定的内 容(例如新闻播音)不会受益于VBR编码。对混合内容使用 VBR 编码时,在文件大小相同的条件下,VBR编码的输出结果要比CBR编码的输出结果质量好得多。在某些情况下, 与CBR编码文件质量相同的VBR编码文件, 其大小可能只有前者的一半。

ABR
平均比特率,是VBR的一种插值参数。Lame针对CBR不佳的文件体积比和VBR生成文件大小不定的特点独创了这种编码模式。ABR也 被称为“Safe VBR”,它是在指定的平均Bitrate内,以每50帧(30帧约1秒)为一段,低频和不敏感频率使用相对低的流量,高频和大动态表现时使用高流量。举例来说,当指定用192kbps ABR对一段wav文件进行编码时,Lame会将该文件的85%用192kbps固定编码,然后对剩余15%进行动态优化:复杂部分用高于192kbps 来编码、简单部分用低于192kbps来编码。与192kbps CBR相比,192kbps ABR在文件大小上相差不多,音质却提高不少。ABR编码在速度上是VBR编码的2到3倍,在128-256kbps范围内质量要好于CBR。可以做为VBR和CBR的一种折衷选择。

  



1、VBR 适合的应用场景是媒体存储,而不是网络传输,因此不要让武状元去当文官;

2、其实实际网络传输中所谓的 CBR 一般都是 ABR(平均比特率),即只要是单位时间内把码率控制在额定码率就可以了,因为编码输出本来就有缓冲可以起到平滑波动的作用;
3、你所谓的严格意义上的 CBR 是每一帧都分配同样的码字,试想一下,如果某一帧所需要的码字本来就很少,而你却一定要给它分配很多码字,那不是浪费么?另一方面,如果某一帧所需要的码 字本来就多,而你却给得很少,那这帧的效果会很差。这样编下来,整体序列质量会忽好忽坏地不停发生跳变,反而对视觉冲击很大;因此 ABR 才是最适合网络传输的方案;
4、无论是 CBR、ABR 还是 VBR 都是属于码率控制,而码率控制是视频编码的开放部分,它不会改变码流结构的合法性,因此无论在 MPEG2、MPEG4 还是 H.263、H.264 当中都没有做规定;
5、由于目前的视频编码标准都是基于块编码的混合编码框架,因此一个码率控制算法可以用到任何协议上(当然有时候需要做点小的改动),只不过是控制效果好不好的问题,没有哪个 RC 是专属哪个协议的。



你可能感兴趣的:(图像显示)