Windows(x64)編譯FFMPEG

一、引言

     公司項目需求,需要把所有視頻轉爲h264編碼的mp4格式,個人採用的是ffmpeg工具,這篇文章主要介紹FFMPEG在windows上的編譯。


二、相關環境

    編譯ffmpeg所需資源從http://download.csdn.net/detail/zhaoxd_1/9340985下載

二、編譯前準備

您最好新建一個目錄專門用來保存以下下載的文件。
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 下載
    文件名類似爲:yasm-1.2.0-win64.exe(如果是64位系統下載32位版本yasm-1.2.0-win32.exe)
v3 下載 ffmpeg
    ffmpeg可以到 http://www.ffmpeg.org/releases/ 下載
    選擇的一個最新版本下載即可,如:ffmpeg-2.8.tar.gz
    文件名類似爲:ffmpeg-2.8.tar.gz
    當然你也使用網上介紹的使用SVN直接下載源代碼的方法。 
    svn://svn.mplayerhq.hu/ffmpeg/trunk
4 下載 mp3lame(支持mp3,可選項)
    爲了讓編譯出來的ffmpeg支持對mp3格式的編解碼,您需要先下載lame。
    到:http://sourceforge.net/projects/lame/files/ 下載
    文件名類似爲:lame-3.99.5.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 下載 faac(支持faac,可選項)
    到:http://www.audiocoding.com/downloads.html 下載:Version 1.28 bootstrapped TAR.GZ Package
    文件名類似爲:faac-1.28.tar.gz 的包。
8 下載 aacenc(支持aac,可選項)
    到:http://sourceforge.net/projects/opencore-amr/files/ 下載:vo-aacenc
    文件名類似爲:vo-aacenc-0.1.2.tar.gz 的包。
9 下載 opencore-amr與vo-amrwbenc (支持3gp,可選項)
    到:http://sourceforge.net/projects/opencore-amr/files/ 下載:opencore-amr 與 vo-amrwbenc
    文件名類似爲:opencore-amr-0.1.3.tar.gz 與vo-amrwbenc-0.1.2.tar.gz 的包。
10 下載 SDL(支持SDL,可選項)
    SDL下載可以到:http://www.libsdl.org/download-1.2.php
    在Source Code欄選擇類似:SDL-1.2.15.tar.gz - GPG signed 進行下載,
    文件名類似爲:SDL-1.2.15.tar.gz,此文件需要編譯才能生成lib庫。
11 下載 libiconv
   下載可以到 http://www.gnu.org/software/libiconv/
    在Downloading libiconv欄選擇類似:libiconv-1.14.tar.gz 進行下載,
    文件名類似爲:libiconv-1.14.tar.gz,此文件需要編譯才能生成lib庫。


二、編譯步驟
1 安裝 mingw 和 msys
    執行下載文件:mingw-get-inst-20120426.exe,
    在第3步選擇“Download latest repository catalogues”
    選擇安裝路徑:D:\Files\MinGW
    在“Select Components”步驟中選擇:
      √  C Compiler (默認且一定選擇)
      √  C++ Compiler
      √  MSYS Basic System(選擇此項將會安裝msys,msys則不需要另外安裝)
      √  MinGW Developer ToolKit
    等待安裝完成!(需要等待一定的時間,因爲安裝過程需要下載文件,可想而知,網速越快,安裝越快)
    安裝完成後,在D:\MinGW目錄下可以看到 msys 文件夾,msys也已經安裝。

2 配置 msys.bat 批處理文件
    爲了方便VS調用ffmpeg的動態庫,可以通過配置讓ffmpeg編譯時產生windows下調用dll對應的lib,當然,如果你沒有這個需要,那麼就可以省略以下處理,直接進入步驟3。
    進入:D:\MinGW\msys\1.0\文件夾,使用UltraEdit打開msys.bat文件,在文件的最最前面加入如下一行:

   call "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\vcvars32.bat"
    添加後效果如下:
     
複製代碼
 1 call "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\vcvars32.bat"
 2          @echo off
 3          rem Copyright (C):  2001, 2002, 2003, 2004, 2005  Earnie Boyd
 4          rem   mailto:[email protected]
 5          rem This file is part of Minimal SYStem
 6          rem   http://www.mingw.org/msys.shtml
 7          rem
 8          rem File:     msys.bat
 9          rem Revision:     2.4
10          rem Revision Date:  December 8th, 2005
11          rem ember to set the "Start in:" field of the shortcut.
12          rem A value similar to C:\msys\1.0\bin is what the "Start in:" field needs
13          rem to represent.
複製代碼

 


    其中“C:\Program Files (x86)\Microsoft Visual Studio 12.0”爲你機器上安裝VS2013的目錄安裝在了C盤。文件修改後保存即可。

