• 在Windows下编译FFmpeg详细说明


    MinGW:一个可自由使用和自由发布的Windows特定头文件和使用GNC工具集导入库的集合,允许你生成本地的Windows程序而不需要第三方C运行时

    MinGW,即 Minimalist GNU For Windows。它是一些头文件和端口库的集合,该集合允许人们在没有第三方动态链接库的情况下使用 GCC产生 Windows32 程序。

    开发 MinGW 是为了那些不喜欢工作在 Linux(FreeBSD) 操作系统而留在 Windows 的人提供一套符合 GNU 的 GNU 工作环境。

    所以,使用 MinGW 我们就可以像在 Linux 下一样使用 GNU 程序开发工具。 

    Minimal GNU(POSIX)system on Windows,是一个小型的GNU环境,包括基本的bash,make等等。是Windows下最优秀的GNU环境。

    ---------------------------------------搭建-------------------------------------------------

    感谢软件业的告诉发展,可以让菜鸟们更容易地学习和搭建运行环境。

    本来搭建MinGW+MSys环境是一件麻烦事,可是新版本的MinGw直接安装就可以使用。下面是WinGW的网页http://www.mingw.org/wiki/InstallationHOWTOforMinGW.在里面下载最新版本的MinGW可以直接搭建MinGW+MSys环境。

    以下的小修改,为了实现ffmpeg的编译。

    3)修改“msys.bat”
      用文本编辑器打开X:msysmsys.bat,由于打算用MSVC++编译程序,所以需要有.lib文件才能链接到FFmpeg的库,这些.lib文件可以使用微软的工具链中lib命令产生。为此,机器上必须已经安装了微软的Visual Studio或是Visual C++。把下面一行加到msys.bat的最前面,把路径替换成机器上vcvars32.bat实际存在的路径,比如我的在“D:Program FilesMicrosoft Visual Studio .NET 2003Vc7in”,于是就添加:
      call "D:Program FilesMicrosoft Visual Studio .NET 2003Vc7invcvars32.bat"

    4)系统整合
      复制X:msysetcfstab.sample为X:msysetcfstab,用文本编辑器打开X:msysetcfstab编辑。(需要使用一个支持Unix换行风格的编辑器,比如Notepad++),把下面这行:
      X:/mingw /mingw
      改为:
      X:/msys/mingw /mingw

    好了,环境搭建完毕。进入编译ffmpeg阶段。

    --------------------------------------编译--------------------------------------------------

    3.      编译,获取FFMPEG库(头文件,lib,和DLL)

    首先通过MSys安装目录下的msys.bat启动MSys,这时会出现一个命令行窗口,它是一个运行着bash的rxvt程序,如下图:

    图2

    这是一个类似Linux的shell并且在Windows上运行,就像是在使用一个真正的Linux shell。不过使用这个shell时需要注意:
      →目录名使用正斜杠来分割,而不是Windows所使用的反斜杠(比如说要写成"D:/ffmpeg"而不是"D:ffmpeg")。
      →盘符(例如"C:")可以从根目录处访问(像这样"/C/")。
      →文件名或目录名中如果带有空格,必须用双引号括起(例如这样"/C/Program Files",带有双引号)。
      下面切换到存放FFmpeg源代码的目录(假如你的代码解压之后的路径是D:ffmpeg),方法是输入:"cd /D/ffmpeg"。
      接下来要配置FFmpeg,选择编译时包含的库,这里先输入:
      ./configure --enable-shared --disable-static --enable-memalign-hack
      --enable-memalign-hack选项是FFmpeg在Windows上编译成功所必须指定的,待配置完成后,将回到命令提示符,看到下图所示的画面:

    图3

    如果没有错误的话,就可以"make"具有基本功能的FFmpeg了,在提示符后输入:make。
      编译的过程将持续很长时间。如果一切正常,结束后将返回提示符,并有如下的最后编译结束的输出画面:

    最后获取编译生成的ffmpeg库(头文件,lib,dll) 

    在提示符后输入:make install。 

    执行完后会生成几个文件下在MSys目录的local文件夹下。目录如: 

    4.      在VC下配置(这个指如何在VC中调用ffmpeg库),测试

    VC环境配置:(假如目录为上图所示)

    方法当然就像其他额外库一个,一种是设置VC全局的Include路径为你E:msyslocalinclude,设置VC全局lib路径为E:msyslocalin,增加操作系统的一个Path

    E:msyslocalin。另一种就是设置某个工程的lib和Include的路径。增加一个指向上面对应的地址。这个我就不是说的详细,想必玩VC的都知道。

    首先 建一个VC的控制台工程,然后把E:ffmpeglibavcodecapi-example.c(ffmpeg的存放目录)拷贝到你建的那个工程。然后改名api-example.cpp。编译。你会发现却头文件。这个时候你需要将E:msysmingwinclude(mingw安装目录下的include)的inttypes.h,stdint.h,_mingw.h三个文件拷到E:msyslocalinclude(你ffmpeg库的目录下的include)。编译还是有很多错。

    1.       需要在inttypes.h中 #define __restrict__ __restrict

    2.       如果是long long 错误就改成__int64

    3.       c->time_base.den= (AVRational){1,25}; 改成    c->time_base.num = 1; c->time_base.den = 25;//

    4.       最上面的头文件定义如下:

    #include <math.h> // 注意这个别忘了,不然会出现math模板的一个错误

    #include <stdlib.h>

    #include <stdio.h>

    #include <string.h>     

    extern "C"

    {

          #ifdef HAVE_AV_CONFIG_H

          #undef HAVE_AV_CONFIG_H

          #endif

                

          #include <libavcodecavcodec.h>

          #include <libavutilmathematics.h>

          #pragma comment(lib, "avcodec.lib")

          #pragma comment(lib, "avutil.lib")

    }

    最后编译应该是不没有错误了。里面由于有些测试的视频文件没有,所以代码执行起来也看不出什么效果。用上面的一个代码,就是仅仅为了测试,然后告诉我们使用我们已经编译好的ffmpeg库还需要做那么的操作。

    (以上大部分转载于该空间http://apps.hi.baidu.com/share/detail/20685063,感谢他的无私奉献)

     

     

    【前言】

    本文参考网上大量资料,经整理而成,并经实践验证,最后更新日期2010年3月11日。另外本人使用开发工具为Delphi,不会VC,所以没有编译VC相关的lib库部分。

    本文搭建MinGW+MSYS环境路径分别假设为C:MinGW和C:MSYS,并且为纯手工安装,即下载相应的压缩包,直接解压到相应目录。

    本文链接——http://www.codecoolie.com/ffmpeg/compile-ffmpeg-under-windows/

    本文作者——CodeCoolie

    【简介】

    ■FFmpeg

    http://www.ffmpeg.org

    FFmpeg是一套用于录制、转换和流化音频、视频的完整解决方案,其中包含一组叫做libavcodec的领先的音频、视频编码解码库。FFmpeg虽然是在Linux平台下开发的,但可以在包括Windows在内的大多数操作系统下进行编译。

    ■MinGW

    http://www.mingw.org

    在Windows下编译FFmpeg所需编译环境是MinGW,是Minimalist GNU for Windows的缩写。MinGW包含Windows平台头文件、GCC、以及一些GNU工具。

    ■MSYS

    http://www.mingw.org/wiki/msys

    MSYS是MinGW的Shell环境,是Minimal SYStem的缩写。MSYS提供了一些开发工具,如make等。

    【编译环境】

    ■MinGW

    http://sourceforge.net/projects/mingw/files/

    下载如下压缩包:

    GNU Binutils:binutils-2.20.1-2-mingw32-bin.tar.gz
    MinGW Runtime:mingwrt-3.18-mingw32-dev.tar.gz
    MinGW API for MS-Windows:w32api-3.14-mingw32-dev.tar.gz
    GCC Version 4:gcc-core-4.2.1-sjlj-2.tar.gz(GCC 4.4有bug,将x264、xvid等与ffmpeg一起编译时候GCC会崩溃)

    将上述压缩包按顺序解压到同一个目录下即可,例如解压到C:MinGW

    复制或重命名如下文件,其实就是去掉sjlj后缀:

    从C:MinGWingcc-sjlj.exe到gcc.exe

    NOTICE:libiberty.a使用GNU Binutils包里较新的,而不是GCC Core包里的

    ■MSYS

    http://sourceforge.net/projects/mingw/files/

    下载如下压缩包:

    msysCORE-1.0.11-bin.tar.gz
    msysCORE-1.0.13-2-msys-1.0.13-bin.tar.lzma
    make-3.81-2-msys-1.0.11-bin.tar.lzma
    coreutils-5.97-2-msys-1.0.11-ext.tar.lzma(只需要pr.exe,configure ffmpeg时候用到)
    vim-7.2-1-msys-1.0.11-bin.tar.lzma(不打算使用vi可以不装)

    将上述压缩包按顺序解压到同一个目录下即可,例如解压到C:MSYS

    ■MinGW+MSYS

    编辑C:MSYSetcfstab文本,指定MinGW在MSYS下的挂接目录

    C:/MinGW /mingw

    ■yasm

    编译x264时候需要

    http://www.tortall.net/projects/yasm/

    下载:http://www.tortall.net/projects/yasm/releases/yasm-0.8.0.tar.gz

    解压,编译安装:

    ./configure –prefix=/mingw
    make
    make install

    【基本库】

    ■zlib

    http://sourceforge.net/projects/mingw/files/

    下载如下压缩包:

    MinGW zlib:libz-1.2.3-1-mingw32-dev.tar.gz

    将其解压到C:MinGW

    删除C:MinGWliblibz.dll.a(否则会使用动态链接,需要libz.dll)

    ■bzip2

    http://sourceforge.net/projects/mingw/files/

    下载如下压缩包:

    MinGW bzip2:bzip2-1.0.5-2-mingw32-dev.tar.gz

    将其解压到C:MinGW

    删除C:MinGWliblibbz2.dll.a(否则会使用动态链接,需要libbz-2.dll)

    ■SDL

    http://www.libsdl.org/

    编译ffplay时候需要

    下载:http://www.libsdl.org/release/SDL-devel-1.2.13-mingw32.tar.gz

    解压,修改Makefile:CROSS_PATH := /mingw

    编译安装:make cross

    【FFmpeg基本编译】

    源码取得:svn://svn.mplayerhq.hu/ffmpeg/trunk

    配置编译:假设安装路径为/FFmpeg/Release

    ./configure –prefix=/FFmpeg/Release –enable-memalign-hack
    make
    make install

    【编解码库】

    假设第三方库安装路径为/olibs

    ■libgsm

    GSM support via libgsm

    GSM 06.10 lossy speech compression

    http://user.cs.tu-berlin.de/~jutta/toast.html

    下载gsm-1.0.12.tar.gz

    解压,修改Makefile中的CC = gcc -ansi -pedantic为CC = gcc

    编译安装:

    make

    编译到后来会出错,但库已经编译完成,用如下命令拷贝即可

    cp lib/libgsm.a /olibs/lib/
    cp inc/gsm.h /olibs/include/gsm/

    ffmpeg编译参数:–enable-libgsm

    ■libmp3lame

    MP3 encoding via libmp3lame

    http://sourceforge.net/projects/lame/files/

    下载lame-3.98.3.tar.gz

    解压,修改lame-3.98-3/libmp3lame/i386/Makefile.in中下面这行

    $(ECHO) “non_pic_object=’$*.o’” >>$@

    $(ECHO) “non_pic_object=’ .libs/$*.o’” >>$@

    编译安装:

    ./configure –prefix=/olibs –disable-shared –enable-static –disable-frontend
    make
    make install

    ffmpeg编译参数:–enable-libmp3lame

    ■opencore-amr

    AMR-NB de/encoding、AMR-WB decoding via libopencore-amrnb

    http://sourceforge.net/projects/opencore-amr/

    下载opencore-amr-0.1.1.tar.gz(0.1.2编译需要g++、libstdc++.dll.a)

    解压,注释掉以下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

    编译安装:

    make CC=gcc
    make install PREFIX=/olibs

    ffmpeg编译参数:–enable-version3 –enable-libopencore-amrnb –enable-libopencore-amrwb

    ■libogg

    供libvorbis和libtheora用

    http://www.xiph.org/downloads/

    下载libogg-1.1.4.tar.gz

    解压,编译安装:

    ./configure –prefix=/olibs –disable-shared
    make
    make install

    ■libvorbis

    Vorbis encoding via libvorbis

    http://www.xiph.org/downloads/

    下载libvorbis-1.2.3.tar.gz

    解压,编译安装:

    ./configure –prefix=/olibs –disable-shared –with-ogg=/olibs
    make
    make install

    ffmpeg编译参数:–enable-libvorbis

    ■libtheora

    Theora encoding via libtheora

    http://www.xiph.org/downloads/

    下载libtheora-1.1.1.zip

    解压,编译安装:

    ./configure –prefix=/olibs –disable-shared –with-ogg=/olibs
    make
    make install

    ffmpeg编译参数:–enable-libtheora

    ■libx264

    H.264 encoding via x264

    http://www.videolan.org/developers/x264.html

    ftp://ftp.videolan.org/pub/videolan/x264/snapshots/

    下载最新的源码包

    解压,编译安装:

    ./configure –prefix=/olibs
    make
    make install

    ffmpeg编译参数:–enable-gpl –enable-libx264

    ■libxvid

    Xvid encoding via xvidcore

    http://www.xvid.org/

    下载xvidcore-1.2.2.tar.gz

    解压,修改:

    ./build/generic/configure: “libxvidcore. <- “xvidcore.

    编译安装:

    cd xvidcore/build/generic
    ./configure –prefix=/olibs –disable-shared
    make
    make install

    删除/olibs/lib/libxvidcore.dll

    ffmpeg编译参数:–enable-gpl –enable-libxvid

    ■libfaac、libfaad

    ffmpeg内置已经支持aac编码、解码,不需要libfaac、libfaad了,而且libfaac是nonfree的,nonfree是unredistributable即禁止发布

    【FFmpeg高级编译】

    假设安装路径为/FFmpeg/Release,假设第三方库所在路径为/olibs

    配置编译:

    ./configure
    –prefix=/FFmpeg/Release
    –disable-debug
    –disable-static
    –enable-shared
    –enable-gpl
    –enable-version3
    –enable-avfilter
    –enable-avfilter-lavf
    –enable-memalign-hack
    –enable-avisynth
    –enable-libgsm
    –enable-libmp3lame
    –enable-libopencore-amrnb
    –enable-libopencore-amrwb
    –enable-libtheora
    –enable-libvorbis
    –enable-libx264
    –enable-libxvid
    –extra-cflags=-I/olibs/include
    –extra-ldflags=-L/olibs/lib
    make
    make install

  • 相关阅读:
    vue
    vim 使用
    ssh 免密码登录
    shell 监控
    shell top
    使用网络技术---WebView
    安卓数据存储
    模块
    面向对象
    文件
  • 原文地址:https://www.cnblogs.com/lidabo/p/3967473.html
Copyright © 2020-2023  润新知