網上有不少版本的ffmpeg編譯指南,大部分不可用,不是連接失效,就是不符合個人應用需求。php
本身整理一份留做備份:html
一、 下載編譯環境MinGW+Msys,地址是:http://sourceforge.net/projects/mingwbundle/files/,在這個頁面上點擊Download下載那個zip文件。下載完成後,直接安裝,不建議修改任何默認路徑(如今的電腦,C盤空間都大的很)。ajax
MinGW和Msys之前都是分別安裝的,如今能夠一次性一塊兒安裝。能夠在線安裝,也能夠離線安裝。推薦離線安裝,上面這個連接是用來下載離線安裝包的。ide
二、在http://yasm.tortall.net/Download.html上下載yasm的exe文件(須要根據本身的操做系統選擇是Win32.exe還Win64.exe),下載完後重命名爲yasm.exe,放到MinGW安裝目錄的bin目錄下。工具
若是沒有這一步操做,在後面編譯ffmpeg的過程當中,可能會提示找不到yasm命令。ffmpeg裏面的彙編加速部分的代碼須要用到它,若是禁用匯編加速,會影響編譯出來的編解碼庫的運行效率。測試
三、下載ffmpeg,在http://ffmpeg.org/download.html能夠找到最新的版本,我下載的是http://ffmpeg.org/releases/ffmpeg-0.8.5.tar.gz。下載完成後解壓到某處待命。網站
四、經過桌面或開始菜單的快捷方式,進入MinGW的命令行,進入ffmpeg的解壓目錄。google
注意:切換盤符用「cd 盤符」命令,如「cd d: 」表示切換到d盤。編碼
五、使用configure命令配置ffmpeg的編譯參數。我配置的參數以下(僅供參考):spa
./configure --enable-shared --enable-gpl --enable-version3 --disable-doc --disable-ffmpeg --disable-ffplay --disable-ffprobe --disable-ffserver --enable-w32threads --disable-network --enable-memalign-hack --disable-everything --enable-decoder=h264 --enable-decoder=mpeg2video --enable-parser=h264 --enable-encoder=mpeg2video --disable-debug
經過./configure --help能夠查看幫助,上面的每個參數,均可以在幫助中找到說明;
因爲我僅僅須要ffmpeg用來完成MPEG2視頻的編碼和解碼,H.264視頻的解碼,所以我在上面的參數中,禁用了大量我用不着的內容。一方面加快編譯的速度,另一方面編譯出來的庫會比較小。
六、輸入make進行編譯。
七、編譯完成後,輸入make install進行部署。
若是沒有修改過msys的安裝路徑,那麼生成的文件會部署在「C:\msys\1.0\local」目錄下。
生成的動態庫在「msys目錄\local\bin」目錄下;
連接庫文件在「msys目錄\local\lib」目錄下的,*.dll.a爲動態庫須要的連接文件,*.a爲純靜態庫(不依賴dll);修改擴展名爲.lib就能夠用了。
須要的頭文件在「msys目錄\local\include」目錄下。
關於ffmpeg的編譯過程google一搜,一大堆,ffmpeg編譯真的有那麼難麼?在我編譯成功後回頭來看,網上的資料過多,反而使本身走了不少的彎路。即使有些樓主親自測試後編譯成功了,因爲受機器的環境、ffmpeg版本、以及我的操做的影響,致使在本身編譯的時候不成功。
有些帖子發表的時間已經好久了,其中提到的到的軟件如今也有了很大的更新,就如我後面提到的MinGW,較新的版本直接安裝就能夠了,無需手動更新一些文件。我寫這篇文章的時間是2011/08/30。
系統環境:
操做系統:Windows 7 家庭普通版 Service Pack 1
Ffmpeg版本:ffmpeg-0.6.3,ffmpeg-0.6
開發環境:VS2008
注:
1) win7下的用戶要特別注意了,以前我在參考:http://www.chinavideo.org/viewthread.php?tid=9129&extra=page%3D1&page=1
中的帖子編譯ffmpeg-0.6.3時,可以生成lib文件,但在調用這些lib庫時卻出現了莫名奇妙的問題,並且在我make install時也出現了permission deny的錯誤。這想問題應該出在,Msys和MinGW時沒有使用管理員權限安裝。
2) 關於ffmpeg的版本,我在編譯ffmpeg-0.6.3時,可以生成lib文件,但在編譯ffmpeg-0.6時,卻生成的是.dll.a和.def後綴的文件,關於這個問題,文章後面會有解決方法。
安裝過程和相關軟件的下載是參照這篇帖子:http://zhaostudy2.blog.163.com/blog/static/13535020520110179271153/
但仍有幾個重要的細節須要補充下:
1) Win7下的用戶在安裝MinGW時,要選擇「以管理員身份運行」,這樣會避免在編譯ffmpeg-0.6.3時,生成的lib文件不能用的問題。一樣的,在運行Msys時,也要選擇「以管理員身份運行」。
2) 樓主提供的在csdn上提供的ffmpeg0.6我在照他的配置後並不能生成動態庫(lib),在官方網站上下載的ffmpeg0.6仍是不能自動生成動態庫(lib),有多是自帶MakeFile的問題。在該文章的留言中,也有用戶反映了這個問題。
3) Source forge上面的那個連接頁面已經更改,「Tools」文件夾已經消失,還好樓主在csdn上有備份,不得不佩服樓主的先見之明。
以make後的ffmpeg0.6\libavcodec目錄下爲例,注意到在該目錄中有一個avcodec-52.def的文件,對於該文件,在VS中是能夠直接將def文件轉換成lib文件的!
關於如何轉換,直接參考:
http://blog.163.com/zhucongdzkd@126/blog/static/1399971932010814111127686/
裏面也提到關於「沒有找到mspdb80.dll,所以這個應用程序未能啓動。從新安裝應用程序可能會修復此問題。」的解決方案。
個人命令行參數以下圖所示:
生成的lib可用!問題解決!
爲防止前面引用的文章沒法訪問,我再將個人編譯過程整理以下:
1) MinGW下載地址:http://download.csdn.net/source/2988856
2) MinGW安裝:win7下選擇「以管理員身份運行」運行exe文件,後面步驟使用默認選項安裝便可
Ffmpeg0.6.3是能夠直接編譯生成動態連接庫及.lib文件的。
Ffmpeg0.6.3官方下載地址:http://ffmpeg.org/releases/ffmpeg-0.6.3.tar.bz2
「以管理員身份運行」運行MinGW32\MSYS\msys.bat文件
執行如下3條命令,
漫長的等待...
make
執行完以上3條命令後在E:\ffmpeg0.6.3\libavcodec下就能夠找到avcodec-52.lib和avcodec-52.dll,其餘幾個lib開頭的文件夾下也有相應的.lib文件和.dll文件,至此,ffmpeg編譯動態連接庫成功完成。
Ffmpeg0.6官方下載地址:http://ffmpeg.org/releases/ffmpeg-0.6.tar.bz2
前面步驟與編譯ffmpeg0.6時一致,但只生成了dll文件和def文件,沒有生成lib文件。
後面就要使用VS2008中提供的lib.exe工具將def文件轉換成lib文件。
1) 在C:\Program Files\Microsoft Visual Studio 9.0\VC\bin下雙擊lib.exe文件。若彈出「沒有找到mspdb80.dll,所以這個應用程序未能啓動。從新安裝應用程序可能會修復此問題。」
將C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\mspdb80.dll複製到C:\Program Files\Microsoft Visual Studio 9.0\VC\bin下,再次雙擊lib.exe文件,lib.exe就能夠正常啓動了。
注意:爲避免從此使用VS遇到問題,在成功生成lib文件後,要將mspdb80.dll從C:\Program Files\Microsoft Visual Studio 9.0\VC\bin目錄下刪除。
2) 假設avcodec-52.def文件位於C:\test目錄下,執行以下命令:
lib /out:c:\test\avcodec.lib /machine:IX86 /def:C:\test\avcodec-52.def
便可生成lib文件
至此,全部問題圓滿解決
與個人解決方法很類似,但更加詳細,還提到了沒法生成.def文件時,修改config.mak文件的方法。http://blog.csdn.net/xiajia/article/details/6533182