3 系統整合
    使用UltraEdit修改D:\MinGW\msys\1.0\etc目下的fstab文件,修改其內容爲:D:\MinGW\   /mingw,  也即爲MinGW的安裝路徑。

4 添加環境變量
   在環境變量PATH前面添加 D:\MinGW\msys\1.0\bin;

4 配置 yasm
    爲了減少配置環境變量的麻煩,本處直接把yasm-1.1.0-win64.exe 文件名修改成:yasm.exe,並放到目錄:D:\MinGW\msys\1.0\bin

5 編譯 mp3lame(可選項)
    lame-3.99.5.tar.gz 接壓到:D:\ffmpeg\ 目錄下,雙擊“D:\MinGW\msys\1.0\msys.bat”,啓動“MinGW32”,切換到lame目錄:D:\ffmpeg\lame-3.99.5
    $ cd /d
    $ cd ffmpeg/lame-3.99.5
    再執行以下命令:
    $./configure --disable-shared (首選)
     $ make
     $ make install
    編譯結果在:D:\MinGW\msys\1.0\local 目錄下
6 編譯 x264(可選項)
    last_x264.tar.bz2 接壓到:D:\ffmpeg\ 目錄下,雙擊“D:\MinGW\msys\1.0\msys.bat”,啓動“MinGW32”,切換到x264目錄:D:\ffmpeg\x264-snapshot-20130630-2245

    $ cd /d
    $ cd ffmpeg/x264-snapshot-20130630-2245
    再執行以下命令:
    $./configure --enable-shared --disable-asm
    用UE打開config.mak文件,修改:(64位系統)
    CFLAGS=-Wshadow -O3 -ffast-math -m32  -Wall -I. -I$(SRCPATH) -std=gnu99 -fomit-frame-pointer -fno-tree-vectorize -fno-zero-initialized-in-bss
    爲:
    CFLAGS=-Wshadow -O3 -ffast-math -m32  -Wall -I. -I$(SRCPATH) -std=gnu99 -fomit-frame-pointer -fno-tree-vectorize -fno-zero-initialized-in-bss -march=i686
    $ make
    $ make install
    編譯結果在:D:\MinGW\msys\1.0\local 目錄下
7 編譯 Xvid(可選項)
    xvidcore-1.3.2.tar.gz 接壓到:D:\ffmpeg\ 目錄下,雙擊“D:\MinGW\msys\1.0\msys.bat”,啓動“MinGW32”,切換到xvidcore目錄:D:\ffmpeg\xvidcore\build\generic
    $ cd /d
    $ cd ffmpeg/xvidcore/build/generic
    再執行以下命令:
    $./configure --prefix=d:/MinGW/msys/1.0/local
    $ make
    $ make install
    編譯結果在:D:\MinGW\msys\1.0\local 目錄下。
    需要注意的就是:此處編譯加上了路徑
    如果make時出現:cc1.exe: error: unrecognized command line option '-mno-cygwin' 錯誤,請在./configure後make之前修改xvidcore\build\generic裏的 platform.inc文件,直接刪除裏面的“-mno-cygwin”。

8 編譯faac(可選項)
    faac-1.28.tar.gz 接壓到:D:\ffmpeg\ 目錄下,雙擊“D:\MinGW\msys\1.0\msys.bat”,啓動“MinGW32”,已經啓動的話就不用再重新啓動了。切換到faac目 錄:D:\ffmpeg\faac-1.28
    將我提供的目錄中的文件faac-1.28.diff拷貝到D:\ffmpeg\faac-1.28目錄下,此文件是補丁文件,不然編譯無法通過。
    $ cd /d
    $ cd ffmpeg\faac-1.28
    再執行以下命令:
    $ patch -p1 < faac-1.28.diff
    $./bootstrap
    $./configure --disable-static --enable-shared
    $ make
    $ make install
    編譯結果在:D:\MinGW\msys\1.0\local 目錄下

9 編譯vo-aacenc (可選項)
    vo-aacenc-0.1.2.tar.gz 接壓到:D:\ffmpeg\ 目錄下,雙擊“D:\MinGW\msys\1.0\msys.bat”,啓動“MinGW32”,已經啓動的話就不用再重新啓動了。切換到vo- aacenc目錄:D:\ffmpeg\vo-aacenc-0.1.2
    $ cd /d
    $ cd ffmpeg\vo-aacenc-0.1.2
    $ cd vo-aacenc-0.1.2
    再執行以下命令:
    $./configure --disable-shared
    $ make
    $ make install
    編譯結果在:D:\MinGW\msys\1.0\local 目錄下

