H264 硬编码基本原理

H.264 是在 MPEG-4 技术的基础之上建立起来的,其编解码流程主要包括 5 个部分:

帧间和帧内预测(Estimation)、
变换(Transform)和反变换、
量化(Quantization)和反量化、
环路滤波(Loop Filter)、
熵编码(Entropy Coding)。

H.264 解码的四个步骤中的第一步“CAVLC/CABAC 解码”是最为消耗运算资源,这方面远高于其他三步(简单的说,CAVLC/CABAC 是 H.264 编码规范中两种不同的算法,都是为了提高压缩比,其中 CABAC 比 CAVLC 压缩率更高,但解码时自然也要求更高)

H264 硬编码基本原理_第1张图片
H264 硬编码基本原理_第2张图片
经过压缩后的帧分为:I帧,P帧和B帧:

I帧:关键帧,采用帧内压缩技术。
P帧:向前参考帧,在压缩时,只参考前面已经处理的帧。采用帧音压缩技术。
B帧:双向参考帧,在压缩时,它即参考前而的帧,又参考它后面的帧。采用帧间压缩技术。
除了I/P/B帧外,还有图像序列GOP。
GOP:两个I帧之间是一个图像序列,在一个图像序列中只有一个I帧。

H.264编码器输出的Bit流中,每个Bit都隶属于某个句法元素。句法元素被组织成有层次的结构,分别描述各个层次的信息。
H264 硬编码基本原理_第3张图片
H.264分层结构由五层组成,分别是序列参数集、图像参数集、片(Slice)、和宏块和子块.
H264 硬编码基本原理_第4张图片
H264 硬编码基本原理_第5张图片
H.264中,图像以序列为单位进行组织。一个序列的第一个图像叫做 IDR 图像(立即刷新图像),IDR 图像都是 I 帧图像。

H.264 引入 IDR 图像是为了解码的重同步,当解码器解码到IDR图像时,立即将参考帧队列清空,将已解码的数据全部输出或抛弃,重新查找参数集,开始一个新的序列。

注:IDR 图像一定是 I 图像,但 I 图像不一定是 IDR 图像。I帧之后的图像有可能会使用I帧之前的图像做运动参考。

H.264的码流结构
H264 硬编码基本原理_第6张图片
在某些情况下,需从H.264码流中直接取得相关信息(如:图像的宽度和图像的高度等等信息)。下面介绍下取得相关信息的方法:

图像的相关信息存储在网络提取层(NAL)的RBSP结构中,要取得图像的相关信息,既要获得图像的相关位。需依据RBSP结构,获得pic_width_in_mbs_minus1和pic_height_in_map_units_minus1两个值,那么宽度为(pic_width_in_mbs_minus1+1)*16,高度为(pic_height_in_map_units_minus1+1)*16,但是有些情况还得考虑nNum_Ref_Frames的值,一般为1。

帧间:
1.对于控制信号有
load_start/done , intra_start/done, ec_start/done, frame_start/done;
mb_x_total, mb_x_load, mb_x_intra, mb_x_ec; 包括y。
intra_qp, ec_qp

2.对于cur_mb
它存在 mb_switch; intra_cur_luma, intra_cur_u, intra_cur_v;

3.对于u_intra
对于帧间预测就是时域预测,旨在消除时域冗余信息,简单点说就是利用之前编码过的图像来预测要编码的图像。
帧间预测编码过程:
H264 硬编码基本原理_第7张图片
运动估计。
运动估计是寻找当前编码的块在已编码的图像(参考帧)中的最佳对应块,并且计算出对应块的偏移(运动矢量)。
H264 硬编码基本原理_第8张图片
P为当前帧,Pr为参考帧,B为当前码块,Br是Pr中与B块相减残差最小的块,Br称为B的最佳匹配块。
B与B在图像中的坐标位置相同,Br坐标为(Xr,Yr),B坐标为(Xr,Yr)。Br坐标减去B*的坐标就是运动矢量MV。
运动补偿。
运动补偿是根据运动矢量和帧间预测方法,求得当前帧的估计值过程。其实说白了就是将运动矢量参数贴到参考帧上获取当前帧。另外运动补偿是一个过程。

帧间预测:
H.264帧间预测是利用已编码视频帧基于块的运动补偿预测模式。

