关于视频编解码的一些基础知识
因为最近看IMX6Q的VPU示例代码有些概念不懂,所以看了《 基于H.264的视频编码处理技术与应用》这本书的前几章了解了一下,做一个简单的记录。
颜色模型
我们平常能接触到的是RGB和YUV。
RGB
RGB一般用在电视,显示器等设备上,而非科学研究中,因为三种颜色分量放在一起表示,相互干扰,不便处理。而且会造成存储空间的浪费。
YUV颜色空间:
其中Y代表亮度值,U和V表示色度,代表了颜色的色调Cr和饱和度Cb。
与RGB不同,其优点是亮度Y和色度UV是相互独立的,占用频宽小。如果只有Y信号,就是黑白彩色图像。
因为人眼对颜色细节的分辨能力远远低于对亮度细节分辨能力,所以可以把几个相邻像素不同颜色值当做相同的颜色值来处理,以减少存储容量,从而压缩数据。按照不同的YCbCr的比率,可以分为YUV420、YUV422、YUV411和YUV444。
这篇博客对于他们的区别讲的很好,主要差别在采样率上,最后需要的存储空间自然就不同了。
另外,YUV可以与RGB通过矩阵相互转换。
编码的基本原理
视频编码的目的是实现对视频的压缩,也可以称作去除冗余。主要有以下几种
分类 | 帧间冗余 | 帧内冗余 | 统计冗余 | 视觉冗余 |
---|---|---|---|---|
说明 | 低速运动物体 | 大片的蓝天 | 根据概率分配码字 | 人眼对某些信息不易感知 |
针对以上冗余解决办法有运动补偿、帧内预测、熵编码、量化等。
I帧、P帧和B帧
I帧:帧内预测编码帧,是独立的,可以当做是单独的一幅静态画面。视频序列中的第一帧都是I帧,因为它是关键帧。
P帧:帧间预测编码帧,与前一帧有关,需要用到本帧和前一帧的信息(可以是I帧,也可是P帧)。由于P帧对前面的P和I参考帧有着复杂的依耐性,因此对传输错误非常敏感。
B帧:双向预测编码帧,记录的是本帧与前后帧的差别。B帧压缩率高,但是对解码性能要求较高。
一般视频传输使用的是I帧和P帧,比如海康的某些相机编码I帧间隔是50,中间有49帧P帧。
H264/AVC
一帧(frame)可以分为若干个片(slice),向下还可以细分为宏块等,一图胜千言:
上图来自于这篇文章,它对一些H264的基本概念讲的很通俗易懂。