天天看點

FFMPEG視音頻編解碼零基礎學習方法 0. 背景知識 1. ffmpeg程式的使用(ffmpeg.exe,ffplay.exe,ffprobe.exe) 2. ffmpeg庫的使用:視訊播放器 3. ffmpeg庫的使用:音頻播放器 4. ffmpeg庫的使用:一個真正的播放器——ffplay 5. ffmpeg庫的使用:編碼 6. ffmpeg源代碼分析 7. ffmpeg相關工程的學習 8.FFmpeg其它方面的功能

在CSDN上的這一段日子,接觸到了很多同行業的人,尤其是使用FFMPEG進行視音頻編解碼的人,有的已經是有多年經驗的“大神”,有的是剛開始學習的初學者。在和大家探讨的過程中,我忽然發現了一個問題:在“大神”和初學者之間好像有一個不可逾越的鴻溝。“大神”們水準高超,探讨着深奧的問題;而初學者們還停留在入門階段。究竟是什麼原因造成的這種“兩極分化”呢?最後,我發現了問題的關鍵:FFMPEG難度比較大,卻沒有一個循序漸進,由簡單到複雜的教程。現在網上的有關FFMPEG的教程多半難度比較大,不太适合剛接觸FFMPEG的人學習;而且很多的例子程式編譯通不過,極大地打消了學習的積極性。我自己在剛開始學習FFMPEG的時候也遇到了很大的困難。為了幫助更多的人快速成為“大神”,我想總結一個學習FFMPEG的方法,友善大家循序漸進的學習FFMPEG。

FFMPEG視音頻編解碼零基礎學習方法 0. 背景知識 1. ffmpeg程式的使用(ffmpeg.exe,ffplay.exe,ffprobe.exe) 2. ffmpeg庫的使用:視訊播放器 3. ffmpeg庫的使用:音頻播放器 4. ffmpeg庫的使用:一個真正的播放器——ffplay 5. ffmpeg庫的使用:編碼 6. ffmpeg源代碼分析 7. ffmpeg相關工程的學習 8.FFmpeg其它方面的功能

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

使用FFMPEG作為核心視訊播放器:

Mplayer,ffplay,射手播放器,暴風影音,KMPlayer,QQ影音...

使用FFMPEG作為核心的Directshow Filter:

ffdshow,lav filters...

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

ffmpeg,格式工廠...

事實上,FFMPEG的視音頻編解碼功能确實太強大了,幾乎囊括了現存所有的視音頻編碼标準,是以隻要做視音頻開發,幾乎離不開它。

本章主要介紹一下ffmpeg工程包含的三個exe的使用方法。

該網站中的FFMPEG分為3個版本:Static,Shared,Dev。

前兩個版本可以直接在指令行中使用,他們的差別在于:Static裡面隻有3個應用程式:ffmpeg.exe,ffplay.exe,ffprobe.exe,每個exe的體積都很大,相關的Dll已經被編譯到exe裡面去了。Shared裡面除了3個應用程式:ffmpeg.exe,ffplay.exe,ffprobe.exe之外,還有一些Dll,比如說avcodec-54.dll之類的。Shared裡面的exe體積很小,他們在運作的時候,到相應的Dll中調用功能。

Dev版本是用于開發的,裡面包含了庫檔案xxx.lib以及頭檔案xxx.h,這個版本不包含exe檔案。

打開系統指令行接面,切換到ffmpeg所在的目錄,就可以使用這3個應用程式了。

ffmpeg是用于轉碼的應用程式。

一個簡單的轉碼指令可以這樣寫:

将input.avi轉碼成output.ts,并設定視訊的碼率為640kbps

FFMPEG視音頻編解碼零基礎學習方法 0. 背景知識 1. ffmpeg程式的使用(ffmpeg.exe,ffplay.exe,ffprobe.exe) 2. ffmpeg庫的使用:視訊播放器 3. ffmpeg庫的使用:音頻播放器 4. ffmpeg庫的使用:一個真正的播放器——ffplay 5. ffmpeg庫的使用:編碼 6. ffmpeg源代碼分析 7. ffmpeg相關工程的學習 8.FFmpeg其它方面的功能

ffmpeg -i input.avi -b:v 640k output.ts  

ffplay是用于播放的應用程式。

