H264学习笔记(2):H264编码器

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ZuoRiZuo/article/details/50327157

       在上一节中简要介绍了编码器的原理,这节主要记录了H264编码器的相关内容。

       H264为了提高预测精度,编码器可以从一组前面或后面已编码图像中选出一个或两个与当前最匹配的图像作为帧间编码间的参数图像,这样一来复杂度大大增加,但多次比较结果使匹配后的预测精度显著改进,H264最多可以从15个参数图像中进行选择,选出最佳匹配的图像。

       因此对于P帧可以从list0中选择参数图像,B帧可以从list0和list1中选择参数图像。

      片中包含一个或多个宏块

      片组包含一个或多个片

      图像中包含一个或多个片组

      图像序列号:POC

=========================================================================

      帧内预测:帧内预测模式中,预测块是基于已编码重建块和当前块形成的。对亮度像素而言,预测块用4x4或16x16宏块的相关操作。4x4亮度子块有9中可选预测模式,独立预测每一个4x4亮度子块,适用于带有大量细节的图像编码,16x16亮度块有4中预测模式,预测整个16x16亮度块,适用于平坦区域的编码,色渡口也有4中预测模式,类似于16x16亮度块预测模式,编码器通常使用预测快和编码块之间最小的预测模式。

      I_PCM编码模式:该模式下,编码器直接传输图像像素值,而不经过预测和变换,在一些特殊情况下,特别是图像内容不规则或者量化参数非常低时改模式比起常规操作(帧内预测-变换-量化-熵编码)效率更高。

      I_PCM目的:允许编码器精确的表示像素值,提供表示不规则图像内容的准确值,而不引起重大的数据量增加,严格限制宏块解码比特数,但不损害编码效率。

      在以往视频压缩编码标准中,帧内编码被引入变换域,H264帧内编码则参考预测块左上方的已编码的临近像素点,被引入空间域,但是,如果参考预测块是帧间编码宏块,该预测会音参考块的运动补偿引起误码扩散。所以参考块通常选择帧内编码的临近块。

      4x4亮度预测模式:以上方和左方像素为已编码和重构像素,根据预测像素加权平均获得。

      16x16亮度预测模式:根据上方和左方像素推导出

      信号化帧内预测模式:每个4x4块帧内预测模式必须转成信号传给解码器,该信息可能需要大量比特表示,但临近块的帧内模式通常是相关的。例如,ABE分别为左边,上边和当前块,如果A和B预测模式为模式1,E的最佳预测模式很可能也是模式1,所以通常利用这种关联性信号化4x4帧内模式。
对于每个当前块E,编码器和解码器计算最可能预测模式和AB预测模式的叫嚣着,如果这些相邻块不被提供,响应值A或B置2(DC预测模式)

       帧内预测的所有预测都不能跨片边界预测,每片必须独立编解码。

       实际现象分析:在视频编码的时候,如果设定了关键帧产生间隔,并且码率相对较低的情况下会出现一种情况,每隔几秒就会产生一次花屏,之后逐渐清晰,之后再产生一次花屏,之后逐渐又清晰,依次往复。目前分析,原因是:关键帧即IDR帧只使用帧内预测,而此时限制了码率,因此,关键帧的帧内预测粒度较大,所以产生花屏,之后的非关键帧多采用帧间预测变换编码,所需的码率相对较低,因此逐渐清晰。因此可以得出结论,视频的时间冗余比空间冗余高。

=========================================================================

       B片用到了两个已编码图像列表:list0和list1.包括短期和长期图像,这两个列表都包含了前向和后向的已编码图像。例如图像序列如下:

       123,125,126,127,128,129,130

       假定当前帧为127,则

       list0:126,125,123,128,129,130

       list1:128,129,130,126,125,123

       官方解释两个图像列表的定义如下:

       list0:最近前向图像(基于POC)标为index0,接着是其余前向图像(POC递增顺序),及后向图像(从当前图像POC递增顺序)
       list1:从最近后向图像表位index0,接着是其余后向图像(POC递增顺序),即前向图像(从当前图像POC递增顺序)

       POC在上面有解释:图像序列号

       B片预测模式选择:宏块分割,双向选择方式,参考列表选择方式。B片中宏块分割可由多种预测方式中的一种,实现,如直接模式,利用list0的运动补偿模式,利用list1的运动补偿模式,利用list0和list1的双向运动补偿模式。每种分割可选择各自不同的预测模式。如果8x8分割被使用,每个8x8分割锁选择的模式适合于分割中的所有亚分割。

       B片的双向预测:参考块(与当前分割或亚分割相同尺寸)是由list0和list1的参考图像推出的,从list0和list1恩别得出两个运动补偿参考区域,需要两个运动矢量,而预测块的像素取list0和list1相应像素的平均值。

       B片直接预测:直接预测模式编码的B片宏块或宏块分割不传送运动矢量,解码器计算基于已编码的运动矢量的list0和list1,并计算出解码残差像素的双向预测运动补偿,B片中的skip宏块便由解码器用直接模式重建而得。在片头会指明将用时间还是空间方式计算直接模式或其分割的矢量。

       B片直接预测的空间模式:如果第一幅list1参考图像的共同为之宏块或分割有一个运动矢量幅度小于±1/2亮度像素,其一个或两个预测矢量置为0,否则预测list0和list1矢量用以计算双向运动补偿。

       B片直接预测的时间模式:找出list1图像的共同位置宏块或分割响应的list0参考图像,该list0参考作为当前宏块或分割的list0参考。找出list1图像的共同位置宏块或分割相应的list0运动矢量。计算当前图像和list1图像的POC的运动矢量,作为新的list1运动矢量。计算当前图像和list0图像的POC的运动矢量作为新的list0运动矢量。这些模式在预测参考宏块或分割不提供或帧内编码等情况下需要作出调整。

       加权预测:加权预测是一种用来修正P或B片中运动补偿预测像素的方法,H264提高3中加权预测类:P片宏块明确加权预测,B片宏块明确加权预测,B片宏块隐晦加权预测.每个预测像素pred0和pred1在运动补偿之前通过加权系数w0和w1修正,在明确的加权预测中,加权系数由编码器决定并在片头中传输,在隐晦类型中w0和w1由相应的list0和list1参考图像的时间位置推出,大的系数用于时间上接近当前图像的情况,小的则用于时间桑原理当前图像的情况.课件H264采用树状结构的运动补偿技术,提高了预测能力,特别是,小块预测提高了处理更好的运动能够描述的能力,产生更好图像质量,H264运动向量的精度提高到1/4像素(亮度),运动补偿算法的预测能力得到进一步提高,H264还提供多参考帧可选模式,这将产生更好的视频质量和效率更高的视频编码.相对于1帧参考5个参考帧可以节约5-10%的比特率,且有助于比特流的恢复,也不是说参考帧越多越好,考虑到缓冲区的能力和编码器的效率目前一般都选取3-5个参考帧.




展开阅读全文

没有更多推荐了,返回首页