H264之帧编码
H.264,也称为 MPEG-4 AVC (Advanced Video Coding),是一种高效的视频编码标准,用于压缩和存储视频。H.264 利用了预测编码和变换编码等先进的技术,其编码流程与普通视频编码类似,主要包括帧类型判定、运动估计、变换编码、熵编码等步骤。
H.264 的帧编码流程:
帧类型判断
首先,H.264 编码器需要确定当前帧属于哪种类型:I 帧、P 帧还是 B 帧。同样,I 帧是关键帧,P 帧和 B 帧是预测帧。
运动估计
对于 P 帧和 B 帧,H.264 编码器需要进行运动估计来找到当前帧和之前帧之间的运动信息。运动估计时会将待编码帧与之前一定长度的参考帧进行比较,以检测两帧之间的运动差异。
变换编码
H.264 编码器将经过运动估计的差异像素块(残差块)输入到离散余弦变换器 (DCT),将空间信息转换为频域信息。DCT 块的大小可以为 4x4、8x8 或其他尺寸,以匹配不同视频帧的压缩需求。变换编码可以有效地消除视频框架中的局部冗余。
量化
对于经过 DCT 变换之后的残差块,H.264 编码器会对其进行量化。量化通过将块的值除以一个预定义的值并四舍五入来减少数据量。不同的量化矩阵可以用于不同的视频帧,以调整视频质量和压缩率之间的平衡。
熵编码
最后,H.264 编码器将量化后的数据输出到熵编码器,以进一步减少数据量。熵编码是一种将数据序列转换为短码的技术,可以通过对于经常出现的数据序列使用较短的编码来减少数据量。H.264 使用 CABAC 或 CAVLC (Context-based Adaptive Variable Length Coding) 等熵编码方案。
I帧 P帧 B帧编码流程
I帧、P帧和B帧是视频编码中常用的三种帧类型,用于压缩和存储视频。它们的编码流程如下:
I帧编码流程
I (Intra-picture) 帧可以理解为关键帧,它是视频序列中的第一个帧或关键帧。每个 I 帧的编码是独立的,它包含了所有像素的数据,没有依赖其他的帧。因此,I 帧的压缩率不能很好地发挥。
I帧的编码流程如下:
- 图像分块:I 帧首先将原始图像分成若干个小块。
- DCT 变换:对于每个分块,将其进行离散余弦变换 (DCT),以转换为频域信号。
- 量化:对于每个分块,将 DCT 变换之后的频域系数进行量化。量化也是压缩图像的关键步骤之一。
- 熵编码:使用熵编码技术对量化后的数据进行编码,以进一步减少数据量。编码之后的结果就是 I 帧的输出。
P帧编码流程
P (Predicted picture) 帧是预测帧,它根据前一帧的参考像素进行编码。P 帧只编码与前一帧之间的像素差异,以从时间维度上减少视频数据的冗余。
P帧的编码流程如下:
- 运动估计:首先使用运动估计算法对前一帧和当前帧进行比较,获取两帧之间的运动信息。
- 帧间预测:利用得到的运动信息