理论
H264编码原理(简略)
1. 视频为什么需要进行编码压缩
降低视频数据大小,方便存储和传输
2. 为什么压缩的原始数据采用YUV格式
彩色图像的格式是 RGB 的,但RGB 三个颜色是有相关性的。
采用YUV格式,利用人对图像的感觉的生理特性,对于亮度信息比较敏感,而对于色度信息不太敏感,所以视频编码是将Y分量和UV分量分开来编码的,并且可以减少UV分量,比如我们之前说的YUV420P。y黑白分量 uv色度分量 即4个y对应一个uv为一组,大大符合了1。3. 视频压缩原理
编码的目的是为了压缩,各种视频编码算法都是为了让视频体积变得更小,减少对存储空间和传输带宽的占用。编码的核心是去除冗余信息,通过以下几种冗余来达到压缩视频的目的:
1. 空间冗余:局部区域压缩 “区域动态 其他区域静态”
2. 时间冗余:帧之间的压缩
3. 视觉冗余:块之间的压缩
4. 编码冗余(信息熵冗余):较少bit 比如有20个1000 我可以用1表示 有10个2 用2表示。
4. I、P、B帧 GOP图像序列略 详细参考下方链接
5.H264编码原理
对于每一帧图像,是划分为一个个块进行编码,就是我们说的宏块。
1. 宏块扫描 核心思想:数字越小越容易用更少的bit做压缩。
2. 帧内预测 核心思想:宏块相似率很高,直接cp一份块减去差值。又分水平和垂直预测,src-xp = dst src = dst + xp(xp就是预测算法 src原始块 dst预测块)
3.帧间预测 与帧内相似
4.DCT 变换和量化 核心思想:不只是将像素值变小,而是希望能出现连续的 0 像素。 一句话就是宏块有差不多特性,往0靠拢,这是有损压缩。 比如 12 13 4 -> 0 1 0 4这个就丢失了,画质就抽象了。所以下列qp qstep对图像质量起到关键性作用。
QP 是量化参数,它控制编码过程中的量化强度。QP 值越高,量化的步长越大,编码后的视频质量越低,但文件大小也越小;相反,QP 值越低,量化的步长越小,编码后的视频质量越高,但文件大小也越大。
QStep 通常指的是量化步长,它与 QP 值相关,更具体地表示了量化过程中的缩放因子。
具体可看
h264视频编码原理总结
◼ 为了能够在最后熵编码的时候压缩率更高,对于送到熵编码(以行程编码为例)的“像素串”,包含的0越多,越能提高压缩率。为了达到这个目标:
◼ 先通过帧内预测或者帧间预测去除空