音视频基础知识(二)

2.H264本文参考:https://blog.csdn.net/garrylea/article/details/78536775https://maxwellqi.github.io/ios-h264-summ/https://blog.csdn.net/andywang201001/article/details/80274886H264视频压缩算法是现在所有视频压缩技术中使用最广泛,最流行...

音视频基础知识(二)
2.H264

本文参考:https://blog.csdn.net/garrylea/article/details/78536775 https://maxwellqi.github.io/ios-h264-summ/ https://blog.csdn.net/andywang201001/article/details/80274886

H264视频压缩算法是现在所有视频压缩技术中使用最广泛,最流行的。

H264压缩技术采用以下方法对视频数据进行压缩:
1.帧内压缩,解决空域数据冗余问题。
2.帧间压缩,解决时域数据冗余问题。
3.整数离散余弦编码(DCT),将空域相关性变换到频域上然后量化。
4.CABAC压缩。

原来图像的帧经过压缩后可分为:I帧,P帧,B帧。
I帧:关键帧,采用帧内预测压缩。
P帧:向前参考帧,在压缩时,只参考前面已经处理的帧。采用帧间压缩。
B帧:双向参考帧,在压缩时,即参考前面的帧,又参考后面的帧。采用帧间压缩。

H264采用的核心算法是帧内压缩和帧间压缩。帧内压缩是生成I帧的算法,帧间压缩是生成B帧与P帧的算法。

I帧,P帧,B帧的组合构成了图像序列GOP。

GOP:两个I帧构成一个图像序列,在一个图像序列中只有一个I帧。GOP如下图所示:
在这里插入图片描述
H264压缩算法其实很简单,它与我们直觉上压缩数据的思路是一样的,只不过更巧妙,更规范。

H264先将一幅图像划分为很多个宏块,默认采用1616大小作为一个宏块,也可以是88大小。

以下图为例:
在这里插入图片描述
获得一个8*8大小的宏块。
在这里插入图片描述
H264对比较平坦的图像使用 16X16 大小的宏块。但为了更高的压缩率,还可以在 16X16 的宏块上更划分出更小的子块。子块的大小可以是 8X16、 16X8、 8X8、 4X8、 8X4、 4X4,非常的灵活。

在下图中是一个16*16的宏块,三只鹰的部分区域被划分在了宏块中,为了更好的处理三只鹰的部分图像,可以在宏块中划分出多个子块。
在这里插入图片描述
这样再经过帧内压缩,可以获得更高效的数据。

至此,H264的基础框架已经搭完了,剩下的就是运用想象力,达成目的。

源文地址:https://www.guoxiongfei.cn/csdn/4674.html