由于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/CompileFFmpegWindows和FFmpeg工程组的有关内容,并针对已经过时的部分稍加修改,感谢网络上无私奉献的朋友们。星塵☆回憶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
分享到:
相关推荐
译 先拿 windows 开刀 在这上练练手 当时哪止手 腿都练折了 也熟悉熟悉编译过程 考虑到在 windows 下基于 MinGW 编译 FFMPEG 是一个复杂 庞大的工程 为了提高初学者 的信心 我将整个编译过程作了一个分割调整 分成...
方法解释了,如何用MinGW在windows系统上编译ffmpeg。 由于ffmpeg本事linux系统下开发的GNU项目,所用的是C99编译标准,而MSVC++不能很好的支持C99标准,所以需要使用MinGW来模拟unix环境,期间还会用到MSYS来提供...
包含CentOS5.3环境下编译FFmepg开源项目的过程记录与依赖的源码包。FFmpeg 是一个用来记录,转换,流媒体audio和video的开源库,在Linux下开发,但可以在许多操作系统下编译,包括Windows 。
在windows10 系统上用vs2017编译opencv 和它的contrib过程中需要自动下载一些文件,但是由于国内某些地区被墙了,所以不能通过正常渠道下载。安装方法见:...
日常分享:msys2是一款优秀的编译工具,常以mingw的gcc为编译器,擅长编译非windows系统编写的库,例如ffmpeg。相较cmake,msys2并不依赖VS的版本,但是由于采用pacman命令行而非GUI,编译过程相对繁琐。
10.4.1 生成XviD算法静态库(编译过程) 388 10.4.2 实现XviD CODEC视频编码算法函数 389 10.4.3 实现XviD CODEC视频解码算法函数 393 10.4.4 使用XviD CODEC编解码算法 395 10.5 平台应用效果展示 398 10.6 本章小...
如果小组互动的所有参与者在录音过程中都使用了头戴式耳机或翻领式麦克风,则GUI最多可并行显示8条音轨,并分割扬声器的转弯。 每个扬声器转弯都可以通过用户特定的编码方案进行手工修改和注释/编码。 先决条件 使用...
10.4.1 生成XviD算法静态库(编译过程) 388 10.4.2 实现XviD CODEC视频编码算法函数 389 10.4.3 实现XviD CODEC视频解码算法函数 393 10.4.4 使用XviD CODEC编解码算法 395 10.5 平台应用效果展示 398 10.6 本章小...
10.4.1 生成XviD算法静态库(编译过程) 388 10.4.2 实现XviD CODEC视频编码算法函数 389 10.4.3 实现XviD CODEC视频解码算法函数 393 10.4.4 使用XviD CODEC编解码算法 395 10.5 平台应用效果展示 398 10.6 本章小...
10.4.1 生成XviD算法静态库(编译过程) 388 10.4.2 实现XviD CODEC视频编码算法函数 389 10.4.3 实现XviD CODEC视频解码算法函数 393 10.4.4 使用XviD CODEC编解码算法 395 10.5 平台应用效果展示 398 10.6 本章小...
10.4.1 生成XviD算法静态库(编译过程) 388 10.4.2 实现XviD CODEC视频编码算法函数 389 10.4.3 实现XviD CODEC视频解码算法函数 393 10.4.4 使用XviD CODEC编解码算法 395 10.5 平台应用效果展示 398 10.6 本章小...
10.4.1 生成XviD算法静态库(编译过程) 388 10.4.2 实现XviD CODEC视频编码算法函数 389 10.4.3 实现XviD CODEC视频解码算法函数 393 10.4.4 使用XviD CODEC编解码算法 395 10.5 平台应用效果展示 398 10.6 本章小...
10.4.1 生成XviD算法静态库(编译过程) 388 10.4.2 实现XviD CODEC视频编码算法函数 389 10.4.3 实现XviD CODEC视频解码算法函数 393 10.4.4 使用XviD CODEC编解码算法 395 10.5 平台应用效果展示 398 10.6 本章小...
10.4.1 生成XviD算法静态库(编译过程) 388 10.4.2 实现XviD CODEC视频编码算法函数 389 10.4.3 实现XviD CODEC视频解码算法函数 393 10.4.4 使用XviD CODEC编解码算法 395 10.5 平台应用效果展示 398 10.6 本...
10.4.1 生成XviD算法静态库(编译过程) 388 10.4.2 实现XviD CODEC视频编码算法函数 389 10.4.3 实现XviD CODEC视频解码算法函数 393 10.4.4 使用XviD CODEC编解码算法 395 10.5 平台应用效果展示 398 10.6 本...