这里的编码与第二章节音频中提到的“数字化编码”不是同一个概念,是特指压缩编码。
计算机中,所有数据都是由0和1组成的,音频和视频数据也不例外。由于音视频的数据量庞大,如果按照裸流数据存储,将会耗费非常大的存储空间,且不利于数据传送。
通过观察,音视频数据中心包含了大量0和1的重复数据,因此可以通过一定算法来压缩这些0和1的数据。特别是在视频中,由于画面是逐渐过渡的,所以在整个视频中,存在大量画面/像素重复,这正好提供了非常大的压缩空间。所以,编码可以大大减小音视频数据的大小,让音视频更好的存储和传送。
首先,我们可以查看下未经编码的原始音视频,数据量到底有多大?
以一个分辨率为1920*1080像素且帧率为30f/s的视频为例。
每幅图片像素=1920*1080= 2 073 600像素,每个像素24b(假设采取RGB24),每幅图片为2 073 600 *24 b=49 766 400b。
8b(位)=1Byte(字节),每幅图片大小49766400/8=6.22MB(约等),即一副1920*1080图片的原始大小为6.22MB。
每秒音视频大小=每幅图片大小*帧率=6.22MB*30,即每秒视频的大小为186.6MB,每分钟大约是11GB,一部90分钟的电影,约为990GB。这样存储容量太大了,所以要压缩编码。
1. 视频编码
视频编码的格式有很多,如H.26x系列和MPEG系列的编码。
- H.26x(1/2/3/4/5)系列由国际电信联盟(International Telecommunication Union,ITU)主导。
- MPEG(1/2/3/4)系列由运动图像专家组(Motion Picture Experts Group,MPEG)主导。
当然他们也有联合制定的编码标准,如当下主流的编码格式H.264,以及下一代更先进的压缩编码标准H.265。
视频编码知识比较专业,这里简单介绍下概念上的东西。所谓视频编码方式就是对数字视频进行压缩或者解压缩(视频解码)。通常这种压缩属于有损数据压缩,也可以通过特定的压缩技术,将某个视频格式转换成另一种视频格式。
常见的编码方式如下:
1)H.26x系列
由ITU主导,包括h.261、h.262、h.263、h.264、h.265。
(1)H.261:主要在老的视频会议和视频电话产品中使用。
(2)H.262:在技术内容上和ISO/IEC的MPEG-2视频标准(ISO/IEC13818-2)一致。
(3)H.263:主要在视频会议、视频电话和网络视频中使用。
(4)H.264:H.264/MPEG-4第十部分,或称高级视频编码(Advanced Video Coding,AVC),是一种视频压缩标准,也是一种被广泛使用的高精度视频的录制、压缩和发布格式。
(5)H.265:高效率视频编码(Hign Efficiency Video Coding,HEVC)是一种视频压缩标准,是H.264/MPEG-4 AVC的继任者。HEVC被认为不仅提升了图像质量,同时也达到H.264、MPEG-4 AVC两倍的压缩率(等同于同样的画面质量下比特率减少了50%),可支持4K分辨率甚至超高画质电视,最高分辨率可达到8K(8192*4320分辨率),是目前发展的趋势。
2)MPEG系列
由ISO下属的MPEG开发,主要包括以下几种。
(1)MPEG-1 第二部分:主要使用在VCD上,有些在线视频也使用这种格式。该编解码器质量大致上和原有的VHS录像带相当。
(2)MPEG-2 第二部分:等同于H.262,使用在DVD、SVCD和大多数数字视频广播系统和有线分布系统(Cable Distribution Sytems)中。
(3)MPEG-4 第二部分:可以使用在网络传输、广播和媒体存储上。比起MPEG-2和第一版的H.263,它的压缩性能有所提升。
(4)MPEG-4 第十部分:技术上和ITU的H.264是相同的标准,有时候也被叫做AVC。这两个编码组织合作,诞生了H.264/MPEG-4 AVC标准。ITU-T将这个标准命名为H.264,而ISO/IEC称它为MPEG-4 AVC。
3)其他系列
包括AMV、AVS、Bink、CineForm、Cinepak、Dirac、DV、RealVideo、RTVideo、SheerVideo、Smacker、Sorenson、Video、VC-1、VP3、VP6、VP7、VP8、VP9、WMV等。
2. 音频编码
原始的PCM音频数据包含非常大的数据量,因此需要对其进行压缩编码。与视频编码一样,音频编码也有很多种,比如WAV、MP3、AAC、WMA、APE、FLAC等,后两种算是无损压缩格式。
这里以AAC格式为例,塔式新一代的音频有损压缩技术,是一种高压缩比的音频压缩算法。在MP4视频中的音频数据,大多数时候采用的是AAC压缩格式。
AAC格式主要分为两种:音频数据交换格式(Audio Data Interchange Format,ADIF)和音频数据传输流(Audio Data Transport Stream,ADTS).
1)ADIF
ADIF的特征是可以确定地找到这个音频数据的开始,不需要在音频数据流中间开始解码,即它的解码必须在明确定义的开始处进行。ADIF常用在磁盘文件中,只有一个统一的头(Head),所以必须得到所有的数据后才能进行解码。
2)ADTS
ADTS的特征是它是一个有同步字的比特流,解码可以在这个流中的任何位置开始。它的特征类似于MP3的数据流格式。ADTS可以在任意帧解码,它的每一帧都有头信息。这两种格式的header格式也是不同的,目前一般编码所采用的是ADTS格式的音频流。
ADIF数据格式为header|raw_data。ADTS的一帧数据格式如下所示,中间部分为帧格式,左右省略号为前后数据帧。
... | sync_word | header | error_check | raw_data | ... |
3. 硬解码和软解码
某些播放器中会看见有硬解码和软解码两种播放形式供选择,但大多数时候并不能感觉出它们的区别,那它们的区别是什么呢?
在手机或者PC上,都会有CPU、GPU或者解码器等硬件,计算是在CPU上进行的,而GPU主要负责画面的显示(是一种硬件加速).
软解码是指利用CPU计算能力来解码,通常如果CPU的能力不是很强,解码速度会比较慢,也可能出现发热现象。但由于采用统一的算法,兼容性会很好。
硬解码是指利用专门的解码芯片来加速解码,通常硬解码的解码速度会快很多。但由于硬解码是由各个厂家实现,质量良莠不齐,非常容易出现兼容性问题。
4. 音视频容器
前面介绍的各种音视频编码格式,几乎没有一种是平时使用的视频格式。常见的视频格式如MP4、RMVB、AVI、MKV、MOV等,其实是包裹了音视频编码数据的视频容器,用来把特定编码标准编码的视频流和音频流混在一起,成为一个文件。
如MP4支持 H.264、H.265等视频编码和AAC、MP3等音频编码。MP4是目前最流行的视频格式,在移动端,一般将视频封装成MP4格式。