在VVC或则HEVC中进行码率控制的具体操作
码率控制的主要步骤
码率控制的研究主要有两个步骤:一、目标比特的分配,将比特数分配到各个级别(GOP级、pic级、LCU级)。其中就有好多的论文研究如何分配精准的比特,网上可以找到。二、根据分配的目标比特进行QP的计算,这个就包括一些与计算QP的相关参数相关工作,如Lambda、alpha、delta等计算,在这不细说。
编码结构中rate control介绍和设置
在基础的环境配置完之后,打开编码结构cfg文件
第一个参数rate control,是默认关闭的(0),做码率相关工作是要开启的。
第二个参数TargetBitrate,上面所说的分配给整个序列的总比特数,如果开启了码率控制则要给定总比特数。
第三个参数KeepHierarchicalBit,后面的注释解释的很清楚,比特分配的方式,一般使用2。
第四个参数LCULevelRateControl ,是否开启LCU级的码率控制,根据自己的相关研究决定。
码率控制的具体操作
在前面说到码率控制的主要步骤一中,把目标比特分配到各个级别,但是目标的比特怎么获得?不同的序列目标比特也肯定不一样,那怎么获得?其次,在许多码率控制论文中的实验部分也能经常看到,某个序列在constant QP mode下,都有显示不同QP的目标比特和实际比特。那这里有个疑问,做码率的研究不是不用设定QP值嘛(因为开启了码率控制,编码器会根据分配的目标比特去计算出QP,从而再利用新的QP值去编码视频),那与论文中提出的使用不同QP得到的比特不是相悖了吗?
其实是这样的,首先我们是在cfg文件中不开启码率控制,然后再使用固定QP模式获得总的目标比特作为目标比特数,接着再开启码率控制根据这个目标比特数去做分配。
这有需要注意的地方,在我们不开码率使用某个QP去获得目标码率时,在最终输出的txt文档中的Bitrate(比特率单位是kpbs)还不是传给编码器的目标比特(bits per picture,bpp),需要进行转换成比特数,才是目标比特。只需将获得的Bitrate乘以1000即可,然后设定为目标比特。
待更新