在上一篇《 音视频一、音视频本质及ffmpeg安装 》中介绍了视频文件格式,视频封装格式,音视频编码格式,以及利用ffmpeg验证音视频主要由音频和视频组成。
本章主要是对音视频一些基础概念的理解。
块结构的混合编码
第一种采用 “块结构的混合编码” 方案的编码标准:音视频鼻祖H261。
先看一个例子:假如一个渐变的图片,按像素保存的方式和块结构保存的方式,两种方式对比:
按像素保存的方式:一张200*100的图片,一共需要2万个像素保存,一个像素用RGBA保存,一共8万个字节。
如果换一种方式:图片宽,图片高,起始点(宽、高),终止点(宽、高),起始点颜色(RGBA),终止点颜色(RGBA)。只需要14个字节就能保存这张图片的所有信息,而且能完整还原。
这个例子中,在没有损坏画质的前提下,图片的压缩效果非常好。
音视频中某一帧的图片,肯定不会那么巧,刚好整张图片渐变,但科学家利用这个特点,应用到音频领域编码算法上,以下面这张图片为例:
科学家对图片放大很多倍后的微观层面分析,在图片的一些部分,可以 采用渐变处理方法来达到压缩数据的目的 ,而一些像素差异很大的地方,按他原本的数据进行处理。这样来达到画质在人眼中分辨不出来的效果。人眼对微观分辨没有那么敏感,所以这种处理后,人眼基本感觉不出来。即使放到微观层面,小块并不都是绝对的渐变,但是不影响效果,当然这种编码算法是有损的,权衡利弊之后值得采用。
拓展知识点:实际上存在无损编码格式的应用,电影院采用的
jpeg2000
,它是一种通过存储
原图片
的方式进行视频播放,因为它要放大到巨型屏幕上,如果采用压缩编码,还原之后就会出现上图中的情况,为了观影体验,所以没法压缩,当然这不在我们考虑的范围内。
H264压缩技术
了解了块结构混合编码后,理解H264的基本原理其实非常简单,下我们就简单的描述一下H264压缩数据的过程。通过摄像头采集到的视频帧(按每秒 30 帧算),被送到 H264 编码器的缓冲区中。编码器先要为每一幅图片划分宏块。
以下面这张图为例:
宏块的划分规则
来源于《H.264视频编码官方中文帮助文档》第6.3节 图像和条带的空间分割
一幅图像如何分割为条带和宏块。图像被划分为条带。条带由一系列的宏块组成,当使用宏块自 适应帧/场解码时则由一系列宏块对组成。
每个宏块均包含一个 16×16 的亮度阵列,当视频格式不是单色时,还包含和两个相应的色度阵列。如果没 有使用宏块自适应帧/场解码,每个宏块代表图像中的一个空间矩形区域。例如,如图 6-7 所示,一幅图像被分为 两个条带。
规定反向扫描过程,例如索引值到位置的映射,以及相邻数据的导出过程。
6.4.1 反向宏块扫描过程
这里我们需要知道的是编码算法会将每帧图片每个宏块都进行扫描。进行计算后,得到最优的划分结果。
6.4.2 反向宏块分割和子宏块分割的扫描过程