音视频:01.什么是音视频

381 阅读5分钟

前言:
在掘金上的文章都是遇到用到的时候直接写完后发出来的,我呢也是2020刚毕业入职的小小程序员。工作后从事音视频相关的内容,但是这部分内容也是才刚开始接触,处于不断踩坑的程度。我的上一篇文章就是使用FFmpeg将rgb数据转为yuv数据,搞了一天,一直有问题,后来发现是转换的时候参数,也就是数据格式写错了,导致一天收益甚微,也让自己很头大。所以需要早早弥补音视频方面的知识,所有的总结就写在这个系列里了。参考博文都会负载文章末尾。
对了,如果看到本文的你发现的什么问题,请及时指出,万分感谢!

什么是音视频

音视频,就是音频和视频。我们研究的其实就是与音频和视频相关的编码,解码,压缩,渲染等等内容。

音频

声音的传播时通过震动,在空气中也就是一种波,叫声波,也就是模拟信号。而计算机能处理的为2进制数据,称为数字信号。

人耳能听到的频率在 20Hz~2万Hz 之间,我们就需要对这些信号进行数字化。

将声音信号数字化的步骤有:采样,量化,编码

  • **采样:**把时间的连续的模拟信号在时间轴上离散化,依据采样周期及逆行采样。
  • **量化:**把每个采样点的声音在振幅轴上数字化。
  • **编码:**以上处理后得到的数字形式的信息,为了便于存储、处理和传输,进行压缩处理

编码后的主要参数有:

  • **采样频率:**表示每秒内采样的次数,常用为44.1KHz、22.05KHz、11.05KHz;(44.1kHz表示一秒钟采集44100次数据)
  • **量化位数:**可理解为一多少字节存储声音,一般为8位、12位或16位;
  • **声道数目:**为了造成立体声效果,数字声音分为左、右两个声道。

如果一段60s的音频,其采用频率是44.KHz,量化精度是16位,采用双声道,则其数据量为 44100 x 16b x 2 x 60s / 8 / 1024 /1024 = 10.09MB。

说实话还是蛮大的吧,所以就需要进行压缩编码,处理到人耳听不见的冗余信号。

我们听音乐常分有损音乐和无损音乐。其实就是在压缩的时候分为有损压缩和无损压缩,常用的都是有损压缩,压缩比越小,丢失的信息越多,并且不可恢复。

常见的音频压缩编码:WAV,MP3,AAC

视频

所谓视频其实就是一帧一帧的图像进行播放就形成了视频。对与人眼而言,只要每秒播放超过25张图片,就会形成动态。

而图像的基础是颜色,人眼看到的颜色是物体受到光线照射后反射给人眼的光。表示颜色采用:色调,饱和度,亮度。

色彩模型是用来标定生成各种颜色的一套规则:所说的rgb,yuv就是色彩模型。

将图像数字化的步骤同样有:采样,量化,编码

  • **采样:**分别再x,y轴上根据图像分辨率进行采样,获得色彩值。例如DOI为200,图像尺寸为 2 x 2.5,那么采样后的像素矩阵的大小为400 x 500 的矩阵。
  • **量化:**对获得的像素点进行模数转化,即把每个采样点的像素数字化。一幅400x500的256色图像大小是400 x 500 x 8b
  • **编码:**以上处理后得到的数字形式的信息,为了便于存储、处理和传输,进行压缩处理

所谓的图像数字化,就是利用rgb,yuv等色彩模型记录每一个像素点的信息。

常见的视频压缩编码:bmp,jpg,png,gif等

视频为什么可以压缩

视频的压缩也是去除其中的冗余数据,冗余可以分为以下几个方面:

  • **像素空间冗余:**在同一图像(帧)内,相近像素之间的差别很小,甚至是相同的,于是我们有可能用一个特定大小的像素矩阵来表示相邻的像素.
  • **时间冗余:**视频中连续的图像之间,其中发生变化的像素占整张图像像素的比例极其微小,于是我们有可能用其中一帧来表示相邻的帧来减少带宽消耗.
  • **编码冗余:**不同像素出现的概率不同,于是我们便有可能为出现概率高的像素分配尽量少的字节,对出现概率低的像素分配尽量多的字节.
  • **视觉冗余: **人眼对很多像素颜色不敏感,有时候丢弃这些冗余的信息并不影响人眼观看的效果.

编码的实现方式

视频是由不同的帧画面连续播放的,这些帧主要分为3类:

  1. **I帧:**是自带全部信息的独立帧,是最完整的画面(占用的空间最大),无需参考其它图像便可独立进行解码。视频序列中的第一个帧,始终都是I帧。
  2. P帧:“帧间预测编码帧”,需要参考前面的I帧和/或P帧的不同部分,才能进行编码。P帧对前面的P和I参考帧有依赖性。但是,P帧压缩率比较高,占用的空间较小。
  3. B帧:“双向预测编码帧”,以前帧后帧作为参考帧。不仅参考前面,还参考后面的帧,所以,它的压缩率最高,可以达到200:1。不过,因为依赖后面的帧,所以不适合实时传输(例如视频会议)。

I帧的处理,是采用帧内编码方式,只利用本帧图像内的空间相关性。

P帧的处理,采用帧间编码(前向运动估计),同时利用空间和时间上的相关性。简单来说,采用运动补偿算法来去掉冗余信息。