1. 程式人生 > >媒體格式的概念

媒體格式的概念

接口 轉換成 mac 業務 mks player 存儲 mpeg2 頻段

小程之前介紹了錄制的實際操作,以及聲音采集的概念,而采集只是多媒體操作流程中的一個環節,更多的環節可以參考一下這個圖:
技術分享圖片

聲音或視頻采集後,就是編碼、寫文件或推流。不管是編碼還是寫“文件”,讀者都能找到相應的程序來完成,一般加上自己的業務代碼就能實現自己的功能需求。

小程這次不介紹編碼或寫文件的具體實現,因為這些流程會作為後續的某個場景的實現中的一部分出現,這種方式也能達到理解的目的。

小程這次還是介紹概念方面的內容,而且跟編碼與寫文件有關。因為概念還是相對枯燥的,如果讀者不感興趣,那可以到此就結束閱讀。

本文介紹音視頻常見的編碼格式與容器格式。

聲音或圖像在采集後需要進行編碼壓縮,這個格式叫作編碼格式,或壓縮格式。壓縮後的數據一般需要保存到文件,或者以文件的組織(比如一些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。

媒體格式的概念