下面开始:

  由于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. cache.config文件配置模板

    # # cache.config # # The purpose of this file is to alter caching parameters of # specific objects o ...

  2. dom4j读取xml

    -----记录和回顾是一个比学习更重要的环节----- 一.首先,我们需要知道xml是做什么的 1.作为软件的配置文件 2.作为数据的载体(小型的数据库) 二.xml的语法 xml文件以xml后缀名结 ...

  3. R语言-探索多个变量

    目的: 通过探索文件pseudo_facebook.tsv数据来学会多个变量的分析流程 通过探索diamonds数据集来探索多个变量 通过酸奶数据集探索多变量数据 知识点: 散点图 dplyr汇总数据 ...

  4. Oracle-Linux安装配置python3.6环境

    最近公司更换了linux系统的版本,从Ubuntu改为了oracle linux,相关的Python环境也要重新配置,记录一下基本配置的过程. 相关环境 系统:oracle linux7.3 系统自带 ...

  5. Lucene.net(4.8.0) 学习问题记录五: JIEba分词和Lucene的结合,以及对分词器的思考

    前言:目前自己在做使用Lucene.net和PanGu分词实现全文检索的工作,不过自己是把别人做好的项目进行迁移.因为项目整体要迁移到ASP.NET Core 2.0版本,而Lucene使用的版本是3 ...

  6. ABP官方文档翻译 6.1.1 MVC控制器

    ASP.NET MVC控制器 介绍 AbpController基类 本地化 其他 过滤器 异常处理和结果包装 审计日志 验证 授权 工作单元 介绍 ABP通过Abp.Web.Mvc nuget包集成到 ...

  7. ABP官方文档翻译 5.1 Web API控制器

    ASP.NET Web API控制器 介绍 AbpApiController基类 本地化 其他 过滤器 审计日志 授权 反伪造过滤器 工作单元 结果包装和异常处理 结果缓存 校验 模型绑定器 介绍 A ...

  8. Using Custom Domains With IIS Express In Asp.Net Core

    IIS Express是一个Mini版的IIS,能够支持所有的Web开发任务,但是这种设计有一些缺陷,例如只能通过localhost:<port>的方式来访问我们的应用程序,看起来就有点不 ...

  9. Go终端读写

    终端读写 操作终端相关文件句柄常量 os.Stdin:标准输入 os.Stdout:标准输出 os.Stderr:标准错误输出 终端读写实例: package main import ( " ...

  10. Ubuntu下的Samba服务器配置

    一. samba的安装: sudo apt-get insall samba 二. 创建共享目录: mkdir /home/phinecos/share sodu chmod 777 /home/ge ...