1、H.264新特性学习阶段
首先,我们学习的weigand的那篇关于H.264 overview的经典文献,这篇文献对H.264的新特性大部分都有讲到。之后,我们共开展三次会议来分组深入地学习H.264的各个新特性。
帧间编码小组主讲的内容有:高精度运动估计,分析了H.264的半象素点插值预测和1/4象素点插值预测,同时还分析了H.263的半象素点的插值预测以作比较。多参考帧和7种宏块模式,分析它们的基本原理,并列举了一些快速算法。B帧,讲解了B帧的新特性,同时详细讲述了B帧独有的两种宏块模式direct mode和multihypothesis mode。
帧内编码小组主讲的内容有:讲解了16×16块和4×4块的帧内预测的原理,并讲述了相关的一些优化问题,包括:预测模式的编码,并行优化问题,预测模式的快速选择的策略问题。
变换量化小组主讲的内容有:H.264中采用的去块滤波的深入介绍。H.264中的整数变换和量化的原理。
熵编码小组主讲的内容有:UVLC&CAVLC,哥伦布码的编码方法,CAVLC的具体过程并做了编码的具体说明。CABAC,整个过程的介绍,包括二进制化,上下文建模,算术编码。
由于大部分成员是初次接触到H.264,所以我们这阶段的学习过程中遗留了很多的问题,所幸的是我们在每次会议时都对前次的这些新特性会议遗留下来的问题进行讨论解决。
另外,我们最后还加了一讲,一是对这阶段的工作作个总结,以改正一些不好的学习方法。另外,就是对下一阶段的工作作个计划。
2、H.264校验模型学习阶段
校验模型的学习我们分编码器学习阶段和解码器学习阶段,其中编码器是我们的重点,开展了四次会议,而解码器部分只作了一次会议。
编码器部分我们首先讲解整个编码器的程序框架,特别将程序主线上的一些重要函数进行了重点分析讲解。然后就是我们各个小组对各自的部分进行深入的学习。
帧间编码小组主讲的内容有:率失真优化问题,主要讲解了基于拉格朗日乘数法的率失真优化策略,并对设计到率失真优化的相关程序段进行了分析。多参考帧问题,分析了多参考帧涉及到的重要的数据结构和全局变量,并讲解了多参考帧保存,参考帧列表初始化,参考帧选择等相关的代码。7种宏块模式,分析了宏块级和亚宏块级的运动估计在校验模型中的实现。高精度运动估计,首先分析了整个运动估计的过程,然后在分析了亚象素点插值预测的代码段。
帧内编码小组主讲的内容有:帧内预测,在结合帧内预测的系统框架的基础上对帧内预测的实现作了深入分析。FMO和PAFF&MBAFF,分别分析了FMO和PAFF&MBAFF的基本原理和程序实现。
变换量化小组主讲的内容有:去块滤波的程序实现。变换量化,讲解了其中用到的一些核心函数,同时也分析了相应的接口以及所用到的全局变量。
熵编码小组主讲的内容有: UVLC的程序实现。CABAC中三块内容的实现代码片断分析。
解码器部分,我们只花了一讲,首先讲解了H.264的码流结构,然后分析了解码器的程序主线,并和编码器的程序主线进行了比较。
在校验模型的学习阶段,我们一方面对上阶段所学的H.264的新特性有了更深刻的理解,同时还发现并学习了一些上阶段没有学过的新特性,如rdopt,fmo,mbaff等。
视频编码基础知识
- 传统编码结构
序列编码结构:
H.264中为什么使用离散余弦变换(DCT)
视频通信中的码率控制技术
昨天说到264中的模式选择,它的目地就是为码率控制服务。
即选择最优的宏块模式,以拉格郎日为优化模型。以控制码率。
编码控制的目标是在实际传输比特的限制下,以最小的计算复杂度获得尽可能好的图像质量。编码码率和计算复杂度,重建图像质量三者是不可分的。
评价标准: 主观和客观,主观指肉眼,客观指MSE和PSNR,通常认为PSNR平均值和最小PSNR值越大越好, 各帧间PSNR值变化越小越好。
码率控制的主要环节: DCT变换,量化,缓冲区调整,分层编码(可分级编码和精细编码),网络状况反馈调节编码。
视频压缩标准基本上都用到了DCT变换,运动补偿编码和变长熵编码,由于对不同类型的帧(I B P)采用的编码方式不同,使得各帧图像编码后产生的比特数也不一样, 根据传输速率,信道可分为两大类:变速率信道(VBR)和固定速率信道(CBR),无论编码的一的码流通过何种信道传输,视频编码嚣生成的码流都不能直接送到信道上传输,否则会千万信道或拥塞,或空闲,这都将降低信道的利用率。
为了使编码后的流速率能和信道速率相匹配,提高信道的利用率,在编码器和信道之间加一个缓冲区就非常必要,缓冲区的容量越大,码流将能更好地适应信道速率,重建图像的质量也会越高,但同时,也给解码端带来更大的时延,在实时视频通信中常常需要端对端的时延非常小,这就要求缓冲区尽可能小,缓冲区的容量和时延要求构成了一对矛盾,码率控制的目的就是为了解决这一矛盾。即在系统端对端的失真尽可能小情况下,满足时延的要求使得缓冲区不发生下溢上溢。
在视频编码过程中, 决定输出码流比特率的直接因素为DCT变换后的量化参数Q(当cfg文件中,RDO未使能时,量化参数是不变的,即未使用率失真优化)。因此码率控制的方法是根据信道速率和缓冲区状态来调整量化参数Q,一般来说, 根据码率控制的级别,当前的编码器码率控制算法分为两大部分,基于帧和基于宏块的码率控制。控制的级别越低,控制的精度越高,算法复杂度越高。