Windows系統使用minGW+msys 編譯ffmpeg 0.5的全過程詳述

LiuYinChina發表於2013-10-13

前言:

      FFmpeg 0.5已經發布快一年了。一直沒有在原有的軟體中使用。現在要在軟體中增加一些對流行格式的支援及修改原有的一些bug. 比如MKV編輯碼。原本希望將新版本中的新功能移植到老版本中,畢竟老版本在應用過程中修改了很多地方。但是經過研讀新版程式碼發現新版本的框架結構發生了很大的變化,如果不是編解碼專家移植是有很大難度的。所以就先整體編譯新版,再將舊版的修改之處移植過來,應該是個不錯的選擇。

      在網上找了很多相關文件,但是在編譯過程中還是遇到了一些問題。現將編譯過程寫下來,希望對研究FFmpeg 的新手有些幫助。專家級的高手就不必看了。呵呵。

 

一.環境配置
1.下載並安裝 MinGW-5.1.4.exe (http://jaist.dl.sourceforge.net/sourceforge/mingw/MinGW-5.1.4.exe),安裝時選中 g++, mingw make。建議安裝到c:/mingw.
2.下載並安裝 MSYS-1.0.11-rc-1.exe (http://jaist.dl.sourceforge.net/sourceforge/mingw/MSYS-1.0.11-rc-1.exe),安裝結束時會以命令列方式提示輸入MinGW的安裝路徑,輸入c:/MinGW, msys建議安裝到c:/msys, 預設是c:/msys-1.0, 可以手動改為c:/msys。
3.下載gcc-4.3.2-tdm-1-core.zip (http://ftp3.ie.freebsd.org/pub/sourceforge/t/td/tdm-gcc/gcc-4.3.2-tdm-1-core.zip),解壓後覆蓋到 c:/mingw 安裝目錄. minGW-5.1.4 預設安裝的版本是3.4.5.

 

二.下載 ffmpeg 0.5 (http://ffmpeg.mplayerhq.hu/releases/ffmpeg-0.5.tar.bz2)
1.解壓後拷貝到c:/msys/home/目錄下。 (C:/msys/home/ffmpeg-0.5)
2.用文字編輯器開啟原始碼目錄下的 configure (C:/msys/home/ffmpeg-0.5/configure) 檔案,搜尋兩處 pr 全部替換為 print。
3.執行c:/msys.bat,進入c:/msys/home/ffmpeg-0.5原始碼目錄,建立release目錄 (madir release) 和 debug 目錄 (mkdir debug) 目錄,視需求編譯 release 或 debug 版本:
4.進入c:/msys/home/ffmpeg-0.5/release 目錄下執行: ../configure --disable-static --enable-shared --enable-small --enable-memalign-hack --enable-gpl --extra-cflags=-I/local/include --extra-ldflags=-L/local/lib
5.或進入c:/msys/home/ffmpeg-0.5/debug 目錄下執行: ../configure --disable-static --enable-shared --enable-memalign-hack --enable-gpl --extra-cflags=-I/local/include --extra-ldflags=-L/local/lib --enable-debug=3 --disable-optimizations --disable-stripping
6.make
7.make install

 

注:引數解釋
a.--extra-ldflags=-L<prefix>/lib --extra-cflags=-I<prefix>/include

      如果你把庫安裝在了非gcc的預設尋找路徑,你必須向FFmpeg的configure指令碼傳遞這些路徑資訊。 
b.--enable-small

       optimize for size
c.--enable-nonfree
       Yes, FFmpeg recently changed the --enable-libfaac to require --enable-nonfree due to some inconsisent licensing
declarations in the faac source. You can also workaround this by not enabling AAC in the wizard. They have a
native AAC encoder in progress, but it is not ready and enabled yet.

 

三.支援x264 (--enable-libx264)
1.下載 x264 原始碼(http://www.imagemagick.org/download/delegates/ffmpeg/x264-1024283.tar.bz2) (x264-snapshot-20100115-2245.tar.bz2這個原始碼編譯不過,不知道為什麼,有時間仔細研究研究。)
2.解壓後拷貝到c:/msys/home/目錄下 (c:/msys/home/x264-1024283)
3.進入c:/msys/home/x264-1024283 目錄下執行: ./configure --prefix=/usr/local --enable-shared --disable-asm
4.make
5.make install

 

四.支援xvid (--enable-libxvid)
1.下載 xvid 原始碼(http://www.imagemagick.org/download/delegates/ffmpeg/xvidcore-1.2.2.tar.bz2)
2.解壓後拷貝到c:/msys/home/目錄下 (c:/msys/home/xvidcore)
3.進入c:/msys/home/xvidcore/build/generic 目錄下執行: ./configure --prefix=/usr/local --enable-shared
4.make
5.make install

 

五.支援MP3 (--enable-libmp3lame)
1.下載 MP3 原始碼(http://www.imagemagick.org/download/delegates/ffmpeg/lame-398-2.tar.gz)
2.解壓後拷貝到c:/msys/home/目錄下 (c:/msys/home/lame-398-2)
3.進入c:/msys/home/lame-398-2 目錄下執行: ./configure --prefix=/usr/local --enable-shared
4.make
5.make install

 

六.支援FAAC (--enable-libfaac)
1.下載 FAAC 原始碼(http://www.imagemagick.org/download/delegates/ffmpeg/faac-1.28.tar.bz2)
2.解壓後拷貝到c:/msys/home/目錄下 (c:/msys/home/faac-1.28)
3.進入c:/msys/home/faac-1.28 目錄下執行./bootstrap
4../configure --prefix=/usr/local --enable-shared --without-mp4v2

(FAAC 無需編入 mp4 容器支援,封入 mp4 容器的工作由 ffmpeg 負責)
5.make
6.make install

 

七.支援FAAD (--enable-libfaad)
1.下載 FAAD 原始碼(http://www.imagemagick.org/download/delegates/ffmpeg/faad2-2.7.tar.bz2)
2.解壓後拷貝到c:/msys/home/目錄下 (c:/msys/home/faad2-2.7)
3.進入c:/msys/home/faad2-2.7 目錄下執行 autoreconf -vif
注:編譯FAAD需要使用autoreconf, 下載msysDTK-1.0.1.exe 安裝到c:/msys.
4../configure --prefix=/usr/local --enable-shared --without-mp4v2
5.make
6.make install

 

八.支援gsm (--enable-libgsm)
1.下載 gsm 原始碼(http://www.imagemagick.org/download/delegates/ffmpeg/gsm-1.0.13.tar.gz)
2.解壓後拷貝到c:/msys/home/目錄下 (c:/msys/home/gsm-1.0-pl13)
3.進入c:/msys/home/gsm-1.0-pl13 目錄下執行: ./configure --prefix=/usr/local --enable-shared
4.make
注:make編譯出錯(make: *** [bin/toast] Error 1), 忽視這個錯誤,不影響。
5.cp c:/msys/home/gsm-1.0-pl13lib/libgsm.a  c:/msys/local/lib
6.cp c:/msys/home/gsm-1.0-pl13lib/inc/gsm.h  c:/msys/local/include

 

九.libamr-nb (--enable-libamr-nb)
1.下載 libamr-nb 原始碼(http://ftp.penguin.cz/pub/users/utx/amr/amrnb-7.0.0.2.tar.bz2)
2.解壓後拷貝到c:/msys/home/目錄下 (C:/msys/home/amrnb-7.0.0.2)
3.下載26104-700.zip (http://www.3gpp.org/ftp/Specs/archive/26_series/26.104/26104-700.zip), 將這個zip包放到c:/msys/home/amrnb-7.0.0.2 目錄下面
4.下載unzip-5.51-1-bin.zip (http://downloads.sourceforge.net/gnuwin32/unzip-5.51-1-bin.zip),解壓後將unzip.exe到/mingw/bin下。
5.進入c:/msys/home/amrnb-7.0.0.2 目錄下執行: ./configure --prefix=/usr/local --enable-shared
6.make
7.make install

 

十.libamr-wb (--enable-libamr-wb)
1.下載 libamr-wb 原始碼(http://ftp.penguin.cz/pub/users/utx/amr/amrwb-7.0.0.3.tar.bz2)
2.解壓後拷貝到c:/msys/home/目錄下 (C:/msys/home/amrwb-7.0.0.3)
3.下載26204-700.zip (http://www.3gpp.org/ftp/Specs/archive/26_series/26.204/26204-700.zip), 將這個zip包放到c:/msys/home/amrwb-7.0.0.3 目錄下面
4.下載unzip-5.51-1-bin.zip (http://downloads.sourceforge.net/gnuwin32/unzip-5.51-1-bin.zip),解壓後將unzip.exe到/mingw/bin下。(如果步驟9中做了這個工作,這裡就不用做了)
5.進入c:/msys/home/amrwb-7.0.0.3 目錄下執行: ./configure --prefix=/usr/local --enable-shared
6.make
7.make install

 

十一.最後編譯ffmpeg 0.5
1.進入c:/msys/home/ffmpeg-0.5/release
2. ../configure --disable-static --enable-shared --enable-small --enable-memalign-hack --enable-gpl --extra-cflags=-I/local/include --extra-ldflags=-L/local/lib --enable-libgsm --enable-libfaac --enable-libfaad --enable-libmp3lame --enable-nonfree --enable-libxvid --enable-libx264 --enable-libamr-nb --enable-libamr-wb
3.make
4.make install


十二. 編譯出lib 檔案

以上方式預設不能編譯出 .lib檔案。如果希望在vc++呼叫ffmpeg 庫,要用到相應的 .lib 檔案。可以用以下方式編譯。


1.在msys.bat開頭新增一句話:call "C:/Program Files/Microsoft Visual Studio .NET 2003/Vc7/bin/VCVARS32.BAT"

根據自己vc7實際路徑修改以上路徑。在重複步驟十一。

 

先寫到這裡,在以後的應用實踐中不斷補充。

相關文章