码率控制理解(纯文字版)


1.1  来源及其作用

    为什么要使用码率控制?这个问题是由现实产生的。在传输压缩编码视频的时候,必须要考虑两个问题:视频质量和传输带宽,如果带宽大,肯定要尽可能传输质量更好的视频;如果带宽低,则需要提高压缩比,减小码流;如果带宽动态变化,那么码流也需要动态改变来适应带宽,总之,码流与带宽紧密相关。与此同时,我们希望尽可能的得到高清晰的还原图像,所以在能接受的视频质量范围内对视频尽可能的压缩来提高带宽利用率是码率控制的根本。

码率控制的来源知道以后,它的作用也就很明显,就是提高带宽利用率,在保持视频还原清晰度的情形下,尽可能的阶段带宽。

1.2面临的问题

      码率控制是个说起来简单做起来的事情。之前已经总结过,可以从两个方面来理解码率控制,一是从内容的率失真优化角度考虑量化与码率关系,二是从信道传输和转移概率的角度来分析码率和编码模式的关系。这两个方向都有同样的一个问题,与“先有鸡还是先有蛋”类似。以QP和R的关系为例,为了得到可控的码流,我们需要提前控制QP,但是QP又依赖码流来计算给出,所以这个先后问题变成一个死循环,需要找到一个突破点。

1.3 主要发展

     为了解决先有鸡还是先有蛋的问题,我们找到一个突破口,既然理论的方法被证明是很难走通,那么可以选择走数值模拟的方法,通过一系列的实验,得到一系列的经验公式,尤其是选取一个合适的初始值,进而破解鸡还是蛋的问题。在选择实验模拟这条路之后,突然有了很多的思路可以去做,首先是和理论结合最紧密的部分:概率分布。通过计算不同概率分布下的率失真函数,得到一系列经验公式和参考模型,在利用DCT变化对亮度和色度系数进行处理后,最优模拟是拉普拉斯分布以及一部分高斯分布。通过计算可以得到常用的6中R-D模型,而这些基础模型又被进一步演化成不同的码率控制算法。

1.4 码率控制主要步骤

     最流行的一种方式是:以帧级码率控制为例,首先确定剩余码流,除以帧率求得当前平均每帧可分配的码率,然后通过一个R-Q模型,求得该帧量化参数Q值,再进一步更新剩余码流以便继续进行下去。

      上述过程便是最简单的码率控制算法,但是却是存在着很多很多问题:如果剩余码率如果全部平均分配,那么这种分配方式太过粗暴且效果不会太好,考虑到某些细节性的视频帧需要更高的码流来满足清晰度,所以每一帧分配的码流应该不能相同;参数Q的选取也不能直接通过码流获取,还需要考虑参考帧的情况,怎么参考也是问题;还有跳帧的问题,如果某几帧使用的码流较大,后面已经没有足够的码流进行分配,那么则需要跳帧,如何确定是否跳帧也是问题;还有最关键的R-Q模型,如何确定等等等。

     以上的每个问题都制约着码率控制算法的实现和效率。一个一个来看,首先考虑R-Q模型,前面已经说过,理论上得到的码率控制算法并不现实,所以这里也可以使用数值模拟的方法来抽象出R-Q的模型,使用二次模型来近似模拟,然后关于如何使用参考帧,则可以使用一个概念“复杂度”,简单的可以使用梯度作为复杂度,并用梯度的倒数引入到R-Q的二次模型中来解决参考问题;此时对于R的估计已经有了一个不同,即不能平均分配,同时也为了解决跳帧问题,可以引入一个“缓冲区”模型,用来调节码率分配和跳帧的判断,另外在确定参数QP时,需要对QP做一个限制,保证其在确定的范围内,比如对于H264来说QP应该在[0,51]区间内。

猜你喜欢

转载自blog.csdn.net/gaussrieman123/article/details/53187797