一個簡單的播放指令可以這樣寫:

播放test.avi

FFMPEG視音頻編解碼零基礎學習方法 0. 背景知識 1. ffmpeg程式的使用(ffmpeg.exe,ffplay.exe,ffprobe.exe) 2. ffmpeg庫的使用:視訊播放器 3. ffmpeg庫的使用:音頻播放器 4. ffmpeg庫的使用:一個真正的播放器——ffplay 5. ffmpeg庫的使用:編碼 6. ffmpeg源代碼分析 7. ffmpeg相關工程的學習 8.FFmpeg其它方面的功能

ffplay test.avi  

ffprobe是用于檢視檔案格式的應用程式。

這個就不多介紹了。

本章開始介紹使用ffmpeg的庫進行開發。

1.下載下傳Dev版本,裡面包含了ffmpeg的xxx.h頭檔案以及xxx.lib庫檔案。

2.下載下傳Shared版本,裡面包含了ffmpeg的dll檔案。

3.将這兩部分檔案拷貝到VC工程下面就可以了

結構體中每個變量的分析,參考文章:

<a href="http://blog.csdn.net/leixiaohua1020/article/details/14214577" target="_blank">FFMPEG結構體分析:AVFrame</a>

<a href="http://blog.csdn.net/leixiaohua1020/article/details/14214705" target="_blank">FFMPEG結構體分析:AVFormatContext</a>

<a href="http://blog.csdn.net/leixiaohua1020/article/details/14214859" target="_blank">FFMPEG結構體分析:AVCodecContext</a>

<a href="http://blog.csdn.net/leixiaohua1020/article/details/14215369" target="_blank">FFMPEG結構體分析:AVIOContext</a>

<a href="http://blog.csdn.net/leixiaohua1020/article/details/14215833" target="_blank">FFMPEG結構體分析:AVCodec</a>

<a href="http://blog.csdn.net/leixiaohua1020/article/details/14215821" target="_blank">FFMPEG結構體分析:AVStream</a>

<a href="http://blog.csdn.net/leixiaohua1020/article/details/14215755" target="_blank">FFMPEG結構體分析:AVPacket</a>

注:如果想要檢視解碼後的資料(PCM資料),需要用到Audition。

上面那篇文章是用的類庫比較舊,新版類庫的的使用可以參考下面幾篇文章。

轉碼實際上是先解碼然後編碼。

通曉了ffmpeg庫的使用以後,可以看一下ffmpeg的源代碼。注意ffmpeg的源代碼隻有在linux下才能編譯,在windows下可以使用MinGW進行編譯。推薦使用Eclipse檢視ffmpeg的源代碼。

ffmpeg源代碼分析文章清單如下。

庫函數分析:

<a href="http://blog.csdn.net/leixiaohua1020/article/details/8661601" target="_blank">圖解FFMPEG打開媒體的函數avformat_open_input</a>

<a href="http://blog.csdn.net/leixiaohua1020/article/details/12677129" target="_blank">ffmpeg 源代碼簡單分析 : av_register_all()</a>

<a href="http://blog.csdn.net/leixiaohua1020/article/details/12677265" target="_blank">ffmpeg 源代碼簡單分析 : avcodec_register_all()</a>

<a href="http://blog.csdn.net/leixiaohua1020/article/details/12678577" target="_blank">ffmpeg 源代碼簡單分析 : av_read_frame()</a>

<a href="http://blog.csdn.net/leixiaohua1020/article/details/12679719" target="_blank">ffmpeg 源代碼簡單分析 : avcodec_decode_video2()</a>

<a href="http://blog.csdn.net/leixiaohua1020/article/details/11885813" target="_blank">FFMPEG源碼分析:avformat_open_input()(媒體打開函數)</a>

ffmpeg.exe源代碼分析:

<a href="http://blog.csdn.net/leixiaohua1020/article/details/11851579" target="_blank">ffmpeg源碼分析:transcode_init()函數</a>

<a href="http://blog.csdn.net/leixiaohua1020/article/details/11851533" target="_blank">ffmpeg源碼分析:transcode()函數</a>

學習完成ffmpeg,還可以了解一下基于ffmpeg的相關的多媒體開源工程,在這裡推薦以下幾個:

ffdshow是基于ffmpeg的解碼器類庫libavcodec的DirectShow Filter。廣泛安裝在PC上。

