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)
v 3 下载 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:earnie@users.sf.net
 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.ex e 和 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,打完收工。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值