windows下使用MinGW+msys编译ffmpeg
本文參考了網(wǎng)絡上的不少文章,但由于版本環(huán)境的問題參考文章并不能直接指導編譯,本文吸收多方經(jīng)驗,并在自己多次編譯實驗的基礎上寫成,歡迎轉(zhuǎn)載,請注名出處。
??? FFmpeg是在Linux平臺下開發(fā)的,但它同樣可以在其它操作系統(tǒng)環(huán)境中編譯運行,本文介紹的就是在windows下編譯FFmpeg。
一 編譯準備
??? 您最好新建一個目錄專門用來保存以下下載的文件。
1 下載 MinGW 和 MSYS
??? MinGW(Minimalist GNU on Windows):一個可自由使用和自由發(fā)布的Windows特定頭文件和使用GNU工具集導入庫的集合,允許你生成本地的Windows程序而不需要第三方C運行時庫。
??? 到:http://sourceforge.net/projects/mingw/?去下載即可?
??? A 點擊“DownLoad mingw-get-inst-...exe”
??? B 切換到頁面:download? Check your browser's security bar, or try a direct link, or try another mirror.
??? C 點擊“direct link”下載類似:mingw-get-inst-20111118.exe 的文件
??? 提示:msys此處就不用再下載了,mingw-get-inst-20111118.exe 中已經(jīng)包含了msys1.0,后面安裝的時候就可以看到該選項。
2 下載 yasm(匯編編譯器)
??? ffmpeg編譯的時候里面的匯編代碼需要yasm.exe
??? 去官網(wǎng):http://yasm.tortall.net/Download.html?下載
??? 在Latest Release欄,直接下載:Win32 .exe (for general use on 32-bit Windows)?
??? 文件名類似為:yasm-1.2.0-win32.exe
3 下載 ffmpeg
??? ffmpeg可以到?http://www.ffmpeg.org/releases/?下載
??? 選擇的一個最新版本下載即可,如:ffmpeg-0.8.6.tar.gz?
??? 文件名類似為:ffmpeg-0.8.6.tar.gz
??? 當然你也使用網(wǎng)上介紹的使用SVN直接下載源代碼的方法。??
??? svn://svn.mplayerhq.hu/ffmpeg/trunk
4 下載 mp3lame(支持mp3,可選項)
??? 為了讓編譯出來的ffmpeg支持對mp3格式的編解碼,您需要先下載lame。
??? 到:http://sourceforge.net/projects/lame/files/?下載?
??? 文件名類似為:lame-3.99.2.tar.gz 的包。
5 下載 x264(支持x264,可選項)
??? 為了讓編譯出來的ffmpeg支持對x264格式的編解碼,您需要先下載x264。
??? 到:http://www.videolan.org/developers/x264.html下載?
??? 文件名類似為:last_x264.tar.bz2 的包。
6 下載 Xvid(支持Xvid,可選項)
??? 為了讓編譯出來的ffmpeg支持對Xvid格式的編解碼,您需要先下載Xvid。
??? 到:http://www.xvid.org/?下載?
??? 文件名類似為:xvidcore-1.3.2.tar.gz 的包。
7 下載 faad2(支持faad,可選項)
??? 到:http://www.audiocoding.com/downloads.html?下載:Version 2.7 bootstrapped TAR.GZ Package
??? 文件名類似為:faad2-2.7.tar.gz 的包。
8 下載 faac(支持faac,可選項)
??? 到:http://www.audiocoding.com/downloads.html?下載:Version 1.28 bootstrapped TAR.GZ Package
??? 文件名類似為:faac-1.28.tar.gz 的包。
9 下載 aacenc(支持aac,可選項)
??? 到:http://sourceforge.net/projects/opencore-amr/files/?下載:vo-aacenc
??? 文件名類似為:vo-aacenc-0.1.1.tar.gz 的包。
10 下載 amr-nb與amr-wb (早期ffmpeg支持3gp,可選項)
??? 到:http://www.penguin.cz/%7Eutx/amr?下載:amrnb-7.0.0.2.tar.bz2與amrwb-7.0.0.4.tar.bz2
??? 文件名類似為:amrnb-7.0.0.2.tar.tar 與amrwb-7.0.0.4.tar.tar 的包。
11 下載 opencore-amr與vo-amrwbenc (支持3gp,可選項)
??? 到:http://sourceforge.net/projects/opencore-amr/files/?下載:opencore-amr 與 vo-amrwbenc
??? 文件名類似為:opencore-amr-0.1.2.tar.gz 與vo-amrwbenc-0.1.1.tar.gz 的包。
12 下載 SDL(支持SDL,可選項)
??? SDL下載可以到:http://www.libsdl.org/download-1.2.php
??? 在Source Code欄選擇類似:SDL-1.2.14.tar.gz - GPG signed 進行下載,
??? 文件名類似為:SDL-1.2.14.tar.tar,此文件需要編譯才能生成lib庫。
??? 也可以直接下載 SDL-devel-1.2.14-mingw32.tar.gz (Mingw32),文件名類似為:SDL-devel-1.2.14-mingw32.tar.tar,此文件帶有編譯好的lib,在編譯ffmpeg時可以直接使用。
13 下載 pthreadGC2.dll
??? pthreadgc2.dll是功能強大的處理數(shù)字化影視作品編輯軟件premiere6運行所需的一個DLL文件。這是一個無威脅文件。屬于Open Source Software community project的文件。
??? 直接去baidu.com三搜索下載就可以了。
二 編譯步驟
1 安裝 mingw 和 msys
??? 執(zhí)行下載文件:mingw-get-inst-20111118.exe,
??? 在第3步選擇“Download latest repository catalogues”
??? 選擇安裝路徑:C:\MinGW(我直接采用默認路徑,未做修改)
??? 在“Select Components”步驟中選擇:
????? √? C Compiler (默認且一定選擇)
????? √? C++ Compiler
????? √? MSYS Basic System(選擇此項將會安裝msys,msys則不需要另外安裝)
????? √? MinGW Developer ToolKit
??? 等待安裝完成!(需要等待一定的時間,因為安裝過程需要下載文件,可想而知,網(wǎng)速越快,安裝越快)
??? 安裝完成后,在C:\MinGW目錄下可以看到 msys 文件夾,msys也已經(jīng)安裝。
2 配置 msys.bat 批處理文件
??? 為了方便VS200X以及VS2010調(diào)用ffmpeg的動態(tài)庫,可以通過配置讓ffmpeg編譯時產(chǎn)生windows下調(diào)用dll對應的lib,當然,如果你沒有這個需要,那么就可以省略以下處理,直接進入步驟3。
??? 進入:C:\MinGW\msys\1.0\文件夾,使用UltraEdit打開msys.bat文件,在文件的最最前面加入如下一行:
??? call "D:\Program Files\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat"
??? 添加后效果如下:
??????call "D:\Program Files\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat"
???????? @echo off
???????? rem Copyright (C):? 2001, 2002, 2003, 2004, 2005? Earnie Boyd
???????? rem???mailto:earnie@users.sf.net
???????? rem This file is part of Minimal SYStem
???????? rem???http://www.mingw.org/msys.shtml
???????? rem
???????? rem File:???? msys.bat
???????? rem Revision:???? 2.4
??????? ?rem Revision Date:? December 8th, 2005
??????? ?rem ember to set the "Start in:" field of the shortcut.
??????? ?rem A value similar to C:\msys\1.0\bin is what the "Start in:" field needs
???????? rem to represent.
??? 其中“D:\Program Files\Microsoft Visual Studio 10.0”為你機器上安裝VS200X或VS2010的目錄,我的電腦安裝的是VS2010,并且安裝在了D盤。文件修改后保存即可。
3 系統(tǒng)整合
??? 使用UltraEdit修改C:\MinGW\msys\1.0\etc目下的fstab文件,如果不存在fstab,請復制一份fstab.sample,然后改名為:fstab,再修改其內(nèi)容為:C:/MinGW /mingw,也即為MinGW的安裝路徑。
4 配置 yasm
??? 為了減少配置環(huán)境變量的麻煩,本處直接把 yasm-1.1.0-win32.exe 文件名修改成:yasm.exe,并放到系統(tǒng)目錄下:C:\WINDOWS\system32。
5 編譯 mp3lame(可選項)
??? lame-3.99.2.tar.gz 接壓到:D:\ffmpeg\ 目錄下,雙擊“C:\MinGW\msys\1.0\msys.bat”,啟動“MinGW32”,切換到lame目錄:D:\ffmpeg\lame-3.99.2
??? $ cd /d
??? $ cd ffmpeg
??? $ cd lame-3.99.2
??? 再執(zhí)行以下命令:
??? $./configure --disable-shared (首選)
或:?$./configure --disable-static --enable-shared
??? $ make
??? $ make install
??? 編譯結(jié)果在:C:\MinGW\msys\1.0\local 目錄下
6 編譯 x264(可選項)
??? last_x264.tar.bz2 接壓到:D:\ffmpeg\ 目錄下,雙擊“C:\MinGW\msys\1.0\msys.bat”,啟動“MinGW32”,切換到x264目錄:D:\ffmpeg\x264-20111124-2245
??? $ cd /d
??? $ cd ffmpeg
??? $ cd x264-20111124-2245
??? 再執(zhí)行以下命令:
??? $./configure --enable-shared --disable-asm --enable-pthreads
??? $ make
??? $ make install
??? 編譯結(jié)果在:C:\MinGW\msys\1.0\local 目錄下
?
??? PS:如果沒有--enable-pthreads,則線程庫編譯報錯,如下
CC libavutil/atomic.o libavutil/atomic.c:101:2: Fehler: #error "Threading is enabled, but there is no implementation of atomic operations available" common.mak:48: recipe for target 'libavutil/atomic.o' failed make: *** [libavutil/atomic.o] Error 1???? 參考:http://avcodec.org/trac/ffmpeg/ticket/2363
7 編譯 Xvid(可選項)
??? xvidcore-1.3.2.tar.gz 接壓到:D:\ffmpeg\ 目錄下,雙擊“C:\MinGW\msys\1.0\msys.bat”,啟動“MinGW32”,切換到xvidcore目錄:D:\ffmpeg\xvidcore\build\generic
??? $ cd /d
??? $ cd ffmpeg
??? $ cd xvidcore/build/generic
??? 再執(zhí)行以下命令:
??? $./configure --prefix=C:/MinGW/msys/1.0/local
??? $ make
??? $ make install
??? 編譯結(jié)果在:C:\MinGW\msys\1.0\local 目錄下。
??? 需要注意的就是:此處編譯加上了路徑
??? 如果make時出現(xiàn):cc1.exe: error: unrecognized command line option '-mno-cygwin' 錯誤,請在./configure后make之前修改xvidcore\build\generic里的 platform.inc文件,直接刪除里面的“-mno-cygwin”。?
??? 具體可以參考:http://ffmpeg.zeranoe.com/forum/viewtopic.php?f=5&t=111里2樓的回答,如果按他說的:I recommend re running ./bootstrap.sh after you do this.,我發(fā)現(xiàn)不太行,一運行bootstrap.sh后,platform.inc文件會被還原,并且./configure時也會還原該文件,所以我選擇在./configure后make前修改,可以編譯通過,目前沒檢驗Xvid是否可用。
8 編譯 faad2(可選項)
??? faad2-2.7.tar.gz 接壓到:D:\ffmpeg\ 目錄下,雙擊“C:\MinGW\msys\1.0\msys.bat”,啟動“MinGW32”,已經(jīng)啟動的話就不用再重新啟動了。切換到faac2目錄:D:\ffmpeg\faad2-2.7
??? $ cd /d
??? $ cd ffmpeg
??? $ cd faad2-2.7
??? 再執(zhí)行以下命令:
??? $./bootstrap
??? $./configure --disable-static --enable-shared
??? $ make
??? $ make install
??? 編譯結(jié)果在:C:\MinGW\msys\1.0\local 目錄下
9 編譯faac(可選項)
??? faac-1.28.tar.gz 接壓到:D:\ffmpeg\ 目錄下,雙擊“C:\MinGW\msys\1.0\msys.bat”,啟動“MinGW32”,已經(jīng)啟動的話就不用再重新啟動了。切換到faac2目錄:D:\ffmpeg\faac-1.28
??? $ cd /d
??? $ cd ffmpeg
??? $ cd faac-1.28
??? 再執(zhí)行以下命令:
??? $./bootstrap
??? $./configure --disable-static --enable-shared
??? $ make
??? $ make install
??? 編譯結(jié)果在:C:\MinGW\msys\1.0\local 目錄下
10 編譯vo-aacenc (可選項)
??? vo-aacenc-0.1.1.tar.gz 接壓到:D:\ffmpeg\ 目錄下,雙擊“C:\MinGW\msys\1.0\msys.bat”,啟動“MinGW32”,已經(jīng)啟動的話就不用再重新啟動了。切換到vo-aacenc目錄:D:\ffmpeg\vo-aacenc-0.1.1
??? $ cd /d
??? $ cd ffmpeg
??? $ cd vo-aacenc-0.1.1
??? 再執(zhí)行以下命令:
??? $./configure --disable-shared
??? $ make
??? $ make install
??? 編譯結(jié)果在:C:\MinGW\msys\1.0\local 目錄下
11 編譯amr-nb和amr-wb (早期ffmpeg版本,可選項)
??? 在編譯amrnb和amrwb之前還需要做點其它的準備工作:
??? A 先到網(wǎng)上搜索下載wget工具,解壓后放到C:\MinGW\bin目錄下,此工具是個網(wǎng)絡下載工具,用來在編譯時自動下載3gpp源碼。?
??? B 再先到http://downloads.sourceforge.net/gnuwin32/unzip-5.51-1-bin.zip?下載unzip-5.51-1-bin.zip后進行解壓,并把unzip-5.51-1-bin\bin中的unzip.exe拷貝到C:\MinGW\bin目錄下,此工具用來在編譯時自動解壓3gpp源碼。
??? amrnb-7.0.0.2.tar.tar 接壓到:D:\ffmpeg\ 目錄下,雙擊“C:\MinGW\msys\1.0\msys.bat”,啟動“MinGW32”,已經(jīng)啟動的話就不用再重新啟動了。切換到amrnb目錄:D:\ffmpeg\amrnb-7.0.0.2
??? $ cd /d
??? $ cd ffmpeg
??? $ cd amrnb-7.0.0.2
??? 再執(zhí)行以下命令:
??? $./configure --disable-static --enable-shared
??? $ make
??? $ make install
??? 編譯結(jié)果在:C:\MinGW\msys\1.0\local 目錄下
??? amrwb-7.0.0.4.tar.tar 接壓到:D:\ffmpeg\ 目錄下,雙擊“C:\MinGW\msys\1.0\msys.bat”,啟動“MinGW32”,已經(jīng)啟動的話就不用再重新啟動了。切換到amrwb目錄:D:\ffmpeg\amrwb-7.0.0.4
??? $ cd /d
??? $ cd ffmpeg
??? $ cd amrwb-7.0.0.4
??? 再執(zhí)行以下命令:
??? $./configure --disable-static --enable-shared
??? $ make
??? $ make install
??? 編譯結(jié)果在:C:\MinGW\msys\1.0\local 目錄下
12 編譯opencore-amr 和vo-amrwbenc (可選項)
??? opencore-amr-0.1.2.tar.gz 接壓到:D:\ffmpeg\ 目錄下,雙擊“C:\MinGW\msys\1.0\msys.bat”,啟動“MinGW32”,已經(jīng)啟動的話就不用再重新啟動了。
??? 如果是opencore-amr-0.1.1.tar.gz請注釋掉以下Makefile中的幾行
????文件: ./opencore-amr/amrnb/Makefile
????install: libopencore-amrnb.a $(SHLIB)
??? install -d $(DESTDIR)$(PREFIX)/lib
??? install -m 644 libopencore-amrnb.a $(DESTDIR)$(PREFIX)/lib
????# install $(SHLIB) $(DESTDIR)$(PREFIX)/lib
??? ifneq ($(shell uname), Darwin)
????# ln -sf $(SHLIB) $(DESTDIR)$(PREFIX)/lib/$(SONAME)
??? # ln -sf $(SONAME) $(DESTDIR)$(PREFIX)/lib/libopencore-amrnb.so
??? endif
??? 文件: ./opencore-amr/amrwb/Makefile
????install: libopencore-amrwb.a $(SHLIB)
??? install -d $(DESTDIR)$(PREFIX)/lib
??? install -m 644 libopencore-amrwb.a $(DESTDIR)$(PREFIX)/lib
????# install $(SHLIB) $(DESTDIR)$(PREFIX)/lib
??? ifneq ($(shell uname), Darwin)
????# ln -sf $(SHLIB) $(DESTDIR)$(PREFIX)/lib/$(SONAME)
??? # ln -sf $(SONAME) $(DESTDIR)$(PREFIX)/lib/libopencore-amrwb.so
??? endif
??? 切換到opencore-amr目錄:D:\ffmpeg\ opencore-amr-0.1.2
??? $ cd /d
??? $ cd ffmpeg
??? $ cd opencore-amr-0.1.2
??? 再執(zhí)行以下命令:
??? $./configure --disable-shared
??? $ make CC=gcc
??? $ make install
??? 編譯結(jié)果在:C:\MinGW\msys\1.0\local 目錄下
??? vo-amrwbenc-0.1.1.tar.gz 接壓到:D:\ffmpeg\ 目錄下,雙擊“C:\MinGW\msys\1.0\msys.bat”,啟動“MinGW32”,已經(jīng)啟動的話就不用再重新啟動了。切換到vo-amrwbenc目錄:D:\ffmpeg\ vo-amrwbenc-0.1.1
????$ cd /d
??? $ cd ffmpeg
??? $ cd vo-amrwbenc-0.1.1
??? 再執(zhí)行以下命令:
??? $./configure --disable-shared
??? $ make CC=gcc
??? $ make install
??? 編譯結(jié)果在:C:\MinGW\msys\1.0\local 目錄下
13 編譯SDL(可選項)
?? SDL-1.2.14.tar.tar 解壓到:D:\ffmpeg\ 目錄下, 雙擊“C:\MinGW\msys\1.0\msys.bat”,啟動“MinGW32”,切換到SDL目錄:D:\ffmpeg\SDL-1.2.14,切換方法如下:
??? $ cd /d
??? $ cd ffmpeg
??? $ cd SDL-1.2.14
??? 再執(zhí)行以下命令:
??? ./configure
??? make
??? make install
??? 編譯結(jié)果在:C:\MinGW\msys\1.0\local 目錄下?
????注意:如果是使用編譯好的SDL-devel-1.2.14-mingw32.tar.tar,那么就可以省掉上面的編譯工作,直接解壓SDL-devel-1.2.14-mingw32.tar.tar文件即可。自己編譯或直接使用編譯好的都需要做下面的修改和拷貝工作。
??? 使用UltraEdit打開C:\MinGW\msys\1.0\local\bin下的 sdl-config文件
??? 把 prefix=/usr 該成: prefix=c:/mingw
??? 其中:c:/mingw 為 mingw的安裝路徑,請根據(jù)你的安裝進行修改。為了編譯時msys能識別sdl并開啟 SDL support yes 進行編譯,請把C:\MinGW\msys\1.0\local編譯結(jié)果bin、include和lib中有關sdl的拷貝一份到C:\MinGW\的對應目錄中。
14 拷貝編譯結(jié)果
??? C:\MinGW\msys\1.0\local? 到 D:\ffmpeg\ffmpeg-0.8.6
??? bin拷貝到 bin中
??? include拷貝到 include中
??? lib拷貝到 lib中
??? 當然該拷貝過程你可以不做,只要在編譯的時候把路徑指到:C:\MinGW\msys\1.0\local里面。
15 編譯 ffmpeg
??? ffmpeg-0.8.6.tar.bz2 解壓到:D:\ffmpeg\ 目錄下,雙擊“C:\MinGW\msys\1.0\msys.bat”,啟動“MinGW32”,切換到ffmpeg目錄:D:\ffmpeg\ffmpeg-0.8.6,切換方法如下:
??? $ cd /d
??? $ cd ffmpeg
??? $ cd ffmpeg-0.8.6
??? 如果你的“MinGW32”沒有關閉,可以直接切換路徑到:D:\ffmpeg\ffmpeg-0.8.6。
??? 再執(zhí)行以下命令:
??? $ ./configure --enable-shared --disable-static --enable-ffplay
??? --enable-nonfree --enable-memalign-hack
??? --enable-libmp3lame
??? --enable-gpl--enable-libx264???
??? --enable-libxvid
??? --enable-faad --enable-libfaac
??? --enable-libvo-aacenc
??? --enable-version3 --enable-libopencore-amrnb???
??? --enable-libopencore-amrwb --enable-libvo-amrwbenc
??? --extra-cflags=-Id:/ffmpeg/ffmpeg-0.8.6/include
??? --extra-ldflags=-Ld:/ffmpeg/ffmpeg-0.8.6/lib
??? 請耐心等待一段時間,以上命令不能直接換行哦并且根據(jù)ffmpeg的版本不同有所變化,具體看./configure --help,你知道的。。。
??? $ make
??? 需要等待很長一段時間,等待編譯結(jié)束。
??? 為了匯總編譯結(jié)果,請繼續(xù)執(zhí)行以下命令:
??? $ make install
??? 等待完成,在C:\MinGW\msys\1.0\local中將會生成 bin、include、lib等文件夾,其中包含了ffmpeg.exe、ffplay.exe、ffprobe.exe、dll、lib和頭文件等。
16 運行測試
??? 直接雙擊運行”ffplay.exe”,如果提示沒有“pthreadGC2.dll”文件,你可以包“pthreadGC2.dll”直接拷貝到當前目錄,也可放到系統(tǒng)目錄C:\WINDOWS\system32中。
ffplay f:/xxx.mp4
參考:
http://blog.csdn.net/yangshu168/archive/2010/01/17/5204269.aspx
http://blog.csdn.net/himulakensin/article/details/6693457
http://blog.csdn.net/huangxiansheng1980/article/details/5712003
轉(zhuǎn)載于:https://www.cnblogs.com/zjoch/archive/2013/05/14/3077953.html
總結(jié)
以上是生活随笔為你收集整理的windows下使用MinGW+msys编译ffmpeg的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 递归算法和经典递归例子
- 下一篇: 如何把qq挂到云服务器,云服务器挂QQ软