windows下使用MinGW+msys編譯ffmpeg

來源:互聯網
上載者:User

本文參考了網路上的不少文章,但由於版本環境的問題參考文章並不能直接指導編譯,本文吸收多方經驗,並在自己多次編譯實驗的基礎上寫成,歡迎轉載,請注名出處。
    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: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 系統整合
    使用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 --enable-pthreads
    $ make
    $ make install
    編譯結果在:C:\MinGW\msys\1.0\local 目錄下

 

    PS:如果沒有--enable-pthreads,則線程庫編譯報錯,如下

CC      libavutil/atomic.olibavutil/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' failedmake: *** [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
    再執行以下命令:
    $./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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.