ffmpeg 基礎知識梳理 總結

原文參考鏈接 http://blog.csdn.net/leixiaohua1020/article/details/15811977#comments

尤其是使用FFMPEG進行視音頻編解碼的人桥言,有的已經是有多年經驗的“大神”萌踱,有的是剛開始學習的初學者。在和大家探討的過程中号阿,我忽然發(fā)現(xiàn)了一個問題:在“大神”和初學者之間好像有一個不可逾越的鴻溝并鸵。“大神”們水平高超扔涧,探討著深奧的問題园担;而初學者們還停留在入門階段。究竟是什么原因造成的這種“兩極分化”呢枯夜?最后弯汰,我發(fā)現(xiàn)了問題的關鍵:FFMPEG難度比較大,卻沒有一個循序漸進卤档,由簡單到復雜的教程◎茫現(xiàn)在網上的有關FFMPEG的教程多半難度比較大,不太適合剛接觸FFMPEG的人學習劝枣;而且很多的例子程序編譯通不過汤踏,極大地打消了學習的積極性。我自己在剛開始學習FFMPEG的時候也遇到了很大的困難舔腾。為了幫助更多的人快速成為“大神”溪胶,我想總結一個學習FFMPEG的方法,方便大家循序漸進的學習FFMPEG稳诚。

0. 背景知識

本章主要介紹一下FFMPEG都用在了哪里(在這里僅列幾個我所知的哗脖,其實遠比這個多)。說白了就是為了說明:FFMPEG是非常重要的扳还。

使用FFMPEG作為內核視頻播放器:

Mplayer才避,ffplay,射手播放器氨距,暴風影音桑逝,KMPlayer,QQ影音...

使用FFMPEG作為內核的Directshow Filter:

ffdshow俏让,lav filters...

使用FFMPEG作為內核的轉碼工具:

ffmpeg楞遏,格式工廠...

事實上,F(xiàn)FMPEG的視音頻編解碼功能確實太強大了首昔,幾乎囊括了現(xiàn)存所有的視音頻編碼標準寡喝,因此只要做視音頻開發(fā),幾乎離不開它勒奇。

對于完全沒有視音頻技術背景的人來說预鬓,在學習FFmpeg之前最好先了解一下幾種最基本的視音頻數據的格式,可以參考下面的文章:

http://blog.csdn.net/leixiaohua1020/article/details/18893769

1.? ? 視頻播放器原理

視音頻技術主要包含以下幾點:封裝技術赊颠,視頻壓縮編碼技術以及音頻壓縮編碼技術格二。如果考慮到網絡傳輸的話,還包括流媒體協(xié)議技術巨税。

視頻播放器播放一個互聯(lián)網上的視頻文件蟋定,需要經過以下幾個步驟:解協(xié)議,解封裝草添,解碼視音頻驶兜,視音頻同步。如果播放本地文件則不需要解協(xié)議远寸,為以下幾個步驟:解封裝抄淑,解碼視音頻,視音頻同步驰后。他們的過程如圖所示肆资。

解協(xié)議的作用,就是將流媒體協(xié)議的數據灶芝,解析為標準的相應的封裝格式數據郑原。視音頻在網絡上傳播的時候唉韭,常常采用各種流媒體協(xié)議,例如HTTP犯犁,RTMP属愤,或是MMS等等。這些協(xié)議在傳輸視音頻數據的同時酸役,也會傳輸一些信令數據住诸。這些信令數據包括對播放的控制(播放,暫停涣澡,停止)贱呐,或者對網絡狀態(tài)的描述等。解協(xié)議的過程中會去除掉信令數據而只保留視音頻數據入桂。例如奄薇,采用RTMP協(xié)議傳輸的數據,經過解協(xié)議操作后事格,輸出FLV格式的數據惕艳。