FFMPEG視音頻編解碼零基礎學習方法 0. 背景知識 1. ffmpeg程式的使用(ffmpeg.exe,ffplay.exe,ffprobe.exe) 2. ffmpeg庫的使用:視訊播放器 3. ffmpeg庫的使用:音頻播放器 4. ffmpeg庫的使用:一個真正的播放器——ffplay 5. ffmpeg庫的使用:編碼 6. ffmpeg源代碼分析 7. ffmpeg相關工程的學習 8.FFmpeg其它方面的功能

有關ffdshow的源代碼分析文章(更新中):

<a href="http://blog.csdn.net/leixiaohua1020/article/details/12013619" target="_blank">ffdshow 源代碼分析1 : 整體結構</a>

<a href="http://blog.csdn.net/leixiaohua1020/article/details/12981725" target="_blank">ffdshow 源代碼分析 2: 位圖覆寫濾鏡(對話框部分Dialog)</a>

<a href="http://blog.csdn.net/leixiaohua1020/article/details/13004051" target="_blank">ffdshow 源代碼分析 3: 位圖覆寫濾鏡(設定部分Settings)</a>

<a href="http://blog.csdn.net/leixiaohua1020/article/details/13006213" target="_blank">ffdshow 源代碼分析 4: 位圖覆寫濾鏡(濾鏡部分Filter)</a>

<a href="http://blog.csdn.net/leixiaohua1020/article/details/13660583" target="_blank">ffdshow 源代碼分析 5: 位圖覆寫濾鏡(總結)</a>

<a href="http://blog.csdn.net/leixiaohua1020/article/details/15493329" target="_blank">ffdshow 源代碼分析 6: 對解碼器的dll的封裝(libavcodec)</a>

<a href="http://blog.csdn.net/leixiaohua1020/article/details/15493521" target="_blank">ffdshow 源代碼分析 7: libavcodec視訊解碼器類(TvideoCodecLibavcodec)</a>

<a href="http://blog.csdn.net/leixiaohua1020/article/details/15493743" target="_blank">ffdshow 源代碼分析 8: 視訊解碼器類(TvideoCodecDec)</a>

<a href="http://blog.csdn.net/leixiaohua1020/article/details/15493961" target="_blank">ffdshow 源代碼分析 9: 編解碼器有關類的總結</a>

LAV Filter是基于ffmpeg的解碼器類庫libavcodec,以及解封裝器類庫libavformat的DirectShow Filter。廣泛安裝在PC上。

有關LAV Filter的源代碼分析文章:

<a href="http://blog.csdn.net/leixiaohua1020/article/details/12711379" target="_blank">LAV Filter 源代碼分析 1: 總體結構</a>

<a href="http://blog.csdn.net/leixiaohua1020/article/details/12711723" target="_blank">LAV Filter 源代碼分析 2: LAV Splitter</a>

<a href="http://blog.csdn.net/leixiaohua1020/article/details/13022201" target="_blank">LAV Filter 源代碼分析 3: LAV Video (1)</a>

<a href="http://blog.csdn.net/leixiaohua1020/article/details/13272409" target="_blank">LAV Filter 源代碼分析 4: LAV Video (2)</a>

Mplayer是Linux下使用最廣泛的播放器,也有Windows版本的。其中使用了ffmpeg。

FFMPEG視音頻編解碼零基礎學習方法 0. 背景知識 1. ffmpeg程式的使用(ffmpeg.exe,ffplay.exe,ffprobe.exe) 2. ffmpeg庫的使用:視訊播放器 3. ffmpeg庫的使用:音頻播放器 4. ffmpeg庫的使用:一個真正的播放器——ffplay 5. ffmpeg庫的使用:編碼 6. ffmpeg源代碼分析 7. ffmpeg相關工程的學習 8.FFmpeg其它方面的功能

有關Mplayer的源代碼分析文章:

<a href="http://blog.csdn.net/leixiaohua1020/article/details/11885509" target="_blank">MPlayer源代碼分析</a>

現在廣為使用很多點傳播放器都是建構于Media Player Classic - HC的基礎之上的。

