FFmpeg在Windows系統下的編譯過程

來源:互聯網
上載者:User

由於FFMpeg是基於Linux開發的開源項目,原始碼和Windows下最常見的Visual Studio提供的C/C++編譯器不相容,因此它不能使用MSVC++編譯。要想使用FFMpeg,最先要解決的問題就是在Windows下配置一個類似Linux的編譯環境,將FFMpeg編譯為二進位庫以後,再利用其進行進一步開發。
  MSVC++並不嚴格的遵循C標準,所以整個編譯過程必須使用MSys+MinGW系統來完成。如果選擇編譯動態連結程式庫(dll),這些庫將和其他的動態連結程式庫一樣在使用上沒什麼差別,可以使用MSVC++來連結這些庫到自己的程式,只有這種情況下MSVC++是被支援的。
  FFmpeg在Windows系統下的編譯過程如下:

準備MSys+MinGW系統 
  1)安裝MSys
  到http://sourceforge.net/project/showfiles.php?group_id=2435下載檔案:
  bash-3.1-MSYS-1.0.11-snapshot.tar.bz2
  msysCORE-1.0.11-2007.01.19-1.tar.bz2
  (可能會有版本變化,以下同)
  解壓msysCORE-1.0.11-2007.01.19-1.tar.bz2,比如解壓到D:/msys(以下內容都使用該路徑描述)。
  解壓bash-3.1-MSYS-1.0.11-snapshot.tar.bz2,產生一個名為bash-3.1的目錄,在該目錄下有一個子目錄名為bin,其他的目錄不需要關心。複製bin目錄中的所有檔案到D:/msys/bin,提示是否要覆蓋sh.exe的時候,選擇是。
  到“D:/msys/postinstall”目錄下執行pi.bat,在出現的提示中輸入n斷行符號後,按任意鍵退出即可。
  2)安裝MinGW
  同樣是到http://sourceforge.net/project/showfiles.php?group_id=2435下載檔案:
  binutils-2.17.50-20060824-1.tar.gz
  gcc-core-3.4.5-20060117-1.tar.gz
  gcc-g++-3.4.5-20060117-1.tar.gz
  w32api-3.9.tar.gz
  mingw-runtime-3.12.tar.gz
  把它們全部解壓到D:/msys/mingw。
  3)修改“msys.bat”
  用文字編輯器開啟D:/msys/msys.bat,由於打算用MSVC++編譯器,所以需要有.lib檔案才能連結到FFmpeg的庫,這些.lib檔案可以使用微軟的工具鏈中lib命令產生。為此,機器上必須已經安裝了微軟的Visual Studio或是Visual C++。把下面一行加到msys.bat的最前面,把路徑替換成機器上vcvars32.bat實際存在的路徑,比如我的在“D:/Program Files/Microsoft Visual Studio .NET 2003/Vc7/bin”,於是就添加:
  call "D:/Program Files/Microsoft Visual Studio .NET 2003/Vc7/bin/vcvars32.bat"
  4)系統整合
  複製D:/msys/etc/fstab.sample為D:/msys/etc/fstab,用文字編輯器開啟D:/msys/etc/fstab編輯。(需要使用一個支援Unix換行風格的編輯器,比如Notepad++),把下面這行:
  d:/mingw /mingw
  改為:
  d:/msys/mingw /mingw
  完成以上步驟,MSys+MinGW系統就配置完成了。

