ffmpeg編譯

網上有不少版本的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」目錄下。







1.寫在ffmpeg編譯前

關於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後綴的文件,關於這個問題,文章後面會有解決方法。

1.1 MinGW安裝以及ffmpeg0.6編譯lib

安裝過程和相關軟件的下載是參照這篇帖子: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上有備份,不得不佩服樓主的先見之明。

1.1.1 ffmpeg0.6編譯後不能生成lib文件的解決步驟:

以make後的ffmpeg0.6\libavcodec目錄下爲例,注意到在該目錄中有一個avcodec-52.def的文件,對於該文件,在VS中是能夠直接將def文件轉換成lib文件的!

關於如何轉換,直接參考:

http://blog.163.com/zhucongdzkd@126/blog/static/1399971932010814111127686/

裏面也提到關於「沒有找到mspdb80.dll,所以這個應用程序未能啓動。從新安裝應用程序可能會修復此問題。」的解決方案。

個人命令行參數以下圖所示:

生成的lib可用!問題解決!

2.最終的編譯文檔

爲防止前面引用的文章沒法訪問,我再將個人編譯過程整理以下:

2.1MinGW下載及安裝

1) MinGW下載地址:http://download.csdn.net/source/2988856

2) MinGW安裝:win7下選擇「以管理員身份運行」運行exe文件,後面步驟使用默認選項安裝便可

2.2下載及編譯ffmpeg0.6.3動態連接庫

Ffmpeg0.6.3是能夠直接編譯生成動態連接庫及.lib文件的。

Ffmpeg0.6.3官方下載地址:http://ffmpeg.org/releases/ffmpeg-0.6.3.tar.bz2

以管理員身份運行」運行MinGW32\MSYS\msys.bat文件

執行如下3條命令,

[plain]  view plain copy
  1. <span style="font-family:'Microsoft YaHei';font-size:13px;">cd /E/ffmpeg0.6.3  
  2. ./configure --enable-shared --disable-static --enable-memalign-hack   
  3. make</span>  

漫長的等待...


make


執行完以上3條命令後在E:\ffmpeg0.6.3\libavcodec下就能夠找到avcodec-52.lib和avcodec-52.dll,其餘幾個lib開頭的文件夾下也有相應的.lib文件和.dll文件,至此,ffmpeg編譯動態連接庫成功完成。

2.3下載及編譯ffmpeg0.6動態連接庫

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

相關文章
相關標籤/搜索