windows 下使用 MinGW + msys 編譯 ffmpeg

    本文參考了網絡上的不少文章,但由於版本環境的問題參考文章並不能直接指導編譯,本文吸收多方經驗,並在自己多次編譯實驗的基礎上寫成,歡迎轉載,請註名出處。
    FFmpeg是在Linux平臺下開發的,但它同樣可以在其它操作系統環境中編譯運行,本文介紹的就是在windows下編譯FFmpeg。
一 編譯準備
    您最好新建一個目錄專門用來保存以下下載的文件。
1 下載 MinGW 和 MSYS
    MinGW(Minimalist GNU on Windows):一個可自由使用和自由發佈的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 中已經包含了msys1.0,後面安裝的時候就可以看到該選項。
2 下載 yasm(彙編編譯器)
    ffmpeg編譯的時候裏面的彙編代碼需要yasm.exe
    去官網: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
    當然你也使用網上介紹的使用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是功能強大的處理數字化影視作品編輯軟件premiere6運行所需的一個DLL文件。這是一個無威脅文件。屬於Open Source Software community project的文件。
    直接去baidu.com三搜索下載就可以了。
二 編譯步驟
1 安裝 mingw 和 msys
    執行下載文件: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
    等待安裝完成!(需要等待一定的時間,因爲安裝過程需要下載文件,可想而知,網速越快,安裝越快)
    安裝完成後,在C:\MinGW目錄下可以看到 msys 文件夾,msys也已經安裝。
2 配置 msys.bat 批處理文件
    爲了方便VS200X以及VS2010調用ffmpeg的動態庫,可以通過配置讓ffmpeg編譯時產生windows下調用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:[email protected]
         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 系統整合
    使用UltraEdit修改C:\MinGW\msys\1.0\etc目下的fstab文件,如果不存在fstab,請複製一份fstab.sample,然後改名爲:fstab,再修改其內容爲:C:/MinGW /mingw,也即爲MinGW的安裝路徑。
4 配置 yasm
    爲了減少配置環境變量的麻煩,本處直接把 yasm-1.1.0-win32.exe 文件名修改成:yasm.exe,並放到系統目錄下: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
    再執行以下命令:
    $./configure --disable-shared (首選)
或: $./configure --disable-static --enable-shared
    $ make
    $ make install
    編譯結果在: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
    再執行以下命令:
    $./configure --enable-shared --disable-asm
    $ make
    $ make install
    編譯結果在:C:\MinGW\msys\1.0\local 目錄下
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
    再執行以下命令:
    $./configure --prefix=C:/MinGW/msys/1.0/local
    $ make
    $ make install
    編譯結果在:C:\MinGW\msys\1.0\local 目錄下。
    需要注意的就是:此處編譯加上了路徑
    如果make時出現: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.,我發現不太行,一運行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”,已經啓動的話就不用再重新啓動了。切換到faac2目錄:D:\ffmpeg\faad2-2.7
    $ cd /d
    $ cd ffmpeg
    $ cd faad2-2.7
    再執行以下命令:
    $./bootstrap
    $./configure --disable-static --enable-shared
    $ make
    $ make install
    編譯結果在:C:\MinGW\msys\1.0\local 目錄下
9 編譯faac(可選項)
    faac-1.28.tar.gz 接壓到:D:\ffmpeg\ 目錄下,雙擊“C:\MinGW\msys\1.0\msys.bat”,啓動“MinGW32”,已經啓動的話就不用再重新啓動了。切換到faac2目錄:D:\ffmpeg\faac-1.28
    $ cd /d
    $ cd ffmpeg
    $ cd faac-1.28
    再執行以下命令:
    $./bootstrap
    $./configure --disable-static --enable-shared
    $ make
    $ make install
    編譯結果在: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”,已經啓動的話就不用再重新啓動了。切換到vo-aacenc目錄:D:\ffmpeg\vo-aacenc-0.1.1
    $ cd /d
    $ cd ffmpeg
    $ cd vo-aacenc-0.1.1
    再執行以下命令:
    $./configure --disable-shared
    $ make
    $ make install
    編譯結果在:C:\MinGW\msys\1.0\local 目錄下
11 編譯amr-nb和amr-wb (早期ffmpeg版本,可選項)
    在編譯amrnb和amrwb之前還需要做點其它的準備工作:
    A 先到網上搜索下載wget工具,解壓後放到C:\MinGW\bin目錄下,此工具是個網絡下載工具,用來在編譯時自動下載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”,已經啓動的話就不用再重新啓動了。切換到amrnb目錄:D:\ffmpeg\amrnb-7.0.0.2
    $ cd /d
    $ cd ffmpeg
    $ cd amrnb-7.0.0.2
    再執行以下命令:
    $./configure --disable-static --enable-shared
    $ make
    $ make install
    編譯結果在:C:\MinGW\msys\1.0\local 目錄下
    amrwb-7.0.0.4.tar.tar 接壓到:D:\ffmpeg\ 目錄下,雙擊“C:\MinGW\msys\1.0\msys.bat”,啓動“MinGW32”,已經啓動的話就不用再重新啓動了。切換到amrwb目錄:D:\ffmpeg\amrwb-7.0.0.4
    $ cd /d
    $ cd ffmpeg
    $ cd amrwb-7.0.0.4
    再執行以下命令:
    $./configure --disable-static --enable-shared
    $ make
    $ make install
    編譯結果在: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”,已經啓動的話就不用再重新啓動了。
    如果是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
    再執行以下命令:
    $./configure --disable-shared
    $ make CC=gcc
    $ make install
    編譯結果在:C:\MinGW\msys\1.0\local 目錄下
    vo-amrwbenc-0.1.1.tar.gz 接壓到:D:\ffmpeg\ 目錄下,雙擊“C:\MinGW\msys\1.0\msys.bat”,啓動“MinGW32”,已經啓動的話就不用再重新啓動了。切換到vo-amrwbenc目錄:D:\ffmpeg\ vo-amrwbenc-0.1.1
    $ cd /d
    $ cd ffmpeg
    $ cd vo-amrwbenc-0.1.1
    再執行以下命令:
    $./configure --disable-shared
    $ make CC=gcc
    $ make install
    編譯結果在: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
    再執行以下命令:
    ./configure
    make
    make install
    編譯結果在: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的安裝路徑,請根據你的安裝進行修改。爲了編譯時msys能識別sdl並開啓 SDL support yes 進行編譯,請把C:\MinGW\msys\1.0\local編譯結果bin、include和lib中有關sdl的拷貝一份到C:\MinGW\的對應目錄中。
14 拷貝編譯結果
    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。
    再執行以下命令:
    $ ./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
    請耐心等待一段時間,以上命令不能直接換行哦並且根據ffmpeg的版本不同有所變化,具體看./configure --help,你知道的。。。
    $ make
    需要等待很長一段時間,等待編譯結束。
    爲了彙總編譯結果,請繼續執行以下命令:
    $ 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”直接拷貝到當前目錄,也可放到系統目錄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


原文地址:http://blog.chinaunix.net/uid-20718335-id-2980793.html


另一篇資料:http://download.csdn.net/detail/leixiaohua1020/6389413


轉載地址:http://blog.csdn.net/leixiaohua1020/article/details/12755173

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章