1. 程式人生 > >多媒體開發(14):媒體格式的概念

多媒體開發(14):媒體格式的概念

之前講了一些音視訊的錄製操作,還有聲音採集的概念。採集只是多媒體操作流程中的一個環節,更多的環節可以看看這個圖:

聲音或視訊採集後,就是編碼、寫檔案或推流。不管是編碼還是寫“檔案”,你都能找到相應的程式(比如FFmpeg)來完成,一般加上自己的業務程式碼就能實現自己的功能需求。那就沒有東西好說的了?

沒東西說怎麼行,怎麼騙到粉絲?於是,我決定說一些概念上的東西,雖然它很枯燥,但對於你理解大局或吹牛都很實用,希望你繼續看完這篇文章,再留言對小程諷刺一翻。

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

聲音或影象在採集後需要進行編碼壓縮,這個格式叫作編碼格式,或壓縮格式。壓縮後的資料一般需要儲存到檔案,或者以檔案的組織(比如一些tag或box)形式來傳輸,這就好像把編碼後的資料放到一個容器中一樣,所以這個叫容器格式或封裝格式。

編碼的目的是為了節省體積或頻寬。

一般一首歌曲4分鐘,如果不對它進行壓縮,以pcm格式採集後就儲存起來,那這個檔案佔多大體積呢?

以44100的取樣率、雙聲道跟16位取樣精度(2位元組)來計算:44100*2*2*(4*60) = 40.37MB。

也就是說,如果沒有編碼壓縮,一個一般的音訊檔案就佔了40m,那“磁碟容量不足”極有可能成為突出問題;如果在網路上傳輸,那頻寬成本就會成為問題。

那如果經過編碼,可以節省多少體積呢?以常見的mp3編碼格式來看,按mp3的十分之一的壓縮率,可以把40m的大小變成4m大小,節省的體積十分明顯,空間不足的警報解除了。而壓縮率可以大概計算出來(以128kbps來算):44100*2*2/(128000/8*1) = 11。此外,從壓縮的角度,壓縮演算法決定位元速率與質量;從傳輸角度來看,位元速率表示我1秒鐘要表達這麼多bit,如果你網路在1秒鐘內不能傳輸這麼多bit(比如要下1秒才能傳遞完),那播放就一定會卡頓(沒有快取處理的情況下),而能不能傳輸這麼多bit,跟頻寬直接相關。

所以,減肥是有必要的。那麼,有哪些減肥(編碼)格式呢?

(1)pcm


pcm(脈衝編碼調製)是特殊的編碼格式,因為它沒有壓縮資料,沒有減肥效果,它是釆集聲音時表示電平值的一種格式,也是其它編碼格式的原始資料。如果再深入一點,你會發現這一堆pcm值反映了能量的大小與變化的規律,這是另一個話題。

(2)mp3

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或更高。

(3)aac

Advanced Audio Coding,目標是取代mp3,而且似乎真的做到了,現在aac編碼格式得到廣泛使用(h264搭配aac到處可見),你唯一要擔心的是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平臺的影響,還有不少忠實粉絲。

好了,差不多了。

為什麼有如此多的封裝格式或編碼格式呢?一來不同的應用場景的確需要不同的格式,二來同樣的場景,大公司都會制定自己的標準併成為專利(搶先成為行業標準),不會屈服於別家的規則,這是標準啊!

總結一下,沒什麼好說的,通篇都是編碼格式與封裝格式的概念知識。


相關推薦

多媒體開發14媒體格式概念

之前講了一些音視訊的錄製操作,還有聲音採集的概念。採集只是多媒體操作流程中的一個環節,更多的環節可以看看這個圖: 聲音或視訊採集後,就是編碼、寫檔案或推流。不管是編碼還是寫“檔案”,你都能找到相應的程式(比如FFmpeg)來完成,一般加上自己的業務程式碼就能實現自己的功能需求。那就沒有東西好說的了? 沒東

多媒體開發3直播

特點 nss ams 測試的 方式 input cat nginx 成功 之前介紹了如何錄制音視頻,以及相關的多媒體的概念。對於已經錄制的多媒體進行“就地”播放(參考前文),就是回放,除了“回放”這個流程,還有一個流程也會經常遇到,那就是“直播”。 本文介紹直播的實現。 “