FFMPEG視音頻編解碼零基礎學習方法 0. 背景知識 1. ffmpeg程式的使用(ffmpeg.exe,ffplay.exe,ffprobe.exe) 2. ffmpeg庫的使用:視訊播放器 3. ffmpeg庫的使用:音頻播放器 4. ffmpeg庫的使用:一個真正的播放器——ffplay 5. ffmpeg庫的使用:編碼 6. ffmpeg源代碼分析 7. ffmpeg相關工程的學習 8.FFmpeg其它方面的功能

有關Media Player Classic - HC的源代碼分析文章:

<a href="http://blog.csdn.net/leixiaohua1020/article/details/13280659" target="_blank">Media Player Classic - HC 源代碼分析 1:整體結構</a>

<a href="http://blog.csdn.net/leixiaohua1020/article/details/13290345" target="_blank">Media Player Classic - HC 源代碼分析 2:核心類 (CMainFrame)(1)</a>

<a href="http://blog.csdn.net/leixiaohua1020/article/details/13297291" target="_blank">Media Player Classic - HC 源代碼分析 3:核心類 (CMainFrame)(2)</a>

<a href="http://blog.csdn.net/leixiaohua1020/article/details/13298397" target="_blank">Media Player Classic - HC 源代碼分析 4:核心類 (CMainFrame)(3)</a>

<a href="http://blog.csdn.net/leixiaohua1020/article/details/13297555" target="_blank">Media Player Classic - HC 源代碼分析 5:關于對話框 (CAboutDlg)</a>

<a href="http://blog.csdn.net/leixiaohua1020/article/details/13297589" target="_blank">Media Player Classic - HC 源代碼分析 6:MediaInfo頁籤 (CPPageFileMediaInfo)</a>

<a href="http://blog.csdn.net/leixiaohua1020/article/details/13297621" target="_blank">Media Player Classic - HC 源代碼分析 7:詳細資訊頁籤(CPPageFileInfoDetails)</a>

from:http://blog.csdn.net/leixiaohua1020/article/details/15811977

XBMC是一個優秀的自由和開源的(GPL)媒體中心軟體。

FFMPEG視音頻編解碼零基礎學習方法 0. 背景知識 1. ffmpeg程式的使用(ffmpeg.exe,ffplay.exe,ffprobe.exe) 2. ffmpeg庫的使用:視訊播放器 3. ffmpeg庫的使用:音頻播放器 4. ffmpeg庫的使用:一個真正的播放器——ffplay 5. ffmpeg庫的使用:編碼 6. ffmpeg源代碼分析 7. ffmpeg相關工程的學習 8.FFmpeg其它方面的功能

有關XBMC源代碼分析文章:

<a href="http://blog.csdn.net/leixiaohua1020/article/details/17454977" target="_blank">XBMC源代碼分析 1:整體結構以及編譯方法</a>

<a href="http://blog.csdn.net/leixiaohua1020/article/details/17511993" target="_blank">XBMC源代碼分析 2:Addons(皮膚Skin)</a>

<a href="http://blog.csdn.net/leixiaohua1020/article/details/17512743" target="_blank">XBMC源代碼分析 3:核心部分(core)-綜述</a>

<a href="http://blog.csdn.net/leixiaohua1020/article/details/17512509" target="_blank">XBMC源代碼分析 4:視訊播放器(dvdplayer)-解碼器(以ffmpeg為例)</a>

<a href="http://blog.csdn.net/leixiaohua1020/article/details/17512633" target="_blank">XBMC源代碼簡析 5:視訊播放器(dvdplayer)-解複用器(以ffmpeg為例)</a>

<a href="http://blog.csdn.net/leixiaohua1020/article/details/17512653" target="_blank">XBMC源代碼分析 6:視訊播放器(dvdplayer)-檔案頭(以ffmpeg為例)</a>

<a href="http://blog.csdn.net/leixiaohua1020/article/details/17512667" target="_blank">XBMC源代碼分析 7:視訊播放器(dvdplayer)-輸入流(以libRTMP為例)</a>

在這裡介紹一下FFmpeg中AVFilter的使用。AVFilter可以給試飲品添加各種處理效果。有一個簡單的例子,是給視訊添加水印:

<a href="http://blog.csdn.net/leixiaohua1020/article/details/29368911" target="_blank">最簡單的基于FFmpeg的AVfilter例子(水印疊加)</a>

繼續閱讀