10 編譯opencore-amr 和vo-amrwbenc (可選項)
    opencore-amr-0.1.3.tar.gz 接壓到:D:\ffmpeg\ 目錄下,雙擊“D:\MinGW\msys\1.0\msys.bat”,啓動“MinGW32”,已經啓動的話就不用再重新啓動了。
    切換到opencore-amr目錄:D:\ffmpeg\opencore-amr-0.1.3
    $ cd /d
    $ cd ffmpeg\opencore-amr-0.1.3
    再執行以下命令:
    $./configure --disable-shared
    $ make CC=gcc
    $ make install
    編譯結果在:D:\MinGW\msys\1.0\local 目錄下
    vo-amrwbenc-0.1.2.tar.gz 接壓到: D:\ffmpeg\ 目錄下,雙擊“D:\MinGW\msys\1.0\msys.bat”,啓動“MinGW32”,已經啓動的話就不用再重新啓動了。切換到vo-amrwbenc目錄:D:\ffmpeg\vo-amrwbenc-0.1.2
    $ cd /d
    $ cd ffmpeg\vo-amrwbenc-0.1.2
    再執行以下命令:
    $./configure --disable-shared
    $ make CC=gcc
    $ make install
    編譯結果在:D:\MinGW\msys\1.0\local 目錄下

11 編譯SDL(可選項)
   SDL-1.2.15.tar.tar 解壓到:D:\ffmpeg\ 目錄下, 雙擊“D:\MinGW\msys\1.0\msys.bat”,啓動“MinGW32”,切換到SDL目錄:D:\ffmpeg\SDL-1.2.15,切換方法如下:
    $ cd /d
    $ cd ffmpeg\SDL-1.2.15
    再執行以下命令:
    ./configure
    make
    make install
    編譯結果在:D:\MinGW\msys\1.0\local 目錄下 

    使用UltraEdit打開D:\MinGW\msys\1.0\local\bin下的 sdl-config文件
    把 prefix=/usr/local 該成: prefix=d:/MinGW
    其中:D:/MinGW 爲 mingw的安裝路徑,請根據你的安裝進行修改。爲了編譯時msys能識別sdl並開啓 SDL support yes 進行編譯,請把D:\MinGW\msys\1.0\local編譯結果bin、include和lib中有關sdl的拷貝一份到D:\MinGW\的對 應目錄中。

12 編譯libiconv
   libiconv-1.14.tar.gz 解壓到:D:\ffmpeg\ 目錄下, 雙擊“D:\MinGW\msys\1.0\msys.bat”,啓動“MinGW32”,切換到SDL目錄:D:\ffmpeg\libiconv-1.14,切換方法如下:
    $ cd /d
    $ cd ffmpeg\libiconv-1.14
    再執行以下命令:
    ./configure --prefix=/usr/local
    make
    make install
    編譯結果在:D:\MinGW\msys\1.0\local 目錄下

13 編譯 ffmpeg
    安裝下載pkg-config for MinGW/msys
     安裝方法:把pkg-config.exe 和 libglib-2.0-0.DLL複製到環境變量包括的任意一個文件夾內,我是複製到MinGW安裝路徑\msys\1.0\bin
    ffmpeg-2.0.1.tar.gz 解壓到:D:\ffmpeg\ 目錄下,雙擊“D:\MinGW\msys\1.0\msys.bat”,啓動“MinGW32”,切換到ffmpeg目錄:D:\ffmpeg\ffmpeg-2.0.1,切換方法如下:
    $ cd /d
    $ cd ffmpeg\ffmpeg-2.0.1
    再執行以下命令:
    $ ./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:/MinGW/msys/1.0/local/include
    --extra-ldflags=-Ld:/MinGW/msys/1.0/local/lib
    --cpu=i686 
    注:如果64位系統不添加"--cpu=i686" 編譯過程中會報 Threading is enabled, but there is no implementation of atomic operations available。      
    請耐心等待一段時間,以上命令不能直接換行哦並且根據ffmpeg的版本不同有所變化,具體看./configure --help,你知道的。。。
    $ make
    需要等待很長一段時間,等待編譯結束。
    然後找到D:\\MinGW\\include\\unistd.h,修改該文件中的“_cdecl”爲“__cdecl”,別看着感覺這兩個詞一樣,前者是一個小短槓,後者爲兩個小短槓。
    修改完畢後,請繼續執行以下命令:
    $ make install
    等待完成,在d:/MinGW/msys/1.0/local中將會生成 bin、include、lib等文件夾,其中包含了ffmpeg.exe、ffplay.exe、ffprobe.exe、dll、lib和頭文件等。

13 最後一步
    把libgcc_s_dw2-1.dll放入到D:\MinGW\msys\1.0\local\bin中,保證和ffmpeg.exe在一個包裏。
 
  把d:/MinGW/msys/1.0/local 包單獨分離出來,就可以使用了。OK,打完收工。





發佈了39 篇原創文章 · 獲贊 26 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章