用SVN方式擷取FFmpeg 
  由於FFmpeg的原始碼存放在SVN倉庫裡,所以必須使用命令列程式或是圖形介面程式來訪問。為了方便,我使用TortoiseSVN這個圖形介面程式,因為它和Windows資源管理員結合的非常好。
  首先到http://sourceforge.net/project/showfiles.php?group_id=138498下載TortoiseSVN並安裝,安裝結束後需要重新啟動才可以使用。如果希望使用中文版本,可以下載LanguagePack-version-win32-zh_CN.exe,這樣軟體就變成熟悉的中文介面了。
  由於TortoiseSVN完全整合到了Windows資源管理員中,所以我們只要開啟資源管理員,在希望存放代碼的目錄上右擊選擇“SVN檢出...”就可以啟動TortoiseSVN。我把FFmpeg原始碼儲存在“D:/ffmpeg”目錄下,所以右擊該目錄,選擇“SVN檢出...” ,然後在出現的對話方塊中填寫如下內容:

圖1

  點擊確定就會開始下載過程,TortoiseSVN會把最新版本的FFmpeg原始碼下載到本地目錄中,等待下載結束,就可以開始編譯過程。
  由於FFmpeg的維護人員較多,下載的版本難免會有錯誤,甚至於當前下載的版本根本就無法編譯,所以要經常更新。更新的方法很簡單,右擊FFmpeg所在的目錄,選擇“SVN更新”即可。

編譯 
  首先通過MSys安裝目錄下的msys.bat啟動MSys,這時會出現一個命令列視窗,它是一個運行著bash的rxvt程式,如:

圖2

  這是一個類似Linux的shell並且在Windows上運行,就像是在使用一個真正的Linux shell。不過使用這個shell時需要注意:
  →目錄名使用正斜杠來分割,而不是Windows所使用的反斜線(比如說要寫成"D:/ffmpeg"而不是"D:/ffmpeg")。
  →盤符(例如"C:/")可以從根目錄處訪問(像這樣"/C/")。
  →檔案名稱或目錄名中如果帶有空格,必須用雙引號括起(例如這樣"/C/Program Files",帶有雙引號)。
  下面切換到存放FFmpeg原始碼的目錄,方法是輸入:"cd /D/ffmpeg"。
  接下來要配置FFmpeg,選擇編譯時間包含的庫,對於如何加入對第三方庫的支援,請看後續描述,這裡先輸入:
  ./configure --enable-memalign-hack
  --enable-memalign-hack選項是FFmpeg在Windows上編譯成功所必須指定的,待配置完成後,將回到命令提示字元,看到所示的畫面:

圖3

  如果沒有錯誤的話,就可以"make"具有準系統的FFmpeg了,在提示符後輸入:"make"。
  編譯的過程將持續很長時間。如果一切正常,結束後將返回提示符,並有如下的輸出畫面:

圖4

  這時程式已經編譯好了,在存放FFmpeg原始碼的目錄下可以找到ffmpeg.exe這個檔案。
  之後,如果希望把FFmpeg安裝到系統中,可以執行安裝步驟:"make install",這將會複製所有產生的重要檔案到MSys的local檔案夾下。
  由於我只是調用FFmpeg,所以沒有安裝,而是把ffmpeg.exe複製到需要的目錄下,作為一個模組使用。
  如果希望使用FFmpeg包含的libavcodec庫開發多媒體檔案處理常式,還需要編譯libavcodec的dll動態連結程式庫,編譯過程和上述過程稍有差別,如下所述:
  首先切換到FFmpeg的原始碼目錄,在開始編譯前先使用"make distclean"清理上一次留下的中間檔案,然後向configure指令碼多傳遞兩個參數:
  ./configure --enable-shared --disable-static --enable-memalign-hack
  最後執行"make"命令就可以了。
  這種編譯方式能夠得到供MSVC++使用的檔案,從而使用MSVC++進行進一步開發。

連結 
  在FFmpeg目錄下有三個子目錄名字分別為:libavutil、libavcodec和libavformat,如果在前述步驟中成功產生了動態連結程式庫,那麼在這三個目錄下都有一個SLIBNAME_WITH_MAJOR.lib這樣的檔案,例如我產生的是avcodec-51.lib、avformat-51.lib 和 avutil-49.lib,MSVC++可以從這些檔案中知道dll的匯出函數。
  現在通過包含FFmpeg的標頭檔,和使用上述三個lib檔案進行連結,就能夠編寫具備FFmpeg功能的應用程式了。

