音视频基础(一):采集
音视频的本质
视频本质上就是一系列图片的时间序列,由于人眼的视觉残留,形成了动态的效果。
而音频本质上就是一个声波的时间序列,这些声波组成了音频。
通过上面的分析,我们可以知道:音视频实际上是一系列静态的图片/声波的以时间为顺序的组合
所以在这里,我们通过采集频率(时间)和采集物两方面来介绍采集
图片
图片是我们非常熟悉的一种文件格式,我们都知道对于一个图片而言,它有分辨率、色彩等重要的属性。
这里主要介绍一下视频中图片的色彩格式:YUV,这与我们常用的RGB色彩格式有区别。
YUV简介
YUV的出现有一定的历史原因:早期电视都是黑白电视,即只有亮度信息而没有色彩信息。而之后才支持彩色信号。传统的RGB中并没有单独的亮度通道,所以不能直接支持黑白画面。所以早期电视使用单独的只有亮度值的图片的序列。后来为了在此基础上同时支持彩色电视,引入了U和V通道。你可以简单的理解为: 黑白画面(单Y) + U & V = 彩色画面(RGB格式)
而YUV则分为了三个通道:
Y:亮度,就是灰度值。除了表示亮度信号外,还含有较多的绿色通道量。
U:蓝色通道与亮度的差值。
V:红色通道与亮度的差值。
我们可以简单的使用下列公式对YUV和RGB进行换算:
Y = 0.299R + 0.587G + 0.114B
U = -0.147R - 0.289G + 0.436B
V = 0.615R - 0.515G - 0.100B
——————————————————
R = Y + 1.14V
G = Y - 0.39U - 0.58V
B = Y + 2.03U
YUV格式
YUV的出现是出于历史原因,但是为什么在彩色视频的今天还继续使用YUV而不是RGB呢?这就要说到YUV格式的一个优势了:人类的眼睛天然的对亮度更加敏感而对色度不那么敏感
这主要是因为人眼中负责感知亮度的视杆细胞多于感知色度的视锥细胞
所以我们可以减少一部分U和V,在不影响观感的前提下,减少视频的体积。通常而言,YUV的分配方案有以下几种,这就是我们常说的YUV格式。其中最常用的是YUV 4:2:0
YUV 4:4:4采样,每一个Y对应一组UV分量。
YUV 4:2:2采样,每两个Y共用一组UV分量。
YUV 4:2:0采样,每四个Y共用一组UV分量。
当然,对于YUV中Y、U、V的排列不一定是固定的,以YUV420来说,可以分为YUV420P和YUV420SP两种排列方式:
YUV420P:三平面存储。数据组成为YYYYYYYYUUVV(如I420)或YYYYYYYYVVUU(如YV12)。
YUV420SP:两平面存储。分为两种类型YYYYYYYYUVUV(如NV12)或YYYYYYYYVUVU(如NV21)
但这部分就太过底层了,仅作了解
虽然这些减少的U和V对人眼不敏感,但却是也是缺失了图片的细节,为什么我们需要使用这种方法呢?主要的原因就是 图片太大了
我们可以做一个简单的计算:
对于一个色彩深度为24的图片来说,每一个像素都需要24个二进制位来存储颜色信息,前端常用的HEX颜色编码就可以看出:
比如对于绿宝石色#40E0D0,它实际上存储为:01000000 11100000 11010000,也就是3个字节
- 红色的值:二进制01000000,十六进制40
- 绿色的值:二进制11100000,十六进制E0
- 蓝色的值:二进制11010000,十六进制D0
而对于YUV420格式来说,在色深不变的情况下,4个像素有4个Y一个U一个V,也就是6个字节,也就是平均一个像素1.5个字节, 只有RGB图片一半的大小
音频
音频数据的承载方式最常用的是脉冲编码调制,即PCM。
在自然界中,声音是连续不断的,是一种模拟信号,那怎样才能把声音保存下来呢?那就是把声音数字化,即转换为数字信号。
我们知道声音是一种波,有自己的振幅和频率,那么要保存声音,就要保存声音在各个时间点上的振幅。在量化振幅时,需要取一个近似的值来记录,这个值就是采样深度,通常为8位、16位、24位等
和色彩深度一样,这个值越高就越还原
而数字信号并不能连续保存所有时间点的振幅,事实上,并不需要保存连续的信号,就可以还原到人耳可接受的声音。所以我们呢可以在固定时间内采集有限的样本,我们可以用 采样率,即一秒钟采集多少样本来描述。
根据奈奎斯特-香农采样定理:为了不失真地恢复模拟信号,采样频率应该不小于模拟信号频谱中最高频率的2倍。人耳能够听到的最高频率是20kHz,所以无损的采样频率就是44.1kHz
根据以上分析,PCM的采集步骤分为以下步骤:
模拟信号->采样->量化->编码->数字信号
这里的编码与下文讲的压缩编码不同,就是简单的将量化数据按顺序转换为二进制格式
当然,很多时候我们需要同时采集多个声音源来更好的还原声音,我们用不同的声道来记录。
为什么需要编码
以上文的音频文件为例,一个44.1kHz,双声道,位深度为16的声音文件一分钟的大小是多少?
44100 * 16 * 2 * 60 / 8 = 10584000 (bytes) ≈ 10 (MB)
一分钟10MB,放在今天的带宽下看好像还好,但是视频呢?对一个YUV420,1080P(1080 * 1920 ),24帧的视频,1分钟是多大呢?
1.5 * 1080 * 1920 * 24 * 60 / 8 = 559872000 (btyes) ≈ 553 (MB)
这个大小很明显是不现实也不符合我们认知的,为什么会出现这样的情况呢?那就是因为音频和视频都采用了编码进行进一步加工和压缩,让它们变成更小的格式,才让它们能在互联网上传播。
下一章我们将会具体讲解视频和音频的编码格式,从AAC和h264两种最为主流的音视频编码格式入手,分析它们是如何实现压缩的。