請移步https://higoge.github.io/,全部下載資料在那個博客都能找到。謝謝。 php
--------------------------------------------------------------------html
Jeremiah最近簡單的研究了下FFmpeg的編譯,主要是用ffplay測試視頻文件以和VLC進行下比較。
linux
感謝下VLC研究羣的Turkeysy和趙躍華的幫助。git
2009.03.21補充:ffmpeg-0.5正式發佈,地址爲:[url]http://www.ffmpeg.org/releases/ffmpeg-0.5.tar.bz2[/url]。修改了第7步,能夠經過編譯。github
2009.03.31補充:ffmpeg-0.5的動態庫編譯。增長5.2步。感謝本日誌評論第8樓的deepocean網友的幫忙。bootstrap
(明天是哥哥的祭日,在這緬懷一下!)api
2009.04.18補充:加入libamr庫,支持amr格式解碼。參見第14步。bash
2009.07.13補充:加入libmp3lame庫,支持MP3編碼。參見第15步。網絡
2009.07.14補充:加入faac及faad支持。參見第16步。frontend
2009.07.28補充:設置Msys的字體及背景。參見第17步。
2009.08.03補充:加入x264支持。參見第18步。
2009.08.18補充:添加pr命令。參見第10.2步。
編譯環境要求:
Msys: 1.0.10
MinGW:5.1.4
make: 3.81
gcc: 4.3.2
w32api: 3.13
SDL: 1.2.1
MinGW-Runtime: 3.15
一步步的來吧:
1. Minimal SYStem (MSYS) 安裝
[url]http://downloads.sourceforge.net/mingw/MSYS-1.0.10.exe[/url]
安裝到c:/msys/(去掉1.0,由於我看着不爽,(*^__^*) 嘻嘻……),其餘的步驟默認。臨近最後會出現個dos窗口,最後一句爲:
Do you wish to continue with the post install? [yn ]
輸入n,結束安裝。
2. MSYS DTK (Developer Tool Kit) 安裝
[url]http://prdownloads.sourceforge.net/mingw/msysDTK-1.0.1.exe[/url]
安裝到C:/msys/,其餘默認。
3. 升級下MSYS
[url]http://downloads.sourceforge.net/mingw/msysCORE-1.0.11-2007.01.19-1.tar.bz2[/url]
解壓這個文件,將bin/mount.exe, msys-1.0.dll, ps.exe三個文件copy到c:/msys/bin下面覆蓋下。
4. 升級下MSYS的BASH
[url]http://prdownloads.sourceforge.net/mingw/bash-3.1-MSYS-1.0.11-snapshot.tar.bz2[/url]
解壓這個文件,將bin/bash.exe, sh.exe兩個文件copy到c:/msys/bin。
5. MinGW 安裝
[url]http://downloads.sourceforge.net/mingw/MinGW-5.1.4.exe?modtime=1209244789&big_mirror=1[/url]
安裝,選擇download and install,下兩步以後選擇Candidate,不要選Current。選擇MinGW base tools (autoselected), g++ compiler, MinGW make; 安裝路徑爲c:\mingw。等待下載完了安裝吧。O(∩_∩)O……
5.2. 還原binutils-2.16.91
不少朋友須要用ffmpeg的dll來作開發。編譯的時候是用./configure --enable-memalign-hack --disable-static --enable-shared。可是最終編譯出來make install或者將相關的dll拷貝獲得ffmepg同級目錄後,執行ffmpeg或者ffplay報錯:應用程序正常初始化失敗。
通過google了許多資料,發現是binutils的版本問題。chinavideo論壇上面有的朋友說是mingw的版本問題,使用MinGW-3.1.0-1.exe會解決。Jeremiah通過試驗,發現不大行,從報錯的結果來看,MinGW-3.1.0-1.exe沒有自帶binutils。仍是要本身安裝。而MinGW-5.1.4.exe的candidate選項會默認給咱們安裝binutils-2.18.50-20080109-2.tar.gz。而這個binutils會最終致使應用程序正常初始化失敗的錯誤。
Jeremiah和網友deepocean測試了n個binutils的版本,最後發現binutils-2.16.91-20050827-1.tar.gz是最適合的。其餘的,ms不行!
下載[url]http://gd.tuwien.ac.at/gnu/mingw/binutils-2.16.91-20050827-1.tar.gz[/url]
解壓到c:/mingw,覆蓋原來的。
6. 配置fstab
copy C:/msys/etc/fstab.sample 成 fstab,確保如下對應:
#Win32_Path Mount_Point
c:/mingw /mingw
原始環境就搭建好了。能夠啓動桌面上行的MSYS了。
7. 升級make
[url]http://www.esnips.com/nsdoc/90f17b99-d45a-420e-8cda-23544b64eb0d/?action=forceDL[/url]
下載make-3.81.90-msys.rar,解壓,複製make.exe到c:/msys/bin下,覆蓋原來的make。
MSYS中輸入make -v顯示的版本爲3.81。
8. 升級gcc
[url]http://ftp3.ie.freebsd.org/pub/sourceforge/t/td/tdm-gcc/gcc-4.3.2-tdm-1-core.zip[/url]
解壓到c:/mingw,覆蓋原來的。
MSYS中輸入gcc -v顯示的版本爲4.3.2。
9. 升級W32API
[url]http://downloads.sourceforge.net/mingw/w32api-3.13-mingw32-dev.tar.gz?modtime=1228514514&big_mirror=1[/url]
解壓到c:/mingw,覆蓋原來的。
10. 添加SDL
[url]http://www.libsdl.org/release/SDL-devel-1.2.11-mingw32.tar.gz[/url]
解壓該軟件包;
將lib下的全部文件複製到C:\mingw\lib;
將include下的全部文件複製到C:\mingw\include;
將bin下的i386-mingw32msvc-sdl-config複製到C:\mingw\bin,並重命名爲sdl-config;
將bin下的SDL.dll複製到C:\mingw\bin。
10.2 添加pr.exe
解壓,拷貝bin的pr.exe到c:/msys/bin下。
總體上的編譯環境就搭建好了。
11. 編譯FFmpeg
[url]http://ffmpeg.mplayerhq.hu/ffmpeg-checkout-snapshot.tar.bz2[/url]
(或者:[url]http://www.ffmpeg.org/releases/ffmpeg-0.5.tar.bz2[/url])
copy到c:/msys/home/your_name下面。
解壓:tar xjvf ffmpeg-checkout-snapshot.tar.bz2。
vi一個文件ffmpeg-conf.sh,內容爲:
SDL_CFLAGS=/mingw/include
SDL_LIBS=/mingw/lib
./configure --enable-ffplay --enable-memalign-hack
執行./ffmpeg-conf.sh。
執行make,應該不會有錯誤的。
執行ffplay filename就能夠播放了。
12. 寫在編譯完以後
Jeremiah只是對ffmpeg進行了簡單的編譯,若是須要其餘的功能仍是去google吧。
編譯完了應該會出三個可執行文件:ffmpeg.exe, ffplay.exe, ffserver.exe, 可是我編譯完了只有前兩個,沒有ffserver.exe。由於MinGW裏面少了關於ffserver用的網絡的相關的包。
參考[url]http://bbs.chinavideo.org/viewthread.php?tid=95[/url]。
單獨使用ffplay,須要將c:/mingw/bin/SDL.dll和ffplay.exe放到相同的目錄下。
Ffmpeg工程組的網站不錯[url]http://www.ffmpeg.com.cn[/url],它的論壇[url]http://bbs.chinavideo.org/index.php[/url]裏面應該有很多關於FFmpeg的東西。
本文全部下載的東西,在個人公共郵箱提供了下載,具體下載方式爲:
1). 登陸http://mail.qq.com
2). 用戶名:jeremiah_vlc
3). 密碼:發郵件給我(jeremiah.vlc@gmail.com),我會告知。
4). 在「個人文件夾」的「Jeremiah_VLC相關資源」有全部資料的超大附件鏈接。
13. Msys的編輯
之前很不喜歡這個系統,由於不能跟cmd或者其餘linux的命令行同樣複製粘貼,去網上查了一下,發現能夠的其實,只不過方式不同。
複製:選中一段文字,就將這段文字複製到剪貼板。
粘貼:shift+鼠標左鍵,就將剪貼板的內容粘貼到命令行了。
14. libamr庫加入
首先下載[url]http://gd.tuwien.ac.at/gnu/mingw/wget-1.9.1-mingwPORT.tar.bz2[/url],解壓wget.exe到/mingw/bin下。
下載http://downloads.sourceforge.net/gnuwin32/unzip-5.51-1-bin.zip,解壓bin/unzip.exe到/mingw/bin下。
下載兩個庫:
amrnb:[url]http://ftp.penguin.cz/pub/users/utx/amr/amrnb-7.0.0.2.tar.bz2[/url]
amrwb:[url]http://ftp.penguin.cz/pub/users/utx/amr/amrwb-7.0.0.3.tar.bz2[/url]
分別解壓到~下面。(~:/home/yourname)。
下載[url]http://www.3gpp.org/ftp/Specs/archive/26_series/26.104/26104-700.zip[/url],將這個zip包放到~/amrnb-7.0.0.2下面。
下載[url]http://www.3gpp.org/ftp/Specs/archive/26_series/26.204/26204-700.zip[/url],將這個zip包放到~/amrwb-7.0.0.3下面。
~/amrnb-7.0.0.2和~/amrwb-7.0.0.3下面分別執行:
./configure --disable-shared
make
make install
其中,--disable-shared將產生靜態庫,如須要動態庫,則不要加這個選項。
進入ffmpeg-0.5目錄,
保存如下腳本爲ffmpeg-conf02.sh
SDL_CFLAGS=/mingw/include
SDL_LIBS=/mingw/lib
./configure --enable-ffplay --enable-memalign-hack --enable-libamr-nb --enable-libamr-wb --enable-nonfree --extra-ldflags=-L/usr/local/lib --extra-cflags=-I/usr/local/include
執行如下腳本:
rm -rf config.*
sh ffmpeg-conf02.sh
make
其中rm -rf config.*是爲了確保config.h文件能被重寫。若是不刪除而是覆蓋的話,可能會有不能寫入覆蓋的狀況,因此,每次從新從configure開始的編譯的話,仍是執行下這個rm命令把configure產生的文件都幹掉。
這樣編譯出來的ffplay就能夠播放3gp文件了。(附件提供)
15. libmp3lame庫加入
首先到lame-3.97.tar.gz (不要最新的版本3.98.2,ms有些問題,說audio專碼的buffer不夠)
http://sourceforge.net/projects/lame/files/lame/lame-3.97.tar.gz/download
解壓到~下。
執行如下腳本:
./configure --disable-shared
make
make install
進入ffmpeg-0.5目錄,
保存如下腳本爲ffmpeg-conf03.sh
SDL_CFLAGS=/mingw/include
SDL_LIBS=/mingw/lib
./configure --enable-ffplay --enable-static --disable-shared --enable-memalign-h
ack --enable-libamr-nb --enable-libamr-wb --enable-libmp3lame --enable-nonfree -
-extra-ldflags=-L/usr/local/lib --extra-cflags=-I/usr/local/include
執行如下腳本:
rm -rf config.*
sh ffmpeg-conf03.sh
make
make後就可使用ffmpeg玩MP3的轉碼了
ffmpeg -i d:/video/01.avi -vcodec mpeg2video -acodec libmp3lame 01.mpg
16. libfaac及libfaad庫加入
下載faac及faad的源碼:
http://sourceforge.net/projects/faac/files/faac-src/faac-1.28.tar.bz2/download
http://sourceforge.net/projects/faac/files/faad2-src/faad2-2.7.tar.bz2/download
分別解壓到~下。
註釋掉faad2-2.7/frontend/main.c的第34行:
/*#define off_t __int64*/
分別執行:
./bootstrap
./configure --disable-shared --without-mp4v2
make
make install
進入ffmpeg-0.5目錄,
保存如下腳本爲ffmpeg-conf04.sh
SDL_CFLAGS=/mingw/include
SDL_LIBS=/mingw/lib
./configure --enable-ffplay --enable-static --disable-shared --enable-memalign-h
ack --enable-libamr-nb --enable-libamr-wb --enable-libmp3lame --enable-libfaac -
-enable-libfaad --enable-gpl --enable-nonfree --extra-ldflags=-L/usr/local/lib -
-extra-cflags=-I/usr/local/include
執行如下腳本:
rm -rf config.*
sh ffmpeg-conf04.sh
make
make後就ffmpeg就可使用faac及faad了。
ffmpeg -i d:/video/02.mp3 -acodec libfaac 01.aac
17. 修改Msys的字體及背景色
用文本編輯器打開C:/Msys/msys.bat,以下:
if "x%MINGW32BGCOLOR%" == "x" set MINGW32BGCOLOR=Black
if "x%MINGW32FGCOLOR%" == "x" set MINGW32FGCOLOR=Yellow
及
start rxvt -backspacekey -sl 2500 -fg %FGCOLOR% -bg %BGCOLOR% -sr -fn "Courier New-20" -tn msys -geometry 80x30 -e /bin/sh --login -i
其中上面的Black及Yellow都是顏色。下面的-fn後面跟"字體-大小",80x30爲每行80個字符,共顯示30行。這都是Jeremiah喜歡的設置。
18. x264編碼支持
下載x264源碼須要用git。
git clone git://git.videolan.org/x264.git
或者去http://www.videolan.org/developers/x264.html中,選You can browse the source on-line,點選最新的snapshot。
Jeremiah測試用的是http://git.videolan.org/?p=x264.git;a=snapshot;h=5d75a9bd5b942392c4ab64156a266eed64c0793f;sf=tgz
將源碼解壓到~下,執行
./configure --disable-asm --enable-shared
make
make install
進入ffmpeg-0.5目錄,
保存如下腳本爲ffmpeg-conf04.sh
#this is enable amr mp3 aac aad x264
SDL_CFLAGS=/mingw/include
SDL_LIBS=/mingw/lib
./configure \
--enable-ffplay \
--enable-static \
--disable-shared \
--enable-memalign-hack \
--enable-libamr-nb \
--enable-libamr-wb \
--enable-libmp3lame \
--enable-libfaac \
--enable-libfaad \
--enable-gpl \
--enable-nonfree \
--enable-libx264 \
--extra-ldflags=-L/usr/local/lib \
--extra-cflags=-I/usr/local/include
執行如下腳本:
rm -rf config.*
sh ffmpeg-conf05.sh
make
make成功後,使用x264,以下:
$ ffmpeg -i d:/01.avi -f psp -acodec libfaac -ab 94k -vcodec libx264 -cqp 28 -coder 1 -refs 3 -deblockalpha 1 -deblockbeta -1 -me_method umh -subq 9 -me_range 32 -trellis 2 -chromaoffset -2 -nr 0 -bf 2 -b_strategy 1 -bframebias 0 -directpred 3 -g 250 -i_qfactor 1.3 -b_qfactor 1.4 -flags2 +bpyramid+wpred+mixed_refs+8x8dct -er 2 -s 480x320 d:/01.mp4
參考網址:
[url]http://wiki.videolan.org/Win32CompileMSYS[/url]
[url]http://www.cnblogs.com/sunlin886/archive/2007/03/18/678863.html[/url]
[url]http://hi.baidu.com/yeyingxian/blog/item/a03576d966b2892910df9b28.html[/url]