`
chriszeng87
  • 浏览: 738312 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

在windows上编译ffmpeg

阅读更多

转自:http://blog.sina.com.cn/s/blog_4ae178ba01010353.html

 

ffmpeg开源库在linux系统下弄的,是一个很全的音频和视频的编解码库。

要在windows下编译出用于开发的lib库确实比linux下要麻烦。

百度了很久,参照别人的见解终于成功编译出自己需要的可以用于开发的库

(dll的形式,附带dll的lib,静态库不会编)

 

编译环境:window xp,vs2008(vs2003也成功编过一次),

MinGW+msys百度出来的多数说的比较麻烦,特别是下载一些MinGW + msys的文件,

随着时间的更新,实际上已经没有那么麻烦了。

 

1.首先去下载MinGW,去http://sourceforge.net/搜索mingw,

下载一个最新的名字类似于mingw-get-inst-20111118.exe的文件。

这个文件一般只有几百K字节,下完以后双击运行,按提示安装,

在需要选择的时候把和C、C++、msys相关的都选上,然后继续自动安装,

然后需要等待一些时间(因为是下载文件安装的方式)

。。。。MinGW+msys系统便已经安装好了。

我安装的路径是C:\MinGW, msys的目录就是C:\MinGW\msys\1.0,

下面都是按此路径说的(路径随便放哪都可以)

 

2.编辑C:\MinGW\msys\1.0\msys.bat文件,在最前面加入一行

call "C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\vcvars32.bat"

 

后面路径是你机器上安装了vs200x的对应路径,

加入这行编译ffmpeg时会多出windows下调用dll对应的lib,方便vs200x调用,

好像就看到ffmepg会生产,测试过xvid和x264及一些其他库都没生成,ffmpeg太仁慈了。

 

3.去ffmpeg的官方网站http://ffmpeg.org/上下载一个最新的版本,

此时的版本是0.8.3,文件很小,应该能很快下载下来,解压,随便放哪,

我展开目录是D:\ffmpeg-0.8.3

 

注:ffmpeg编译里面的汇编代码需要yasm.exe,http://yasm.tortall.net/Download.html

去yasm官网当一个window合适的最新版本,32bit和64bit不要弄错了,

弄好改名成yasm.exe放到C:\WINDOWS\system32下去(主要是省得加环境变量),一并放到MinGW的bin中,

最好nasm也弄一个,经常某些库编译用的上。

不放也无所谓,就是生成的东西不支持汇编,可以速度会很受影响。

 

4.双击C:\MinGW\msys\1.0\msys.bat运行,进入目录D:\ffmpeg-0.8。3

它和cmd运行有些区别,右斜杠需要换成左斜杠,然后盘符D:也需要更改/d

上面输入cd /d/ffmpeg-0.8.3,也可以分布进入如

 

cd /d

cd ffmpeg-0.8

cd ff*

等等。。。(*号可以替字符)

 

然后输入

./configure --enable-shared --disable-static --enable-memalign-hack --enable-pthreads  (--prefix=d:/addon   表明编译后的文件放到哪个地方, 默认放到MinGW的local文件夹下。--enable-memalign-hack选项是FFmpeg在Windows上编译成功所必须指定的)

 

如果提示pkg-config 找不到, 下载一个pkg-config.exe 放到MinGW得bin目录下

 

【注意】如果出现“

gcc is unable to create an executable file.

C compiler test failed.

可能是你的MinGW 没有完全安装好gcc,需要重新更新安装。

 

 

等待比较长的时间,界面回到$开头后输入    make

等待很长的编译时间,界面回到$开头后输入  make install

 

编译过程结束

需要的结果在C:\MinGW\msys\1.0\local目录下,有对应的头文件、dll加lib和ffmpeg.exe等运行程序

是不是很简单。

 

补充说明:make指令后实际上在ffmpeg目录里已经有生成的dll和lib了,

但是make install指令还是建议要执行 因为它会为你整理好需要的头文件

(太体贴了,自己全拷觉得太多,自己选择又太麻烦,而且不会正确),

然后dll文件会小好几圈(原理不清楚)。

第一个指令./configure加上make和make install三个指令

可以在windows下用mingw编译很多来自于linux的开源库

./configure --help可以看到

./configure可以配置那些开关,后面输错了或者输少了没有关系,msys会提醒你,非常体贴。

一般./configure能执行,那么根目录下都有一个configure文件,

可以用wordpad或者其他文档编辑工具(如UE)打开

 

D:\pifu\ffmpeg-0.8\ffmpeg-0.8下的configure文件,

里面可以找到./configure --help列出的文件。有这么一段

External library support:

  --enable-avisynth        enable reading of AVISynth script files [no]

  --enable-bzlib           enable bzlib [autodetect]

  --enable-libcelt         enable CELT/Opus decoding via libcelt [no]

  --enable-frei0r          enable frei0r video filtering

  --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]

  --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]

  --enable-libopencv       enable video filtering via libopencv [no]

  --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394

                           and libraw1394 [no]

  --enable-libdirac        enable Dirac support via libdirac [no]

  --enable-libfaac         enable FAAC support via libfaac [no]

  --enable-libfreetype     enable libfreetype [no]

  --enable-libgsm          enable GSM support via libgsm [no]

  --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]

  --enable-libnut          enable NUT (de)muxing via libnut,

                           native (de)muxer exists [no]

  --enable-libopenjpeg     enable JPEG 2000 decoding via OpenJPEG [no]

  --enable-librtmp         enable RTMP[E] support via librtmp [no]

  --enable-libschroedinger enable Dirac support via libschroedinger [no]

  --enable-libspeex        enable Speex decoding via libspeex [no]

  --enable-libtheora       enable Theora encoding via libtheora [no]

  --enable-libvo-aacenc    enable AAC encoding via libvo-aacenc [no]

  --enable-libvo-amrwbenc  enable AMR-WB encoding via libvo-amrwbenc [no]

  --enable-libvorbis       enable Vorbis encoding via libvorbis,

                           native implementation exists [no]

  --enable-libvpx          enable VP8 support via libvpx [no]

  --enable-libx264         enable H.264 encoding via x264 [no]

  --enable-libxavs         enable AVS encoding via xavs [no]

  --enable-libxvid         enable Xvid encoding via xvidcore,

                           native MPEG-4/Xvid encoder exists [no]

  --enable-mlib            enable Sun medialib [no]

  --enable-zlib            enable zlib [autodetect]

 

它们是指ffmpeg本身没有但可以扩展的的库,下面就继续说一下这个

 

5.扩展库,ffmpeg本身不支持MP3的编码,而我又强烈希望能编MP3

去http://sourceforge.net/搜索lame,此时是第一个,下载下来,

仿照上面ffmpeg的步骤执行./configure,make,make install,

执行./configure前先--help一下,如果有静态和动态库区别,

关掉动态库,选择静态库(当然你也可以不理)

执行完以后lame(实际上里面包含了mp3的编码)的库就在C:\MinGW\msys\1.0\local下了

(库的输出路径是可以设置的,不过最好不要去找那个麻烦)

其它库也可以同样的执行,我试过x264 xvid libvo-aacenc libvo-amrwbenc zlib,

前面两个很容易找到官方网站然后下载,后面的都是去sourceforge上搜的,

主要注意./configure的时候加上汇编和线程的支持(如果支持的话)

 

然后ffmepg先卸载掉(也可以重新来过),进入目录D:\pifu\ffmpeg-0.8\ffmpeg-0.8,执行

make uninstall

./configure后面我的参数做为一个例子(下面是没有回车之类的):

 

 ./configure --enable-shared --disable-static --enable-w32threads --enable-m

emalign-hack --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libmp3lame -

-enable-zlib --extra-cflags=-I/usr/local/include --extra-ldflags=-L/usr/local/li

b --enable-version3

 

--extra-cflags和--extra-ldflags是指明调用其它库的路径

 

最后我实际上是没有加上xvid和x264的。xvid是对mpeg4视频的编解码,

功能非常强大,ffmpeg对mpeg4的编解其实也是支持的。x264是对h.264编码,非常高效,

ffmpeg没有对h.264编码的支持。我没有加入这两个库的理由:我用了x264的vfw的一个版本,

然后又用了加了x264支持的ffmpeg库,在一个进程里debug时碰到断言错误(release版本没有),

所以没有加入x264,而且x264额外拿出来编码效率比ffmpeg高,

然后我担忧xvid也可能碰到一样的情况,就都没有加入。

 

说到xvid当你用了xvid就请厌恶divx吧

x264我在CSDN上挂了一个很好的vfw的版本(第一次挂)http://download.csdn.net/source/3463887

适合开发,效率比最新的x264,用mingw编译出来的要好,而且整理过。

可惜没人下载,估计资源快被删除了

 

6.最后说点不大相关的

生成的dll和lib有好几组,文件实际上是一样的,需要取类似avcodec-53.dll和avcodec-53.lib的文件,

*.lib的名字无所谓,但是dll的名字却是被限定的。用ue编辑avcodec-53.lib,

里面一堆avcodec-53.dll的字符。有时后希望改掉dll的名字,

因为毕竟怕调用别人的库是人家也生成了ffmpeg的库,名字冲突可是很危险的事情。

这个可以简单操作一下,用ue把里面avcodec-53大小全字匹配更改成别的名字,

(名字长度需要和以前一样,不一样结界自己去试),

avcodec-53.dll也干这个事情,还有就是ffmpeg里生成的dll都用到了avutil-51.dll,

avcodec-53.dll里对应的的avutil-51.dll字符需要对应更改。

(上述说文件名只是举例,后面跟的版本后可能会改动)

 

在ffmpeg目录下搜索包含example的文件(应该有两个),

照着写应该很容易写出简单的调用上面生成的ffmpeg库。

swscale库实现了原始图像格式的转换(支持很多很多格式)和大小的变化,

只要调用两个方法(加一个释放相关的)轻松搞定,

效率很不错,强烈建议使用

 

 

 

 

Build ffmpeg/ffmpeg-mt using Intel compiler on linux

http://software.intel.com/zh-cn/articles/build-ffmpegffmpeg-mt-using-intel-compiler-on-linux

http://software.intel.com/zh-cn/blogs/2010/05/28/intel-3

Introduction : 

FFmpeg is a complete, cross-platform solution to record, convert and stream audio and video. FFmpeg-mt is the multithreaded version of FFmpeg. Visit http://ffmpeg.org for more information.

 

Version : 

I use the latest source from FFMPEG git and Intel C++ compiler 11.1.046 for linux.

 

 

Obtaining Source Code : 

Get the ffmpeg source:

  git clone git://git.ffmpeg.org/ffmpeg

  cd ffmpeg

  git clone git://git.ffmpeg.org/libswscale

 

Get the ffmpeg-mt source:

  git clone git://git.gitorious.org/ffmpeg/ffmpeg-mt

  cd ffmpeg-mt

  git clone git://git.mplayerhq.hu/libswscale

 

Build the application:

The build process for ffmpeg and ffmpeg-mt is similar.

1. go to the source code folder.

2. configure the build. Please use ./configure --help for more options. 

   ./configure --prefix=/usr --enable-shared

3. Build with gcc compiler by default.

    make & make install

4. To build with Intel compiler, use the following command after step 2.

    source /opt/intel/Compiler/11.1/046/bin/iccvars.sh ia32  (source /opt/intel/bin/iccvars.sh intel64)

    make CC=icc LD=icc

    make install

5. To build with more advanced options like "-ipo" using Intel compiler, we can use a wrapper to change build option. For example:

    1) make a new file with name intelwrapper, input the followings in the file:

            ICCFLAGS="$@ -ipo"

            echo "icc $ICCFLAGS"

            icc $ICCFLAGS

     2) add execution attribute for intelwrapper

            chmod 755 intelwrapper

     3) make CC=/bin/intelwrapper AR=xiar LD=icc

     4) make install

 

分享到:
评论

相关推荐

    windows下编译ffmpeg库

    本篇文章将详细介绍在 Windows 上编译 FFmpeg 库的过程。 1. **环境准备**: - 首先,你需要下载并安装 MinGW 或 MSYS2,它们提供了与 Linux 相似的开发环境,支持 GCC 编译器。MinGW 提供了基本的编译环境,而 ...

    windows下编译ffmpeg

    在Windows环境下编译FFmpeg库是一项技术性较强的任务,涉及到许多步骤和注意事项。下面将详细介绍如何在Windows系统下编译FFmpeg,以及这个过程中可能遇到的关键知识点。 1. **获取源代码**:首先,你需要从FFmpeg...

    windows上自己编译的最新的ffmpeg库

    在Windows平台上,由于系统环境的特殊性,直接使用预编译的库可能会遇到兼容性问题,因此,自己编译FFmpeg库成为了解决这些问题的一种方式。这个压缩包提供了用户自己在Windows环境下编译的最新版FFmpeg库,包括了...

    windows 编译 FFmpeg2.5.11 支持 G711 ,H264编解码

    在Windows平台上编译FFmpeg 2.5.11以支持G711和H264编解码是一个相对复杂的过程,因为这涉及到添加特定的编解码库和配置选项。下面将详细讲解这个过程。 首先,G711是一种古老的音频编码标准,分为A-law(μ-law)...

    ffmpeg在windows下编译获得的动态链接库和头文件

    在 Windows 上编译 FFmpeg 需要 MingW 或 MSVC 编译环境,并且可能需要安装额外的依赖库,如 NASM (用于汇编代码) 和 Yasm。编译步骤通常包括: - 获取 FFmpeg 源码。 - 安装编译工具链,如 MinGW 或 Visual ...

    windows下编译ffmpeg 并

    在Windows环境下编译FFmpeg是一项技术性较强的任务,特别是对于初学者来说可能充满挑战。FFmpeg是一个开源项目,提供了一套强大的音频、视频处理工具,包括编码、解码、转换和流媒体等功能。以下是编译FFmpeg的详细...

    Windows编译ffmpeg步骤

    为了在Windows上成功编译FFmpeg并支持openssl,我们需要按照以下详细步骤进行操作: 1. **环境准备**: - 首先,确保你的电脑安装了Visual Studio,因为FFmpeg编译通常使用MSVC编译器。 - 下载并安装CMake构建...

    windows下编译ffmpeg整套资源含编译说明.rar

    在Windows环境下编译FFmpeg,对于开发者来说是一项挑战,因为涉及到多个库的配置和编译步骤。本资源提供了在Windows下编译FFmpeg的详细说明,包括对dshow(DirectShow)的支持,使得能够利用Windows的多媒体API进行...

    ffmpeg2.1.1版本在windows下编译整个流程及相关的资源

    在Windows上编译FFmpeg,你需要安装MinGW或MSYS2,这是一个提供类Unix命令行环境的工具集。MinGW提供GCC编译器,MSYS2则提供了更为完整的开发环境,包括pkg-config、automake等工具。 3. **安装依赖**: 编译...

    windows下qt5.10使用mingw32编译ffmpeg5.1.4

    在Windows上编译FFmpeg通常需要进行一系列的配置步骤,包括设置路径、配置选项、解决依赖关系等。 **编译过程概述** 1. **下载和安装**: 首先,需要下载并安装Qt5.10和MinGW32。确保它们都添加到系统的PATH环境变量...

    ffmpeg编译工具-msys2-x86_64.rar

    而`msys2`则是一个轻量级的开源开发环境,专为在Windows上构建POSIX兼容软件而设计,它提供了类似于Linux的命令行接口,以及一套完整的构建工具链,使得在Windows上编译FFmpeg变得更加方便。 `msys2`提供了GCC...

    windows下基于MinGW编译ffmpeg之_初级篇_中级篇

    在Windows环境下,使用MinGW(Minimalist GNU for Windows)编译FFmpeg是一个常见的任务,尤其对于开发者来说,自定义编译可以实现特定的功能需求或优化性能。本篇将详细讲解如何进行FFmpeg的初级和中级编译过程。 ...

    msys2编译ffmpeg完整环境.zip

    然而,通过使用MSYS2工具,我们可以创建一个接近于Unix的环境,使得在Windows上编译FFmpeg成为可能。MSYS2是一个轻量级的开源软件,它提供了一个命令行接口和一个包管理系统,可以安装GCC编译器、Make工具等,以支持...

    windows下编译ffmpeg资料包

    在Windows环境下编译FFmpeg源码是一项技术性较强的任务,涉及到多个步骤和依赖库的安装。本资料包提供了在Windows下编译FFmpeg所需的所有资源,帮助开发者从零开始构建自定义的FFmpeg版本。 首先,编译FFmpeg前的...

    MinGW && MSYS编译ffmpeg

    因此,为了能在Windows上编译FFmpeg,我们需要借助MinGW(Minimalist GNU for Windows)和MSYS(Minimal SYStem)。 #### 二、MinGW与MSYS简介 1. **MinGW**:它提供了一套完整的GNU工具链,包括GCC编译器等,可以...

    Windows10编译FFmpeg 32位和64位DLL.pdf

    windows10下编译FFmpeg 32位 64位 dll 相关资料搜索了很多才找到这个从小白到成功编译的全部过程 亲测有效,分享给大家

    emcc编译的ffmpeg静态库-编译wasm可用

    Linux下、windows 下均可调用。 与平台无关。 编译方法: emcc wasm_ffmpeg/wasm_ffmpeg.c libavformat.a libavcodec.a libswresample.a libavutil.a -I "/include" -s EXPORTED_FUNCTIONS="['_malloc','_free','...

    windows下用MinGW编译ffmpeg+x265库

    在Windows系统中,使用MinGW编译FFmpeg和x265库是一个涉及多个步骤的过程。本文档详细讲解了如何在Windows XP和Windows 8.1系统上使用MinGW进行编译。MinGW是一个移植版的GCC(GNU Compiler Collection),是一个在...

    Windows 下编译的ffmpeg64位

    - 编译FFmpeg时需要确保所有依赖项都已正确安装,包括但不限于OpenSSL、zlib、libiconv等。 - 遵循FFmpeg的开源许可证,如果你的项目中使用了FFmpeg,可能需要公开源代码。 - 不同版本的FFmpeg可能会有API的变更...

Global site tag (gtag.js) - Google Analytics