多媒體開發6濾鏡實現各種圖片效果 | Video-Filters | 變色

命令行 let img 很多 保持 yuv 黑白 多媒體 ati 之前講過使用FFmpeg的drawtext濾鏡(把圖片或文字加到視頻上),而實際上,FFmpeg的濾鏡很強大,遠不止加字幕或加圖片的功能。濾鏡是很有趣的,可以把圖片變模糊、變色、縮放旋轉,等等。 本文介紹FF

多媒體開發8調試FFmpeg

run 包括 啟用 return tar.bz2 %d 參考 efi turn 編譯FFmpeg得到二進制文件,之後就是對二進制庫的調用,這時FFmpeg就像一個黑盒子。作為程序員,難道不想研究一下FFmpeg的具體實現?比如是怎麽拿到歌曲信息的、怎麽解碼的、怎麽推流的,等

多媒體開發9聲音采集的概念 | 振幅 | 頻率 | 共振 | 電平化

坐標 波形 上下 樣本 形狀 多少 為什麽不使用 dsd 運動 之前介紹通過ffmpeg程序來錄制聲音或圖像,這個辦法是一個操作的過程,很少涉及到概念上的東西。 而本文,要介紹的是聲音采集的一些流程與概念。 聲音的采集流程與概念,是枯燥的,你如果不想了解的話,到這裏就可以退

多媒體開發10從視訊中提取圖片

小白:提取視訊中的圖片嗎?那很簡單,播放視訊再截圖就行啦。 播放視訊再截圖的做法,當然也可以。但是,手動地截圖會太累而且無法保證準確度,特別是需要反覆提取圖片時,或者需要提取“105秒那一瞬間的美女圖片”時,或者我需要每秒出一張圖片時,那有別的辦法嗎? 本文介紹,如何使用FFmpeg實現從視訊中提取圖片的

多媒體開發11Android平臺上裁剪m4a

Android手機上設定鈴聲的操作比較靈活,你聽到一首喜歡的歌曲,馬上就可以對這首歌曲進行裁剪,裁剪到片段後,再通過系統的介面設定為鈴聲(電話鈴聲、鬧鐘鈴聲等)。前提是,播放這首歌的APP,需要提供裁剪歌曲的功能。 那麼,怎麼樣實現擷取音訊檔案的功能呢? 基於之前的介紹,你可能很自然就想到使用FFmpeg命令

多媒體開發12解碼aac到wav檔案

簡單來說,aac是一種音訊編碼格式,需要解碼後才能用於音訊輸出。aac編碼格式,已經是一種很常見的音訊編碼格式,以至於很多系統都支援aac的編解碼,比如iOS上的AudioConverterRef介面、Android上的MediaCodec介面等。 但是,不要以為用了系統的介面就是用了硬體解碼,因為,這個系統

多媒體開發15H264的常見概念

H264,是你常見的技術術語了吧。 那h264是什麼東西呢? H.264是視訊編碼標準,又是標準,得標準得天下啊。 在術語的拼寫上,小程以能理解為準。 本文介紹H264的常見概念。 預警,本文相對枯燥,你可隨時放棄閱讀。 (1)H264從哪裡來? 之前介紹媒體格式的概念時,有提到過國際標準化組織(ISO)

多媒體開發16幀率與位元速率的概念

為什麼說音視訊開發入門較難,因為涉及到很多概念,之前還專門講“媒體格式”、“h264概念”的東西。現在又來,“幀率”跟“位元速率”,這也是兩個常見的概念。你應該經常聽到“重新整理的幀率是多少”或“位元速率比較高所以網速要比較快”的表達吧。 本文介紹音視訊的幀率與位元速率的概念。 (1)幀率 幀率,表示的是頻率

多媒體開發18FFmpeg的常見結構體

除了之前講的avpacket跟avframe,FFmpeg還有其它一些結構經常在流程中出現。FFmpeg還有哪些常見的結構呢?先來看一下這個截圖: 這張圖中的主角,是AVFormatContext。AVFormatContext是FFmpeg的基本結構之一,對應於封裝格式(或容器格式)。 圍繞FFmpeg

