下面开始:

  由于FFMpeg是基于Linux开发的开源项目,源代码和Windows下最常见的Visual Studio提供的C/C++编译器不兼容,因此它不能使用MSVC++编译。要想使用FFMpeg,最先要解决的问题就是在Windows下配置一个类似Linux的编译环境,将FFMpeg编译为二进制库以后,再利用其进行进一步开发。

  MSVC++并不严格的遵循C标准,所以整个编译过程必须使用MSys+MinGW系统来完成。如果选择编译动态链接库(dll),这些库将和其他的动态链接库一样在使用上没什么差别,可以使用MSVC++来链接这些库到自己的程序,只有这种情况下MSVC++是被支持的。

  FFmpeg在Windows系统下的编译过程如下:

  • 准备MSys+MinGW系统

  1)安装MSys

  到http://sourceforge.net/project/showfiles.php?group_id=2435下载文件:

  bash-3.1-MSYS-1.0.11-snapshot.tar.bz2

  msysCORE-1.0.11-2007.01.19-1.tar.bz2

  (可能会有版本变化,以下同)

  解压msysCORE-1.0.11-2007.01.19-1.tar.bz2,比如解压到D:\msys(以下内容都使用该路径描述)。

  解压bash-3.1-MSYS-1.0.11-snapshot.tar.bz2,产生一个名为bash-3.1的目录,在该目录下有一个子目录名为bin,其他的目录不需要关心。复制bin目录中的所有文件到D:\msys\bin,提示是否要覆盖sh.exe的时候,选择是。

  到“D:\msys\postinstall”目录下执行pi.bat,在出现的提示中输入n回车后,按任意键退出即可。

  2)安装MinGW

  同样是到http://sourceforge.net/project/showfiles.php?group_id=2435下载文件:

  binutils-2.17.50-20060824-1.tar.gz

  gcc-core-3.4.5-20060117-1.tar.gz

  gcc-g++-3.4.5-20060117-1.tar.gz

  w32api-3.9.tar.gz

  mingw-runtime-3.12.tar.gz

  把它们全部解压到D:\msys\mingw。

  3)修改“msys.bat”

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

  call “D:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\vcvars32.bat”

  4)系统整合

  复制D:\msys\etc\fstab.sample为D:\msys\etc\fstab,用文本编辑器打开D:\msys\etc\fstab编辑。(需要使用一个支持Unix换行风格的编辑器,比如Notepad++),把下面这行:

  d:/mingw /mingw

  改为:

  d:/msys/mingw /mingw

  完成以上步骤,MSys+MinGW系统就配置完成了。

  • 用SVN方式获取FFmpeg

  由于FFmpeg的源代码存放在SVN仓库里,所以必须使用命令行程序或是图形界面程序来访问。为了方便,我使用TortoiseSVN这个图形界面程序,因为它和Windows资源管理器结合的非常好。

  首先到http://sourceforge.net/project/showfiles.php?group_id=138498下载TortoiseSVN并安装,安装结束后需要重新启动才可以使用。如果希望使用中文版本,可以下载LanguagePack-version-win32-zh_CN.exe,这样软件就变成熟悉的中文界面了。

  由于TortoiseSVN完全整合到了Windows资源管理器中,所以我们只要开启资源管理器,在希望存放代码的目录上右击选择“SVN检出…”就可以启动TortoiseSVN。我把FFmpeg源代码存储在“D:\ffmpeg”目录下,所以右击该目录,选择“SVN检出…” ,然后在出现的对话框中填写如下内容:

图1

  点击确定就会开始下载过程,TortoiseSVN会把最新版本的FFmpeg源代码下载到本地目录中,等待下载结束,就可以开始编译过程。

  由于FFmpeg的维护人员较多,下载的版本难免会有错误,甚至于当前下载的版本根本就无法编译,所以要经常更新。更新的方法很简单,右击FFmpeg所在的目录,选择“SVN更新”即可。

  • 编译

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

图2

  这是一个类似Linux的shell并且在Windows上运行,就像是在使用一个真正的Linux shell。不过使用这个shell时需要注意:

  →目录名使用正斜杠来分割,而不是Windows所使用的反斜杠(比如说要写成”D:/ffmpeg”而不是”D:\ffmpeg”)。

  →盘符(例如”C:\”)可以从根目录处访问(像这样”/C/”)。

  →文件名或目录名中如果带有空格,必须用双引号括起(例如这样”/C/Program Files”,带有双引号)。

  下面切换到存放FFmpeg源代码的目录,方法是输入:”cd /D/ffmpeg”。

  接下来要配置FFmpeg,选择编译时包含的库,对于如何加入对第三方库的支持,请看后续描述,这里先输入:

  ./configure –enable-memalign-hack

  –enable-memalign-hack选项是FFmpeg在Windows上编译成功所必须指定的,待配置完成后,将回到命令提示符,看到下图所示的画面:

图3

  如果没有错误的话,就可以”make”具有基本功能的FFmpeg了,在提示符后输入:”make”。

  编译的过程将持续很长时间。如果一切正常,结束后将返回提示符,并有如下的输出画面:

图4

  这时程序已经编译好了,在存放FFmpeg源代码的目录下可以找到ffmpeg.exe这个文件。

  之后,如果希望把FFmpeg安装到系统中,可以执行安装步骤:”make install”,这将会复制所有生成的重要文件到MSys的local文件夹下。

  由于我只是调用FFmpeg,所以没有安装,而是把ffmpeg.exe复制到需要的目录下,作为一个模块使用。

  如果希望使用FFmpeg包含的libavcodec库开发多媒体文件处理程序,还需要编译libavcodec的dll动态链接库,编译过程和上述过程稍有差别,如下所述:

  首先切换到FFmpeg的源代码目录,在开始编译前先使用”make distclean”清理上一次留下的中间文件,然后向configure脚本多传递两个参数:

  ./configure –enable-shared –disable-static –enable-memalign-hack

  最后执行”make”命令就可以了。

  这种编译方式能够得到供MSVC++使用的文件,从而使用MSVC++进行进一步开发。

  • 链接

  在FFmpeg目录下有三个子目录名字分别为:libavutil、libavcodec和libavformat,如果在前述步骤中成功生成了动态链接库,那么在这三个目录下都有一个SLIBNAME_WITH_MAJOR.lib这样的文件,例如我生成的是avcodec-51.lib、avformat-51.lib 和 avutil-49.lib,MSVC++可以从这些文件中知道dll的导出函数。

  现在通过包含FFmpeg的头文件,和使用上述三个lib文件进行链接,就能够编写具备FFmpeg功能的应用程序了。

  • 加入对第三方库的支持

  我以加入对mp3lame的支持为例,说明加入第三方库的方法。

  首先需要下载mp3lame,这里有两个方案可以选择:

  →到http://sourceforge.net/project/showfiles.php?group_id=290下载lame-3.97.tar.gz,使用以下命令编译并安装到MinGW的库中:

  ./configure –prefix=/static –disable-shared –enable-static

  make

  make install

  或者将mp3lame编译为动态链接库:

  ./configure –prefix=/shared

  make

  make install

  →到http://oss.netfarm.it/mplayer-win32.php下载已经编译的mp3lame库,解压后复制到“D:\msys\mingw”文件夹下。

  接下来和前述步骤类似,切换到存放FFmpeg源代码的目录,在传递配置参数时要加入“–enable-libmp3lame” ,即使用以下命令配置:

  ./configure –enable-static –enable-shared –enable-memalign-hack –enable-libmp3lame

  配置后显示的信息如下图:

图5

  可以看到这时libmp3lame已经为enabled,下面只要使用”make”命令编译就可以了。

  最终我的FFmpeg配置为:

–enable-gpl –enable-pp –enable-swscaler –enable-pthreads –enable-liba52 –enable-avisynth –enable-libdts –enable-libfaac –enable-libfaad –enable-libgsm –enable-libmp3lame –enable-libnut –enable-libogg –enable-libtheora –enable-libvorbis –enable-x264 –enable-xvid
–enable-amr_nb –enable-amr_wb –cpu=i686 –enable-memalign-hack –extra-ldflags=-static

===============华丽的分隔线=========

本文参考了http://www.aurora-x.net/wiki/CompileFFmpegWindowsFFmpeg工程组的有关内容,并针对已经过时的部分稍加修改,感谢网络上无私奉献的朋友们。星塵☆回憶tag:blogger.com,1999:blog-399668078016494547.post-35850969380399542382007-05-21T22:08:00.000+08:002007-05-21T23:33:28.932+08:00为了写毕业论文,我不得不把繁琐至极的FFmpeg编译过程又重复了一遍。累啊!

另外一篇文章:

1、下载

SVN 客户端 TortoiseSVN

http://nchc.dl.sourceforge.net/sourceforge/tortoisesvn/TortoiseSVN-1.4.8.12137-win32-svn-1.4.6.msi

MinGW + MSYS

http://sourceforge.net/project/showfiles.php?group_id=2435

MinGW-5.1.3.exe (安装时,根据选项会自动下载相关编译器等)

MSYS-1.0.11-20071204.tar.bz2 (解压bin里面的文件,覆盖到安装好的MSYS相应目录)

bash-3.1-MSYS-1.0.11-1.tar.bz2 (解压bin里面的文件,覆盖到安装好的MSYS相应目录)

coreutils-5.97-MSYS-1.0.11-snapshot.tar.bz2 (需要bin里面的pr.exe,拷贝到MSYS相应目录,configure时候会用到这个工具)

http://gd.tuwien.ac.at/gnu/mingw/?fisel=0-9,a-z,A-Z

MSYS-1.0.11-2004.04.30-1.exe (MSYS安装程序)

2、安装

安装 MinGW-5.1.3.exe

安装 MSYS-1.0.11-2004.04.30-1.exe

配置 MSYS 的 etc 下的 fstab,指定 MinGW 的位置

3、获取 FFmpeg 源码

用 TortoiseSVN 将 FFmpeg 源码 checkout 到本地

svn://svn.mplayerhq.hu/ffmpeg/trunk

4、编译

./configure ………………………………(各种参数)

make

make install

