前言
H264视频压缩算法现在无疑是所有视频压缩技术中使用最广泛,最流行的。随着 x264/openh264以及ffmpeg等开源库的推出,大多数使用者无需再对H264的细节做过多的研究,这大降低了人们使用H264的成本。
但为了用好H264,我们还是要对H264的基本原理弄清楚才行。今天我们就来看看H264的基本原理。
H264概述
![](https://img-blog.csdnimg.cn/img_convert/aec7a6b2dd01ae3d4e2a7f8d84e0e46d.png)
H264压缩技术主要采用了以下几种方法对视频数据进行压缩。包括:
帧内预测压缩,解决的是空域数据冗余问题。
帧间预测压缩(运动估计与补偿),解决的是时域数据冗徐问题。
整数离散余弦变换(DCT),将空间上的相关性变为频域上无关的数据然后进行量化。
CABAC压缩。
经过压缩后的帧分为:I帧,P帧和B帧:
I帧:关键帧,采用帧内压缩技术。
P帧:向前参考帧,在压缩时,只参考前面已经处理的帧。采用帧音压缩技术。
B帧:双向参考帧,在压缩时,它即参考前而的帧,又参考它后面的帧。采用帧间压缩技术。
除了I/P/B帧外,还有图像序列GOP。
GOP:两个I帧之间是一个图像序列,在一个图像序列中只有一个I帧。如下图所示:
![](https://img-blog.csdnimg.cn/img_convert/4ddfe1724154174b96bd2ea9c49f3f8e.webp?x-oss-process=image/format,png)
下面我们就来详细描述一下H264压缩技术。
H264压缩技术
H264的基本原理其实非常简单,下我们就简单的描述一下H264压缩数据的过程。通过摄像头采集到的视频帧(按每秒 30 帧算),被送到 H264 编码器的缓冲区中。编码器先要为每一幅图片划分宏块。
以下面这张图为例:
![](https://img-blog.csdnimg.cn/img_convert/1af57178ed92313591116680b676d990.jpeg)
划分宏块
H264默认是使用 16X16 大小的区域作为一个宏块,也可以划分成 8X8 大小。
![](https://img-blog.csdnimg.cn/img_convert/441c96a985a44c07867bb39c145091e9.jpeg)
划分好宏块后,计算宏块的象素值。