解封裝的作用,就是將輸入的封裝格式的數據驹愚,分離成為音頻流壓縮編碼數據和視頻流壓縮編碼數據远搪。封裝格式種類很多,例如MP4逢捺,MKV谁鳍,RMVB,TS劫瞳,F(xiàn)LV倘潜,AVI等等,它的作用就是將已經壓縮編碼的視頻數據和音頻數據按照一定的格式放到一起志于。例如涮因,F(xiàn)LV格式的數據,經過解封裝操作后伺绽,輸出H.264編碼的視頻碼流和AAC編碼的音頻碼流养泡。

解碼的作用,就是將視頻/音頻壓縮編碼數據奈应,解碼成為非壓縮的視頻/音頻原始數據澜掩。音頻的壓縮編碼標準包含AAC,MP3杖挣,AC-3等等肩榕,視頻的壓縮編碼標準則包含H.264,MPEG2惩妇,VC-1等等株汉。解碼是整個系統(tǒng)中最重要也是最復雜的一個環(huán)節(jié)筐乳。通過解碼,壓縮編碼的視頻數據輸出成為非壓縮的顏色數據郎逃,例如YUV420P哥童,RGB等等挺份;壓縮編碼的音頻數據輸出成為非壓縮的音頻抽樣數據褒翰,例如PCM數據

視音頻同步的作用,就是根據解封裝模塊處理過程中獲取到的參數信息匀泊,同步解碼出來的視頻和音頻數據优训,并將視頻音頻數據送至系統(tǒng)的顯卡和聲卡播放出來。

2.? ? 流媒體協(xié)議

流媒體協(xié)議是服務器與客戶端之間通信遵循的規(guī)定各聘。當前網絡上主要的流媒體協(xié)議如表所示揣非。

RTSP+RTP經常用于IPTV領域。因為其采用UDP傳輸視音頻躲因,支持組播早敬,效率較高。但其缺點是網絡不好的情況下可能會丟包大脉,影響視頻觀看質量搞监。因而圍繞IPTV的視頻質量的研究還是挺多的。

RTSP規(guī)范可參考:

我的另外一篇文章 :RTSP協(xié)議

RTSP+RTP系統(tǒng)中衡量服務質量可參考:

http://blog.csdn.net/leixiaohua1020/article/details/11883393

上海IPTV碼流分析結果可參考:IPTV視頻碼流分析

因為互聯(lián)網網絡環(huán)境的不穩(wěn)定性镰矿,RTSP+RTP較少用于互聯(lián)網視音頻傳輸琐驴£级粒互聯(lián)網視頻服務通常采用TCP作為其流媒體的傳輸層協(xié)議土榴,因而像RTMP椒功,MMS余赢,HTTP這類的協(xié)議廣泛用于互聯(lián)網視音頻服務之中障般。這類協(xié)議不會發(fā)生丟包汗茄,因而保證了視頻的質量炊苫,但是傳輸的效率會相對低一些谊却。

此外RTMFP是一種比較新的流媒體協(xié)議衙猪,特點是支持P2P馍乙。

RTMP我做的研究相對多一些:

http://blog.csdn.net/leixiaohua1020/article/details/11694129

http://blog.csdn.net/leixiaohua1020/article/details/11704355

相關工具的源代碼分析:RTMPdump源代碼分析 1: main()函數[系列文章]

http://blog.csdn.net/leixiaohua1020/article/details/12952977

RTMP 協(xié)議學習

http://blog.csdn.net/leixiaohua1020/article/details/15814587

3.? ? 封裝格式

封裝格式的主要作用是把視頻碼流和音頻碼流按照一定的格式存儲在一個文件中。現(xiàn)如今流行的封裝格式如下表所示:

由表可見屈嗤,除了AVI之外潘拨,其他封裝格式都支持流媒體,即可以“邊下邊播”饶号。有些格式更“萬能”一些铁追,支持的視音頻編碼標準多一些,比如MKV茫船。而有些格式則支持的相對比較少琅束,比如說RMVB扭屁。

4.? ? 視頻編碼