FFMPEG在windows平台编译的详细过程,包括环境安装的更多相关文章

  1. spm完成dmp在windows系统上导入详细过程

    --查询dmp字符集 cat spmprd_20151030.dmp ','xxxx')) from dual; spm完成dmp在windows系统上导入详细过程 create tablespace ...

  2. 使用FFMPEG在windows平台下推rtmp流

    使用FFMPEG在windows平台下推rtmp流 工作中习惯在Linux下面使用FFmpeg模拟推rtmp流,无奈家中的电脑都是windows系统,需要利用家中的带宽来测试流媒体服务器的性能.所以研 ...

  3. cygwin -- 在windows平台上运行的unix模拟环境

    cygwin是一个在windows平台上运行的unix模拟环境,是cygnus solutions公司开发的自由软件(该公司开发了很多好东西,著名的还有eCos,不过现已被Redhat收购).它对于学 ...

  4. windows 结束进程的详细过程

    windows上如何结束进程的详细过程,下面附详细,图文说明 在cmd下,输入  netstat   -ano|findstr  8080      //说明:查看占用8080端口的进程 在cmd下, ...

  5. Win64下编译OSG详细过程(Win10+VS2015+OSG3.6.3)

    目录 1. 数据资源准备 2. 编译第三方库 3. 编译GDAL 4. 编译OSG 1) CMAKE_INSTALL_PREFIX: 2) BUILD_OSG_EXAMPLES/BUILD_MFC_ ...

  6. openssl windows平台编译库

    首先感谢http://blog.csdn.net/YAOJINGKAO/article/details/53041165?locationNum=10&fps=1和https://www.cn ...

  7. Windows平台编译openssl-0.9.8k库(32位、64位)

    近期工作中使用到了openssl的win64位资料,所以进行前期调研,汇总结果例如以下: [注意]openssl代码所在文件夹中不要带中文,否则"nmake -f ms\ntdll.mak ...

  8. windows平台CodeBlocks MinGW C++11开发环境搭建

    前言: 本文是以单独下载codeblock编辑器跟MinGW编译器这种方式进行安装,下载带MinGW编译器的codeblocks版本安装配置方式跟这个类似. 一: 下载并安装MinGW 这个参考我写的 ...

  9. windows平台编译CEF支持H264(MP3、MP4)超详细

    编译目标(如何确定目标定版本请查看:BranchesAndBuilding) CEF Branch:4664 CEF Commit:fe551e4 Chromium Version:96.0.4664 ...

随机推荐

  1. VBA小技巧

    运用VBA时,可以构造一些函数去实现诸如printf的方便函数. Public Function printf(mask As String, ParamArray tokens()) As Stri ...

  2. Linux中fdisk硬盘分区方法

    fdsik 能划分磁盘成为若干个区,同时也能为每个分区指定分区的文件系统,比如linux .fat32. linux .linux swap .fat16 以及其实类Unix类操作系统的文件系统等:当 ...

  3. 【OS】NMON的简介和使用

    [OS]NMON的简介和使用 目前NMON已开源,以sourceforge为根据地,网址是http://nmon.sourceforge.net. 1. 目的 本文介绍操作系统监控工具Nmon的概念. ...

  4. Hadoop学习笔记五

    一.uber(u:ber)模式 MapReduce以Uber模式运行时,所有的map,reduce任务都在一个jvm中运行,对于小的mapreduce任务,uber模式的运行将更为高效. uber模式 ...

  5. 洛谷 [P3033] 牛的障碍

    利用二分图匹配求最大独立集 本题的边一定平行于坐标轴,且同向的线段一定不重合,这是经典的二分图建图方法,本题要求的是最大不重合的线段数,那就是求二分图的最大独立集,最大独立集=总点数-最大匹配数. 本 ...

  6. BZOJ 3620: 似乎在梦中见过的样子 [KMP 暴力]

    和我签订契约,成为魔法少女吧 题意:求所有形似于A+B+A 的子串的数量 , 且len(A)>=k,len(B)>=1 位置不同其他性质相同的子串算不同子串,位置相同但拆分不同的子串算同一 ...

  7. gradle一个已删除的项目找不到

    排查了已有模块未果,到.idea目录中找到了gradle.xml文件,发现其中externalProjectPath指向的正是报错的那个已删除项目,改之,刷gradle,解决.

  8. python基础(str,list,tuple)

    python是一门动态解释型的强类型定义语言(先编译后解释) 动态类型语言 动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来 解释型 程 ...

  9. CA证书扫盲,https讲解。

    很多关于CA证书的讲解. 1.什么是CA证书. 看过一些博客,写的比较形象具体. ◇ 普通的介绍信 想必大伙儿都听说过介绍信的例子吧?假设 A 公司的张三先生要到 B 公司去拜访,但是 B 公司的所有 ...

  10. PLECS—晶闸管-第九周

    1. 单相桥式晶闸管整流电路仿真 (1)仿真电路图 (2)触发角为pi/4的手工波形图(参数设置,触发角=pi/4, 电感L = 0H) (2)模拟仿真波形图 1)参数设置:触发角=pi/4, 电感L ...