小程之前介绍了录制的实际操作,以及声音采集的概念,而采集只是多媒体操作流程中的一个环节,更多的环节可以参考一下这个图:
声音或视频采集后,就是编码、写文件或推流。不管是编码还是写“文件”,读者都能找到相应的程序来完成,一般加上自己的业务代码就能实现自己的功能需求。
小程这次不介绍编码或写文件的具体实现,因为这些流程会作为后续的某个场景的实现中的一部分出现,这种方式也能达到理解的目的。
小程这次还是介绍概念方面的内容,而且跟编码与写文件有关。因为概念还是相对枯燥的,如果读者不感兴趣,那可以到此就结束阅读。
本文介绍音视频常见的编码格式与容器格式。
声音或图像在采集后需要进行编码压缩,这个格式叫作编码格式,或压缩格式。压缩后的数据一般需要保存到文件,或者以文件的组织(比如一些tag或box)形式来传输,这就好像把编码后的数据放到一个容器中一样,所以这个叫容器格式或封装格式。
编码的目的是为了节省体积或带宽。
一般一首歌曲4分钟,如果不对它进行压缩,以pcm格式采集后就保存起来,那这个文件占多大体积呢?
以44100的采样率、双声道跟16位采样精度(2字节)来计算:44100*2*2*(4*60) = 40.37M。
也就是说,如果没有编码压缩,一个一般的音频文件就占了40m,那“磁盘容量不足”极有可能成为突出问题;如果在网络上传输,那带宽就会成为问题。
那如果经过编码,可以节省多少体积呢?以常见的mp3编码格式来看,按mp3的十分之一的压缩率,可以把40m的大小变成4m大小,节省的体积十分明显。而压缩率可以大概计算出来(以128kbps来算):44100*2*2/(128000/8*1) = 11。
所以,减肥是有必要的。那么,有哪些编码格式呢?
(1)pcm
pcm(脉冲编码调制)是特殊的编码格式,因为它没有压缩数据,它是釆集声音时表示电平值的一种格式,也是其它编码格式的原始数据。
(2)mp3
mp3是mpeg制定的压缩标准。
mpeg,动态图像专家组,从属于ISO标准化组织,主要工作是制定视音频压缩编码标准。还有一个jpeg,是静态图像专家组。
mpeg标准的版本有:mpeg1/2/4/7/21,但是,没有mpeg3,而mpeg2.5是非官方版本,是mpeg2的扩展。
我们经常说的mp3,在它之前,还有mp1与mp2。
mp1/mp2/mp3,一般都指mpeg-1 audio layer1/2/3,都是基于mepg1标准。layer1/2/3的区别是编码的复杂度不一样,由低到高,layer3的复杂度最高,使得它编解码时会更耗时耗力,但它编码时可以用更小的体积来达到相同的质量。
注意,mp3并不是指mpeg3标准,实际上不存在mpeg3标准,而mp3是基于mpeg1标准,一般来说mp1与mp2也是基于mpeg1标准。mp3全称是:mpeg-1 audio layer3。
mp3的压缩,大概来说,就是把时域波形转换成频率数据,再把高频段与低频段加大压缩力度(特别是高频段),对不同频段使用不同的压缩比例,为有损压缩,压缩率达1:10或更高。
(3)aac
Advanced Audio Coding,目标是取代mp3,而且似乎真的做到了,现在aac编码格式得到广泛使用(h264搭配aac到处可见)。
aac在mpeg-2与mpeg-4标准中都有涉及。从编码的角度,lc-aac(低复杂度的aac)使用最为广泛,此外还有he-aac(高性能的aac)、main-aac、ssr-aac之类规格的编码格式。
(4)ac3
ac3, 全称是Audio Coding version 3,是杜比(Dolby)实验室制定的有损音频编码格式。
ac3广泛应用于5.1声道(前左右、后左右、中低音),也是电影院专属编码格式。
(5)ape/flac
ape与flac都是无损压缩,也就是能还原出原始的pcm数据。
ape,全称就是ape,猿的意思,所以也叫Monkey。
flac,Free Lossless Audio Codec(无损音频压缩编码)。
想听高品质的音频,ape与flac是很好的选择。
(6)wma
wma,Windows Media Audio,是微软力推的一种音频格式。wma是有损压缩,压缩率可达1:18,比mp3更高,但未必音质就更好。
(7)amr
amr,Adaptive Multi-Rate,由欧洲通信标准化委员会提出,在移动通信系统中广泛使用的语音标准。
amr(分wb或nb)编码时,支持的参数是有限制的,比如nb最高的采样为8000,比特率最高为12200,声道数为1。
amr最大的特别就是体积小,音质差。在语音通话中(直播或本地存储)经常使用到。
以上,小程介绍了编码格式,接下来介绍容器格式。
容器格式也叫封装格式,因为把编码数据给封装起来了。一个封装格式往往可以支持多个编码格式。
(1) mkv
mk,是matroska的缩写。matroska封装格式,是CoreCodec公司制定的格式,俗称“万能的容器”,基本上支持所有编码格式。
mkv,是视频容器,一般也包括音频与字幕,是matroska格式中应用最广泛的一种。
mka,只包括音频的matroska格式,可以包括多个音轨,比如国粤英三个音轨。
mks,只包括字幕流的matroska格式。
(2)mp4
mp4,是动态图像专家组(mpeg,从属于ISO)制定的封装格式。
mp4对编码格式有要求,只支持基于mpeg4的编码格式,比如视频的h264,音频的aac。对于其它编码格式,并非官方支持,比如ac3、mp3等。如果硬把非官方支持的编码格式塞到mp4容器,难以保证一定能被播放。
mp4对编码格式要求明确,是它能广泛应用的一个原因,特别在移动平台,比如ios系统上。
mp4如果只有音频,则文件有可能以m4a作为后缀,这是苹果公司起的名字,用来区分带有视频的一般的mp4。所以m4a文件也是mp4文件,从容器的角度。一般m4a里面的音频是aac压缩格式,但不排除塞了mp3、applelossless等格式的数据。
(3)ts
ts,transport stream的缩写,即传输流,从名字就知道它可以用于网络播放。
ts,全称是mpeg2-ts,早期广泛应用于数字电视,视频编码格式为mpeg2。
苹果公司制定的hls协议,使用ts作为数据的封装格式,同时也简化了ts的设计,让这种格式广泛应用于在线直播。简化后的ts,视频编码格式为h264,音频为aac或mp3。
每个ts包,能单独解码与播放。
(4)flv
flv,FlashVideo的缩写,是Macromedia公司(2005年被Adobe收购)制定的视频封装格式。
flv被广泛应用于网络视频播放。flash插件播放器的出现,使得在浏览器上可以轻松观看在线视频,免去安装本地播放器的麻烦。而flash播放器使用flv容器。
直播的兴起,也影响了flv的使用,比如rtmp流协议,使用的是flv封装格式。
(5)avi
avi,Audio Video Interleaved,即音视频交错格式,微软在1992年发布的封装格式,基于riff文件格式。
历史久远,但简单的开发接口与windows平台的影响,还有不少忠实粉丝。
为什么有如此多的封装格式或编码格式呢?一来不同的应用场景需要不同的格式,二来同样的场景,大公司都会制定自己的标准并成为专利(抢先成为行业标准),不会屈服于别家的规则。
总结一下,本文介绍了音视频常见的编码格式与封装格式,理解的难度系数为1。
原文地址:http://blog.51cto.com/13136504/2069443