加入對第三方庫的支援 
  我以加入對mp3lame的支援為例,說明加入第三方庫的方法。
  首先需要下載mp3lame,這裡有兩個方案可以選擇:
  →到http://sourceforge.net/project/showfiles.php?group_id=290下載lame-3.97.tar.gz,使用以下命令編譯並安裝到MinGW的庫中:
  ./configure --prefix=/static --disable-shared --enable-static
  make
  make install
  或者將mp3lame編譯為動態連結程式庫:
  ./configure --prefix=/shared
  make
  make install
  →到http://oss.netfarm.it/mplayer-win32.php下載已經編譯的mp3lame庫,解壓後複製到“D:/msys/mingw”檔案夾下。
  接下來和前述步驟類似,切換到存放FFmpeg原始碼的目錄,在傳遞配置參數時要加入“--enable-libmp3lame” ,即使用以下命令配置:
  ./configure --enable-static --enable-shared --enable-memalign-hack --enable-libmp3lame
  配置後顯示的資訊如:

圖5

  可以看到這時libmp3lame已經為enabled,下面只要使用"make"命令編譯就可以了。
  最終我的FFmpeg配置為:
--enable-gpl --enable-pp --enable-swscaler --enable-pthreads --enable-liba52 --enable-avisynth --enable-libdts --enable-libfaac --enable-libfaad --enable-libgsm --enable-libmp3lame --enable-libnut --enable-libogg --enable-libtheora --enable-libvorbis --enable-x264 --enable-xvid --enable-amr_nb --enable-amr_wb --cpu=i686 --enable-memalign-hack --extra-ldflags=-static
===============華麗的分隔線=========
本文參考了http://www.aurora-x.net/wiki/CompileFFmpegWindows和FFmpeg工程組的有關內容,並針對已經過時的部分稍加修改,感謝網路上無私奉獻的朋友們。星塵☆回憶tag:blogger.com,1999:blog-399668078016494547.post-35850969380399542382007-05-21T22:08:00.000+08:002007-05-21T23:33:28.932+08:00為了寫畢業論文,我不得不把繁瑣至極的FFmpeg編譯過程又重複了一遍。累啊!

 

另外一篇文章:

1、下載
SVN 用戶端 TortoiseSVN
http://nchc.dl.sourceforge.net/sourceforge/tortoisesvn/TortoiseSVN-1.4.8.12137-win32-svn-1.4.6.msi

MinGW + MSYS
http://sourceforge.net/project/showfiles.php?group_id=2435
MinGW-5.1.3.exe (安裝時,根據選項會自動下載相關編譯器等)
MSYS-1.0.11-20071204.tar.bz2 (解壓bin裡面的檔案,覆蓋到安裝好的MSYS相應目錄)
bash-3.1-MSYS-1.0.11-1.tar.bz2 (解壓bin裡面的檔案,覆蓋到安裝好的MSYS相應目錄)
coreutils-5.97-MSYS-1.0.11-snapshot.tar.bz2 (需要bin裡面的pr.exe,拷貝到MSYS相應目錄,configure時候會用到這個工具)

http://gd.tuwien.ac.at/gnu/mingw/?fisel=0-9,a-z,A-Z
MSYS-1.0.11-2004.04.30-1.exe (MSYS安裝程式)

2、安裝
安裝 MinGW-5.1.3.exe
安裝 MSYS-1.0.11-2004.04.30-1.exe
配置 MSYS 的 etc 下的 fstab,指定 MinGW 的位置

3、擷取 FFmpeg 源碼
用 TortoiseSVN 將 FFmpeg 源碼 checkout 到本地
svn://svn.mplayerhq.hu/ffmpeg/trunk

4、編譯
./configure ....................................(各種參數)
make
make install

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.