zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    ubuntu中,update,upgrade出现问题总结
    Xshell7连接kali linux(2021.9.13)
    pycharm安装igraph,简单实例(2021.8.21)
    mininet可视化(2021.6.25)
    冷知识:你会搜索信息吗
    论文写作注意事项
    onenote2016怎么自动备份笔记本到本地?
    Cbench、Scapy、sflow、iperf——学习中
    Zookeeper、Docker——学习中
    OpenStack管理、KVM、ClouldSim部署——学习中
  • 原文地址:https://www.cnblogs.com/jameszh/p/4237619.html
Copyright © 2011-2022 走看看