1.可变块大小运动补偿:每个宏块(16×16像素)的亮度,可以按4种方式进行分割:
1个16×16,或2个16×8,或2个8×16,或4个8×8,其运动补偿也相应有4种。而8×8模式的每个子宏块可以继续分割:1个8×8,或2个4×8,或2个8×4,或4个4×4。这种分割下的运动补偿,称为树状结构运动补偿。这些分割和子宏块大大提高了各个宏块的关联性。一般来说,小块可以提高预测的效果。

2**.高精度的运动补偿**:帧间编码宏块的每个分割或子宏块都是对参考图像的某一相同尺寸区域进行预测得到的。两者之间的差异(MV),对亮度成分采用1/4像素精度,色度1/8像素精度。亚像素位置的亮度和色度像素并不存在于参考图像中,需要利用临近已编码点进行内插得到。
MV可由临近已编码分割的MV预测获得。预测矢量MVp基于已计算的MV和MVD(预测与当前的差异),并被编码和传输。MVp取决于运动补偿的尺寸和临近MV的有无。

3.多参考帧运动补偿:H.264支持多参考帧预测(multiple reference frames),即可以有多于1个、最多5个在当前帧之前解码的帧作为参考帧产生对当前帧的预测。这适用于视频序列中含有周期性运动的情况。较之只使用1个参考帧,使用5个参考帧可以节省码率5~10%。采用这一技术,可以改善运动估计的性能,提高H.264解码器的错误恢复能力,但同时也增加了缓存的容量以及编解码器的复杂性。

**4去块效应滤波:**基于块的视频编码在图像中存在块效应,主要来源于帧内和帧间预测和残余编码。
去块效应滤波器(Deblocking Filter)的作用是消除经反量化和反变换后重建图像中由于预测误差产生的块效应,即块边缘处的像素值跳变,从而改善图像的主观质量,减少预测误差。在去块效应滤波时,应该根据图像内容判断是图像的真实边界还是方块效应所形成的边界(假边界)。对真实边界不进行滤波处理,而对假边界则根据周围图像块的性质和编码方法采用不同强度的滤波。
H264 硬编码基本原理_第9张图片
H264 硬编码基本原理_第10张图片
H264 硬编码基本原理_第11张图片
H264 硬编码基本原理_第12张图片
运动估计的基本思想是将图像序列的每一帧分成许多互不重叠的宏块,并认为宏块内所有像素的位移量都相同,然后对每个宏块到参考帧某一给定特定搜索范围内根据一定的匹配准则找出与当前块最相似的块,即匹配块,匹配块与当前块的相对位移即为运动矢量。视频压缩的时候,只需保存运动矢量和残差数据就可以完全恢复出当前块。
H264 硬编码基本原理_第13张图片
H264 硬编码基本原理_第14张图片
压缩的出发点(可行性)
1)时间相关性
在一组视频序列中,相邻相邻两帧只有极少的不同之处,这便是时间相关性。
2)空间相关性
在同一帧中,相邻象素之间有很大的相关性,两象素越近,侧相关性越强。

一个图像或者一个视频序列进行压缩,产生码流。
对图像的处理即是:帧内预测编码
其预测值P,是由已编码的图像做参考,经运动补偿得到的。预测图像P和当前帧Fn相减,得到两图像的残差值Dn,Dn在经过转换T,量化Q,去处空间冗余,得到系数X,将X重排(使数据更加紧凑),熵编码(加入运动矢量。。。一些图像相关得信息),得到nal数据。
对视频序列的处理:帧间预测编码
预测值P,是由当前片中,己编码的宏块预测得到的(亮度4×4或者16×16预测,色度8×8预测)。当前待处理的块,减去预测值P,得残差值Dn,Dn在经过转换T,量化Q,得到系数X,将X重排(使数据更加紧凑),熵编码,得到nal数据

场:隔行扫描的图像,偶数行成为顶场行。奇数行成为底场行。
所有顶场行称为顶场。所有底场行称为底场.
帧:逐行扫描的图像
图像:场和帧都可认为是图像.

宏块、片
宏块(MB):一个宏块由一个16×16亮度块、一个8×8Cb和一个8×8Cr组成
片(slice):一个图像可以划分成一个或多个片,一个片由一个或多个宏块组成。

h264的功能分为两层,视频编码层(VCL)和网络提取层(NAL)
VCL功能是进行视频编解码,包括运动补偿预测,变换编码和熵编码等功能;
NAL用于采用适当的格式对VCL视频数据进行封装打包

通过摄像头采集到的视频帧(按每秒 30 帧算),被送到 H264 编码器的缓冲区中

宏块划分好后,就可以对H264编码器缓存中的所有图片进行分组了。

你可能感兴趣的:(闲时了解)