閱讀982 返回首頁    go 阿裏雲 go 技術社區[雲棲]


FFMPEG在windows平台編譯的詳細過程,包括環境安裝

下麵開始:
  由於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
  到https://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
  同樣是到https://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資源管理器結合的非常好。
  首先到https://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,這裏有兩個方案可以選擇:
  →到https://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
  →到https://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
===============華麗的分隔線=========
本文參考了https://www.aurora-x.net/wiki/CompileFFmpegWindowsFFmpeg工程組的有關內容,並針對已經過時的部分稍加修改,感謝網絡上無私奉獻的朋友們。星塵回憶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
https://nchc.dl.sourceforge.net/sourceforge/tortoisesvn/TortoiseSVN-1.4.8.12137-win32-svn-1.4.6.msi

MinGW + MSYS
https://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時候會用到這個工具)

https://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

最後更新:2017-04-03 16:48:46

  上一篇:go LLVM在警告方麵的改進 @ WWDC 2013
  下一篇:go HDU 2281 pell方程