Windows系統使用minGW+msys 編譯ffmpeg 0.5的全過程詳述
前言:
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實際路徑修改以上路徑。在重複步驟十一。
先寫到這裡,在以後的應用實踐中不斷補充。
相關文章
- 【FFmpeg】Windows下FFmpeg編譯Windows編譯
- 尤拉系統初體驗與編譯安裝FFmpeg的過程記錄編譯
- FFmpeg開發筆記全目錄(FFmpeg開發實戰詳解,含直播系統的搭建過程)筆記
- 【FFmpeg】Windows下64位ffmpeg編譯Windows編譯
- C語言編譯全過程C語言編譯
- Hive SQL 編譯過程詳解HiveSQL編譯
- 編譯、連結學習筆記(一)簡述編譯連結過程編譯筆記
- FFmpeg開發筆記(七)尤拉系統編譯安裝FFmpeg筆記編譯
- [轉]:xmake編譯配置過程詳解編譯
- 詳解Linux 程式編譯過程Linux編譯
- C/C++編譯過程詳解C++編譯
- 編譯器的編譯基本過程編譯
- Hive SQL的底層編譯過程詳解HiveSQL編譯
- Linux系統下自行編譯安裝MySQL及基礎配置全過程解析Linux編譯MySql
- 編譯過程編譯
- 交叉編譯-Mac環境使用NDK編譯FFmpeg編譯Mac
- gcc 從語言編譯全過程 預處理---->編譯---->彙編----->連結GC編譯
- FFmpeg編譯Android使用的so庫編譯Android
- 編譯原理入門篇|一篇文章理解編譯全過程編譯原理
- MDK編譯過程及檔案型別全解編譯型別
- cesium原始碼編譯除錯及呼叫全過程原始碼編譯除錯
- Javac編譯過程Java編譯
- 編譯核心過程編譯
- 編譯器的工作過程編譯
- EVC編譯TCPMP的過程編譯TCP
- FFmpeg系列(一)-Mac環境下使用NDK編譯FFmpegMac編譯
- 編譯連結過程編譯
- 編譯過程簡介編譯
- C++ 編譯過程C++編譯
- JavaScript的預編譯過程分析JavaScript編譯
- 編譯C++ 程式的過程編譯C++
- mac上編譯FFmpegMac編譯
- 安裝編譯ffmpeg編譯
- 全棧交叉編譯X86完成過程經驗分享全棧編譯
- Make編譯之編譯32bit ffmpeg編譯
- ios底層 編譯過程iOS編譯
- .NET 程式碼編譯過程編譯
- glade 編譯過程 (轉)編譯