参考大神:http://www.52im.net/thread-232-1-1.html
编码层次组成:
序列 (Sequence) 图像组(Group of Pictures, GOP) 图像(Picture) 条带(Slice) 宏块(Macroblock, MB) 块(Block)
层次的(Hierarchical)码流结构:
PB帧编码
IBBP序列编码对象
序列 是指一段连续编码的并具有相同参数的视频图像
序列起始码 是指专有的一段比特串,标识一个序列的压缩数据的开始.
序列头 是指记录序列信息, 包含档次(Profile) 级别(Level) 宽度,高度, 是否是逐行序列, 帧率等内容
序列结束码 是指专有的一段比特串, 标识该序列的压缩数据的结束.
条带编码结构
条带: 多个宏块的组合
条带起始码: 专有的一段比特串, 标识一个条带的压缩数据的开始.
条带头: 记录当前图像的相关信息. 含条带位置, 条带量化参数,宏块编码技术标识
条带编码对象
视频编解码关键技术
预测: 通过帧内预测和帧间预测降低视频图像的空间冗余和时间冗余
变换:通过从时域到频域的变换,去除相邻数据之间的相关性,即去除空间冗余
量化:通过用更粗糙的数据表示精细的数据来降低编码的数据量,或者通过去除人眼不敏感的信息来降低编码数据量
扫描:将二维变换量化数据重新组织成一维的数据序列
熵编码:根据待编码数据的概率特性减少编码冗余
预测:
空间预测: 利用图像空间相邻像素的相关性来预测的方法
帧内预测技术:利用当前编码块周围已经重构出来的像素预测当前块
intra图像编码 (1帧)
时间预测: 利用时间上相邻图像的相关性来预测的方法
帧间预测: 运动估计 , 运动补偿
inter图像编码: 前向预测编码图像 (P帧),双向预测编码图像(B帧)
帧内预测
1帧图像的每个宏块都采用帧内(intra)预测编码模式
宏块分为8*8或者4*4块, 对每个块采用帧内预测编码,称为intra8*8或intra4*4
帧内预测有多个预测方向:水平。垂直,左下,右上
帧内预测还有直流(DC)预测
色度块预测还有平面预测
量化原理:将含有大量的数据集合映射到含有少量的数据集合中
码率控制:受到缓冲区,带宽的限制,编码码率不能无限制的增长, 因此需要通过码率控制来将编码码流在目标码率范围内
一般通过调整量化参数手段控制码率:
帧级控制 条带级控制 宏块级控制
码率控制考虑的问题: 防止码流有较大的波动,导致缓冲区发生溢出
同时保持缓冲区尽可能的充满,让图像质量尽可能的好而且稳定
CBD(Constant Bit Rate): 比特率稳定,但图像质量变化大。 VBR(Variable Bit Rate): 比特率波动大, 但图像质量稳定
码率控制算法: 码率分配 码率控制
码率控制属于非标准技术, 编码端有,解码端没有
预测技术的作用是去除空间冗余和时间冗余。因为视频存在大量的空间冗余和时间冗余,包括空间冗余、时间冗余,预测后得到去除大部分空间或时间冗余的残差。
空间冗余
图像空间相邻像素具有很强的相关性,帧内预测技术去除空间冗余。
亮度预测模式
通过垂直、水平、DC、左下、右下来预测
色度预测模式
常用的色度预测模式:垂直、水平、DC、平面,其中最优的预测模式为平面模式
时间冗余
视频图像在时间上有较强的相关性,即存在时间冗余。去除时间冗余的编码技术有:运动估计、运动补偿
运动模型分为
平移 (适用于块匹配的运动估计和运动补偿) 仿射 双线性
匹配准则:衡量待预测块和预测块之间的相似度
运动估计 :
目的是去除视频图像的时间冗余。运动估计在搜索范围内为当前块寻找匹配最好的预测块,全搜索方式的运动估计计算复杂度》
快速运动估计算法种类
在保持预测精度的同事减少运动估计的搜索次数,典型算法有:
三步搜索 、二维Log搜索、正交搜索、十字搜索、新三步搜索、四步搜索、共轭方向搜索、梯度下降搜索、层次块搜索
搜索算法复杂度比较
分像素运动估计与运动补偿
时域运动位置更可能在整象素之间,即分像素上。利用相邻的整像素可以估计出分像素的值:常用线性或双线性插值得到分像素的值。分像素运动估计有更高的预测精度,但复杂度也更高:1/2分像素运动估计,图像存储空间增加4倍,运动矢量需要放大2倍,1/4分像素运动估计,图像存储空间增加16倍,运动矢量需要放大4倍,计算复杂度也成倍增加。
分像素插值
多参考帧预测
有更多的候选图像,搜索更精确的预测块
图像分块编码
双向预测编码
B帧有更好的编码效率
全局运动估计
基于全局仿射运动模型。预测精度不如基于块的运动估计。MV数目少,适合简单运动场景的运动估计》