ffmpeg码率控制

一.VBR与CBR的含义和区别

VBR是动态码率。CBR是静态码率。
VBR(Variable Bitrate)动态比特率。也就是没有固定的比特率,压缩软件在压缩时根据音频数据即时肯定使用什么比特率,这是以质量为前提兼顾文件大小的方式。 VBR也称为动态比特率编码,使用这个方式时,你能够选择从最差音质/最大压缩比到最好音质/最低压缩比之间的种种过渡级数,在MP3文件编码之时,程序 会尝试保持所选定的整个文件的品质,将选择适合音乐文件的不一样部分的比特率来编码。主要优势是可让整首歌都能大体达到咱们的品质要求,缺点是编码时没法 估计压缩出来的文件大小。
CBR(Constants Bit Rate)即固定码率,就是静态(恒定)比特率的意思,CBR是一种固定采样率的压缩方式。优势是压缩快,能被大多数软件和设备支持,缺点是占用空间相对大,效果不十分理想,现已逐步被VBR的方式取代。
固定码率是一个用来形容通讯服务质量(QoS,Quality of Service)的术语。和该词相对应的词是可变码率或可变比特率(英文variable bit rate,缩写VBR)。
当形容编解码器的时候,CBR编码指的是编码器的输出码率(或者解码器的输 入码率)应该是固定制(常数)。当在一个带宽受限的信道中进行多媒体通信的时候CBR是很是有用的,由于这时候受限的是最高码率,CBR能够更好的易用这 样的信道。可是CBR不适合进行存储,由于CBR将致使没有足够的码率对复杂的内容部分进行编码(从而致使质量降低),同时在简单的内容部分会浪费一些码 率。

二.ffmpeg设置方法

ffmpeg中CBR(固定码率控制)的设置:
c->bit_rate = br;
c->rc_min_rate =br;
c->rc_max_rate = br; 
c->bit_rate_tolerance = br;
c->rc_buffer_size=br;
c->rc_initial_buffer_occupancy = c->rc_buffer_size*3/4;
c->rc_buffer_aggressivity= (float)1.0;
c->rc_initial_cplx= 0.5; 

ffmpeg中VBR(可变率控制)的设置:网络

c->flags |= CODEC_FLAG_QSCALE;
c->rc_min_rate =min;
c->rc_max_rate = max; 
c->bit_rate = br;

三.试用场景

VBR 适合的应用场景是媒体存储,而不是网络传输。
其实实际网络传输中所谓的 CBR 通常都是 ABR(平均比特率),即只要是单位时间内把码率控制在额定码率就能够了,由于编码输出原本就有缓冲能够起到平滑波动的做用。
严格意义上的 CBR 是 每一帧都分配一样的码字,试想一下,若是某一帧所须要的码字原本就不多,而你却必定要给它分配不少码字,那不是浪费么?另外一方面,若是某一帧所须要的码字 原本就多,而你却给得不多,那这帧的效果会不好。这样编下来,总体序列质量会忽好忽坏地不停发生跳变,反而对视觉冲击很大;所以 ABR 才是最适合网络传输的方案。
本文出处:http://blog.csdn.net/austinblog/article/details/28426587
相关文章
相关标签/搜索