528
社区成员
发帖
与我相关
我的任务
分享降低视频数据大小,方便存储和传输。
视频编码是对一张张图像来进行的。我们知道彩色图像的格式是 RGB 的,但RGB 三个颜色是有相关性的。采用YUV格式,利用人对图像的感觉的生理特性,对于亮度信息比较敏感,而对于色度信息不太敏感,所以视频编码是将Y分量和UV分量分开来编码的,并且可以减少UV分量,比如我们之前说的YUV420P。
编码的目的是为了压缩,各种视频编码算法都是为了让视频体积变得更小,减少对存储空间和传输带宽的占用。编码的核心是去除冗余信息,通过以下几种冗余来达到压缩视频的目的:
宏块(Macroblock),是视频编码技术中的一个基本概念。通过将画面分成一个个大小不同的块来来不同位置实行不同的压缩策略。在视频编码中,一个编码图像通常划分成若干宏块组成,一个宏块由一个亮度像素块和附加的两个色度像素块组成。

图像帧(I帧、P帧和B帧)
图像帧是组成视频的最小单位。
在H.264 中出现的一些概念从大到小排序依次是:序列、图像、片组、片、NALU、宏块、亚宏块、块、像素。
在H.264协议中图像是个集合概念,其中的I帧、P帧、B帧等实际上都是我们把图像这个概念具体化和细小化了。
I帧(关键帧或帧内帧)仅由帧内预测的宏块组成。
P帧代表预测帧,除帧内空域预测以外,它还可以通过时域预测来进行压缩。P帧通过使用已经编码的帧进行运动估计。
B帧可以参考在其前后出现的帧,B帧中的B代表双向(Bi-Directional)。

一个序列的第一个图像叫做 IDR 图像(立即刷新图像),IDR 图像都是 I 帧图像。在视频编码序列中,GOP即Group of picture(图像组),指两个IDR帧之间的距离。
GOP长度越大,视频压缩效率越高,但视频质量和视频流恢复能力也越差,反之亦然。
直播,如果是一秒25帧,一般gop设置为25, 50(一般是帧率的倍数)。
如果不是直播流,B帧一般设置2帧连续B帧,以降低码率。
闭合GOP和开放GOP常见于视频流中,并影响压缩效率、视频容错能力以及ABR流的切换能力。
闭合GOP以一个被称为IDR(Instantaneous Decoder Refresh, 即时解码刷新)的I帧开始。

因为一个GOP通常以I帧开头,所以GOP 越大,编码的 I 帧就会越少。相比而言,P 帧、B 帧的压缩率更高,因此整个视频的编码效率就会越高。但是 GOP 太大,也会导致 IDR 帧距离太大,点播场景时进行视频的seek 操作就会不方便。

文章参考于<零声教育>的音视频开发课程:链接https://ke.qq.com/course/3202131?flowToken=1040744