音视频开发_H264 编码原理
最近更新:2024-09-23
|
字数总计:860
|
阅读估时:3分钟
|
阅读量:次
- 视频压缩原理——数据冗余
- GOP
- 宏块
- 帧内预测
- 帧间预测
- DCT变换与量化
- h264编码总结
视频压缩原理——数据冗余
- 空间冗余
- 时间冗余
- 视觉冗余:去除图像中的一些高频信息,因为人眼对这些细节不敏感
- 编码冗余(信息熵)
GOP
- 一个序列的第一个图像是IDR图像(立即刷新图像),IDR图像都是I帧图像。
- GOP指两个IDR帧之间的距离。
- GOP越大,视频压缩效率越高,但视频质量和视频流恢复能力也越差,反之亦然。
- GOP越大,会导致IDR帧距离太大,点播场景时进行视频的seek操作就会很不方便。
宏块
- 对于每一帧图像,是划分为一个个块进行编码的,所谓的宏块。
- 宏块大小:16x16(H264、 VP8),32x32(H265、 VP9),64x64(H265、 VP9、AV1),128x128(AV1)
帧内预测
- 帧内预测就是在当前编码图像内部已经编码完成的块中找到与将要编码的块相邻的块。一般就是即将编码块的左边块、上边块、左上角块和右上角块,通过将这些块与编码块相邻的像素经过多种不同的算法得到多个不同的预测块。
- 然后我们再用编码块减去每一个预测块得到一个个残差块。最后,我们取这些算法得到的残差块中像素的绝对值加起来最小的块为预测块。而得到这个预测块的算法为帧内预测模式。最后仅保留残差块。
帧间预测
- 我们在前面已经编码完成的图像中, 循环遍历每一个块, 将它作为预测块, 用当前的编码块与这个块做差值, 得到残差块, 取残差块中像素值的绝对值加起来最小的块为预测块, 预测块所在的已经编码的图像称为参考帧。
- 预测块在参考帧中的坐标值 (x0, y0) 与编码块在编码帧中的坐标值 (x1, y1) 的差值 (x0 - x1, y0 - y1) 称之为运动矢量。而在参考帧中去寻找预测块的过程称之为运动搜索。 事实上编码过程中真正的运动搜索不是一个个块去遍历寻找的, 而是有快速的运动搜索算法的。
DCT变换与量化
- 我们让变换块的系数都同时除以一个值,这个值我们称之为量化步长,也就是 QStep(QStep 是编码器内部的概念,用户一般使用量化参数 QP 这个值,QP 和 QStep 得到的结果就是量化后的系数。QStep 越大,得到量化后的系数就会越小。同时,相同的 QStep 值,高频系数值相比低频系数值更小,量化后就更容易变成 0。这样一来,将大部分高频系数变成 0。
- 解码的时候,需要将QStep乘以量化后的系数得到变换系数,很明显这个变换系数和原始没有量化的变换系数是不一样的,这个就是常说的有损编码
- QP与Qstep表示意:
| QP |
Qstep |
QP |
Qstep |
| 0 |
0.625 |
11 |
2.25 |
| 1 |
0.6875 |
12 |
2.5 |
| …. |
……. |
…. |
……. |
h264编码总结
- 目的:最后送到熵编码的像素串,包含的0越多,越能提高压缩率。
- 步骤:
- 帧内预测+帧间预测 => 残差块
- DCT变换
- 熵编码(哈夫曼编码等算法)
2023-12-05
该篇文章被 Cleofwine
归为分类:
音视频