以前講了一些音視頻的錄製操做,還有聲音採集的概念。採集只是多媒體操做流程中的一個環節,更多的環節能夠看看這個圖:
ios
聲音或視頻採集後,就是編碼、寫文件或推流。不論是編碼仍是寫「文件」,你都能找到相應的程序(好比FFmpeg)來完成,通常加上本身的業務代碼就能實現本身的功能需求。那就沒有東西好說的了?算法
沒東西說怎麼行,怎麼騙到粉絲?因而,我決定說一些概念上的東西,雖然它很枯燥,但對於你理解大局或吹牛都很實用,但願你繼續看完這篇文章,再留言對小程諷刺一翻。windows
本文介紹音視頻常見的編碼格式與容器格式。瀏覽器
聲音或圖像在採集後須要進行編碼壓縮,這個格式叫做編碼格式,或壓縮格式。壓縮後的數據通常須要保存到文件,或者以文件的組織(好比一些tag或box)形式來傳輸,這就好像把編碼後的數據放到一個容器中同樣,因此這個叫容器格式或封裝格式。緩存
編碼的目的是爲了節省體積或帶寬。網絡
通常一首歌曲4分鐘,若是不對它進行壓縮,以pcm格式採集後就保存起來,那這個文件佔多大致積呢?app
以44100的採樣率、雙聲道跟16位採樣精度(2字節)來計算:44100*2*2*(4*60) = 40.37MB。less
也就是說,若是沒有編碼壓縮,一個通常的音頻文件就佔了40m,那「磁盤容量不足」極有可能成爲突出問題;若是在網絡上傳輸,那帶寬成本就會成爲問題。ide
那若是通過編碼,能夠節省多少體積呢?以常見的mp3編碼格式來看,按mp3的十分之一的壓縮率,能夠把40m的大小變成4m大小,節省的體積十分明顯,空間不足的警報解除了。而壓縮率能夠大概計算出來(以128kbps來算):44100*2*2/(128000/8*1) = 11。此外,從壓縮的角度,壓縮算法決定碼率與質量;從傳輸角度來看,碼率表示我1秒鐘要表達這麼多bit,若是你網絡在1秒鐘內不能傳輸這麼多bit(好比要下1秒才能傳遞完),那播放就必定會卡頓(沒有緩存處理的狀況下),而能不能傳輸這麼多bit,跟帶寬直接相關。性能
因此,減肥是有必要的。那麼,有哪些減肥(編碼)格式呢?
pcm(脈衝編碼調製)是特殊的編碼格式,由於它沒有壓縮數據,沒有減肥效果,它是釆集聲音時表示電平值的一種格式,也是其它編碼格式的原始數據。若是再深刻一點,你會發現這一堆pcm值反映了能量的大小與變化的規律,這是另外一個話題。
mp3是mpeg制定的壓縮標準。
mpeg,動態圖像專家組,從屬於ISO標準化組織,主要工做是制定視音頻壓縮編碼標準。還有一個jpeg,是靜態圖像專家組。你不要小看標準,得標準者得天下,爲何要爭5G標準?
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或更高。
Advanced Audio Coding,目標是取代mp3,並且彷佛真的作到了,如今aac編碼格式獲得普遍使用(h264搭配aac處處可見),你惟一要擔憂的是aac編碼的受權費的問題。
aac在mpeg-2與mpeg-4標準中都有涉及。從編碼的角度,lc-aac(低複雜度的aac)使用最爲普遍,此外還有he-aac(高性能的aac)、main-aac、ssr-aac之類規格的編碼格式。
ac3, 全稱是Audio Coding version 3,是杜比(Dolby)實驗室制定的有損音頻編碼格式。
ac3普遍應用於5.1聲道(前左右、後左右、中低音),也是電影院專屬編碼格式。
ape與flac都是無損壓縮,也就是能還原出原始的pcm數據。
ape,全稱就是ape,猿的意思,因此也叫Monkey。
flac,Free Lossless Audio Codec(無損音頻壓縮編碼)。
想聽高品質的音頻,ape與flac是很好的選擇。
wma,Windows Media Audio,是微軟力推的一種音頻格式。wma是有損壓縮,壓縮率可達1:18,比mp3更高,但未必音質就更好。
amr,Adaptive Multi-Rate,由歐洲通訊標準化委員會提出,在移動通訊系統中普遍使用的語音標準。
amr(分wb或nb)編碼時,支持的參數是有限制的,好比nb最高的採樣爲8000,比特率最高爲12200,聲道數爲1。
amr最大的特別就是體積小,音質差。在語音通話中(直播或本地存儲)常用到。
以上,小程介紹了編碼格式,接下來介紹容器格式。
容器格式也叫封裝格式,由於把編碼數據給封裝起來了。一個封裝格式每每能夠支持多個編碼格式。
mk,是matroska的縮寫。matroska封裝格式,是CoreCodec公司制定的格式,俗稱「萬能的容器」,基本上支持全部編碼格式。
mkv,是視頻容器,通常也包括音頻與字幕,是matroska格式中應用最普遍的一種。
mka,只包括音頻的matroska格式,能夠包括多個音軌,好比國粵英三個音軌。
mks,只包括字幕流的matroska格式。
mp4,是動態圖像專家組(mpeg,從屬於ISO)制定的封裝格式。
mp4對編碼格式有要求,只支持基於mpeg4的編碼格式,好比視頻的h264,音頻的aac。對於其它編碼格式,並不是官方支持,好比ac三、mp3等。若是硬把非官方支持的編碼格式塞到mp4容器,難以保證必定能被播放。
mp4對編碼格式要求明確,是它能普遍應用的一個緣由,特別在移動平臺,好比ios系統上。
mp4若是隻有音頻,則文件有可能以m4a做爲後綴,這是蘋果公司起的名字,用來區分帶有視頻的通常的mp4。因此m4a文件也是mp4文件,從容器的角度。通常m4a裏面的音頻是aac壓縮格式,但不排除塞了mp三、applelossless等格式的數據。
ts,transport stream的縮寫,即傳輸流,從名字就知道它能夠用於網絡播放。
ts,全稱是mpeg2-ts,早期普遍應用於數字電視,視頻編碼格式爲mpeg2。
蘋果公司制定的hls協議,使用ts做爲數據的封裝格式,同時也簡化了ts的設計,讓這種格式普遍應用於在線直播。簡化後的ts,視頻編碼格式爲h264,音頻爲aac或mp3。
每一個ts包,能單獨解碼與播放。
flv,FlashVideo的縮寫,是Macromedia公司(2005年被Adobe收購)制定的視頻封裝格式。
flv被普遍應用於網絡視頻播放。flash插件播放器的出現,使得在瀏覽器上能夠輕鬆觀看在線視頻,免去安裝本地播放器的麻煩。而flash播放器使用flv容器。
直播的興起,也影響了flv的使用,好比rtmp流協議,使用的是flv封裝格式。
avi,Audio Video Interleaved,即音視頻交錯格式,微軟在1992年發佈的封裝格式,基於riff文件格式。
歷史久遠,但簡單的開發接口與windows平臺的影響,還有很多忠實粉絲。
好了,差很少了。
爲何有如此多的封裝格式或編碼格式呢?一來不一樣的應用場景的確須要不一樣的格式,二來一樣的場景,大公司都會制定本身的標準併成爲專利(搶先成爲行業標準),不會屈服於別家的規則,這是標準啊!
總結一下,沒什麼好說的,通篇都是編碼格式與封裝格式的概念知識。