多媒體開發2錄製視訊

上一節介紹了用ffplay來播放檔案(或url),這裡有一個概念,如果是播放已經存在的檔案,那叫“回放”,也就是Playback(從流媒體的角度也叫點播),如果播放的是正在錄製的資料(邊錄邊播),那叫直播。 不管是回放還是直播,都需要有媒體資料,那這個媒體資料是怎麼來的呢?從已有的檔案編輯而來是一個辦法,但

多媒體開發6用濾鏡實現各種圖片效果

之前講過使用FFmpeg的drawtext濾鏡(把圖片或文字加到視訊上),而實際上,FFmpeg的濾鏡很強大,遠不止加字幕或加圖片的功能。濾鏡很有趣,可以把圖片變模糊、變色、縮放旋轉,等等。 **本文介紹FFmpeg濾鏡的使用。目的是讓你感受一下FFmepg的濾鏡效果,這樣在實際需要某種效果時,可以考慮使用

多媒體開發7編譯Android與iOS平臺的FFmpeg

編譯FFmpeg,一個古老的話題,但我還是介紹一遍,就當記錄。之前介紹怎麼給視訊新增水印時,就已經提到FFmpeg的編譯,並且在編譯時指定了濾鏡的功能。 但是,在手機盛行的時代,你可能更需要的是能在iOS或Android平臺上執行的FFmpeg,而對於命令列的ffmpeg,你可以在個人電腦上面使用(因為它簡

多媒體開發8除錯FFmpeg

編譯FFmpeg得到二進位制檔案,之後就是對二進位制庫的呼叫,這時FFmpeg就像一個黑盒子。作為程式設計師,難道不想研究一下FFmpeg的具體實現?比如是怎麼拿到歌曲資訊的、怎麼解碼的、怎麼推流的,等等。 看原始碼是理解程式碼實現的一個辦法,而單步除錯能從另一個維度去幫到你。**本文介紹如何單步除錯FFm

多媒體開發9我是聲音

之前介紹通過ffmpeg程式來錄製聲音或影象,這個辦法是一個操作的過程,很少涉及到概念上的東西。而**本文,要介紹的是聲音採集的一些流程與概念。** 聲音的採集流程與概念,是枯燥的,但是,我也會盡量說一些有趣的現象來緩解這種枯燥。 聽得到的,或聽不到的聲音,抽象來說,都是模擬訊號,也可以形象一點,叫能量波

多媒體開發10提取圖片以及點陣圖儲存

> 小白:提取視訊中的圖片嗎?那很簡單,播放視訊再截圖就行啦。 播放視訊再截圖的做法,當然可以。但是,手動截圖會太累而且無法保證準確度,特別是需要反覆提取圖片時,或者需要提取“105秒那一瞬間的美女圖片”時,或者我需要每秒出一張圖片時,那有別的辦法嗎? **本文介紹,如何使用FFmpeg實現從視訊中

多媒體文件格式MP4 格式

可視化 可能 不能 -c ovf alt fps ng- mda 在互聯網常見的格式中,跨平臺最好的應該就屬MP4文件了。因為MP4文件既可以在PC平臺的Flashplayer中播放,又可以在移動平臺的Android、iOS等平臺中進行播放,而且使用系統默認的播放器即可以播

多媒體文件格式M3U8 格式

我們 文件信息 app 代理服務 width 逗號 適應 ios 作用 一、M3U8 格式標準介紹 M3U8文件是指UTF-8編碼格式的M3U文件。M3U文件是記錄了一個索引純文本文件,打開它時播放軟件並不是播放它,而是根據它的索引找到對應的音視頻文件的網絡地址進行在線播放

多媒體文件格式TS 格式

code 不可 復雜 應用 element 模式 只需要 結構圖 音頻 一、TS 格式標準介紹 TS是一種音視頻封裝格式,全稱為MPEG2-TS。其中TS即"Transport Stream"的縮寫。 先簡要介紹一下什麽是MPEG2-TS: DVD的音視頻格式為MPEG2-