視頻編碼的主要作用是將視頻像素數據(RGB,YUV等)壓縮成為視頻碼流涩禀,從而降低視頻的數據量料滥。如果視頻不經過壓縮編碼的話,體積通常是非常大的艾船,一部電影可能就要上百G的空間葵腹。視頻編碼是視音頻技術中最重要的技術之一。視頻碼流的數據量占了視音頻總數據量的絕大部分屿岂。高效率的視頻編碼在同等的碼率下践宴,可以獲得更高的視頻質量。

視頻編碼的簡單原理可以參考:

http://blog.csdn.net/leixiaohua1020/article/details/28114081

注:視頻編碼技術在整個視音頻技術中應該是最復雜的技術爷怀。如果沒有基礎的話阻肩,可以先買一些書看一下原理,比如說《現(xiàn)代電視原理》《數字電視廣播原理與應用》

4.1 主流編碼標準

H.264僅僅是一個編碼標準运授,而不是一個具體的編碼器烤惊,H.264只是給編碼器的實現(xiàn)提供參照用的。

基于H.264標準的編碼器還是很多的吁朦,究竟孰優(yōu)孰劣柒室?可參考

http://blog.csdn.net/leixiaohua1020/article/details/12373947

在學習視頻編碼的時候,可能會用到各種編碼器(實際上就是一個exe文件)喇完,他們常用的編碼命令可以參考:

http://blog.csdn.net/leixiaohua1020/article/details/11705495

學習H.264最標準的源代碼伦泥,就是其官方標準JM了。但是要注意锦溪,JM速度非常的慢不脯,是無法用于實際的

http://blog.csdn.net/leixiaohua1020/article/details/11980219

實際中使用最多的就是x264了,性能強悍(超過了很多商業(yè)編碼器)刻诊,而且開源防楷。其基本教程網上極多,不再贅述则涯。編碼時候可參考

http://blog.csdn.net/leixiaohua1020/article/details/12720135

編碼后統(tǒng)計值的含義 http://blog.csdn.net/leixiaohua1020/article/details/11884559

Google推出的VP8屬于和H.264同一時代的標準复局。總體而言粟判,VP8比H.264要稍微差一點亿昏。有一篇寫的很好的VP8的介紹文章?

http://blog.csdn.net/leixiaohua1020/article/details/12760173

5.? ? 音頻編碼

音頻編碼的主要作用是將音頻采樣數據(PCM等)壓縮成為音頻碼流,從而降低音頻的數據量档礁。音頻編碼也是互聯(lián)網視音頻技術中一個重要的技術角钩。但是一般情況下音頻的數據量要遠小于視頻的數據量,因而即使使用稍微落后的音頻編碼標準,而導致音頻數據量有所增加递礼,也不會對視音頻的總數據量產生太大的影響惨险。高效率的音頻編碼在同等的碼率下,可以獲得更高的音質脊髓。

音頻編碼的簡單原理可以參考 http://blog.csdn.net/leixiaohua1020/article/details/28114081


由表可見辫愉,近年來并未推出全新的音頻編碼方案,可見音頻編碼技術已經基本可以滿足人們的需要将硝。音頻編碼技術近期絕大部分的改動都是在MP3的繼任者——AAC的基礎上完成的恭朗。

這些編碼標準之間的比較可以參考文章:音頻編碼方案之間音質比較(AAC,MP3袋哼,WMA等)

http://blog.csdn.net/leixiaohua1020/article/details/11730661

結果大致是這樣的:

AAC+ > MP3PRO > AAC> RealAudio > WMA > MP3

AAC格式的介紹:AAC格式簡介

6.? ? 現(xiàn)有網絡視音頻平臺對比

現(xiàn)有的網絡視音頻服務主要包括兩種方式:點播和直播冀墨。點播意即根據用戶的需要播放相應的視頻節(jié)目,這是互聯(lián)網視音頻服務最主要的方式涛贯。絕大部分視頻網站都提供了點播服務。直播意即互聯(lián)網視音頻平臺直接將視頻內容實時發(fā)送給用戶蔚出,目前還處于發(fā)展階段弟翘。直播在網絡電視臺,社交視頻網站較為常見骄酗。

6.1 直播平臺參數對比

可以看出稀余,直播服務普遍采用了RTMP作為流媒體協(xié)議,F(xiàn)LV作為封裝格式趋翻,H.264作為視頻編碼格式睛琳,AAC作為音頻編碼格式。采用RTMP作為直播協(xié)議的好處在于其被Flash播放器支持踏烙。而Flash播放器如今已經安裝在全球99%的電腦上师骗,并且與瀏覽器結合的很好。因此這種流媒體直播平臺可以實現(xiàn)“無插件直播”讨惩,極大的簡化了客戶端的操作辟癌。封裝格式,視頻編碼荐捻,音頻編碼方面黍少,無一例外的使用了FLV + H.264 + AAC的組合。FLV是RTMP使用的封裝格式处面,H.264是當今實際應用中編碼效率最高的視頻編碼標準厂置,AAC則是當今實際應用中編碼效率最高的音頻編碼標準。視頻播放器方面魂角,都使用了Flash播放器昵济。

6.2 點播平臺參數對比

可以看出,點播服務普遍采用了HTTP作為流媒體協(xié)議,H.264作為視頻編碼格式砸紊,AAC作為音頻編碼格式传于。采用HTTP作為點播協(xié)議有以下兩點優(yōu)勢:一方面,HTTP是基于TCP協(xié)議的應用層協(xié)議醉顽,媒體傳輸過程中不會出現(xiàn)丟包等現(xiàn)象沼溜,從而保證了視頻的質量;另一方面游添,HTTP被絕大部分的Web服務器支持系草,因而流媒體服務機構不必投資購買額外的流媒體服務器,從而節(jié)約了開支唆涝。點播服務采用的封裝格式有多種:MP4找都,F(xiàn)LV,F(xiàn)4V等廊酣,它們之間的區(qū)別不是很大能耻。視頻編碼標準和音頻編碼標準是H.264和AAC。這兩種標準分別是當今實際應用中編碼效率最高的視頻標準和音頻標準亡驰。視頻播放器方面晓猛,無一例外的都使用了Flash播放器。


感謝 雷神 凡辱,讓我入門?

原文鏈接 http://blog.csdn.net/leixiaohua1020/article/details/18893769

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末戒职,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子透乾,更是在濱河造成了極大的恐慌洪燥,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件乳乌,死亡現(xiàn)場離奇詭異捧韵,居然都是意外死亡,警方通過查閱死者的電腦和手機钦扭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進店門纫版,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人客情,你說我怎么就攤上這事其弊。” “怎么了膀斋?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵梭伐,是天一觀的道長。 經常有香客問我仰担,道長糊识,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮赂苗,結果婚禮上愉耙,老公的妹妹穿的比我還像新娘。我一直安慰自己拌滋,他們只是感情好朴沿,可當我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著败砂,像睡著了一般赌渣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上昌犹,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天坚芜,我揣著相機與錄音,去河邊找鬼斜姥。 笑死鸿竖,一個胖子當著我的面吹牛,可吹牛的內容都是我干的疾渴。 我是一名探鬼主播千贯,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼搞坝!你這毒婦竟也來了?” 一聲冷哼從身側響起魁袜,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤桩撮,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后峰弹,有當地人在樹林里發(fā)現(xiàn)了一具尸體店量,經...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年鞠呈,在試婚紗的時候發(fā)現(xiàn)自己被綠了融师。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡蚁吝,死狀恐怖旱爆,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情窘茁,我是刑警寧澤怀伦,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站山林,受9級特大地震影響房待,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一桑孩、第九天 我趴在偏房一處隱蔽的房頂上張望拜鹤。 院中可真熱鬧,春花似錦流椒、人聲如沸敏簿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽极谊。三九已至,卻和暖如春安岂,著一層夾襖步出監(jiān)牢的瞬間轻猖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工域那, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留咙边,地道東北人。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓次员,卻偏偏與公主長得像败许,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子淑蔚,可洞房花燭夜當晚...
    茶點故事閱讀 45,630評論 2 359

推薦閱讀更多精彩內容