`
weimou66
  • 浏览: 1241604 次
文章分类
社区版块
存档分类
最新评论

FFMPEG在windows平台编译的详细过程

 
阅读更多

清风的说明:在网上找了很多这样的资料,也按照FFMPEG的编译贴做过,都不是很理想!没想到找到这样的牛人,把过程写的如此详细!真是谢谢他了!下面是他的文章转载~

<wbr></wbr>

由于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编译过程又重复了一遍。累啊!

<wbr><wbr></wbr></wbr>

另外一篇文章:

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+vs2010编译过程

    windows下ffmpeg+vs2010编译过程

    手把手教FFmpeg在windows编译安装 图文说明 下载

    是要自己编译 我用 FFMPEG 主要是在 windows 平台开发视频监控客户端和网页播放插件 以及后期手机上的播放器 我的这些 肯定要为自己的系统需求专门精简 所以也要自己编 译 先拿 windows 开刀 在这上练练手 当时哪止...

    windows下编译ffmpeg 并

    windows下编译ffmpeg(ffmpeg版本为2.1):源代码-&gt;编译过程文档-&gt;编译工具(32位/64位)-&gt;编译后生成的文件-&gt;添加到vs工程及一般错误解决方法。(走过弯路后总结出来的).

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

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

    适用于VC的FFMpeg静态库(已编译)

    适用于VC的,已经编译好的FFMpeg静态库 详细编译过程http://blog.csdn.net/wangjia184/article/details/7931164

    华为HI3559A-opencv-ffmpeg-contrib交叉编译.docx

    解决在交叉编译过程中,opencv始终无法正确加载ffmpeg视频库的问题。首先编译好ffmpeg动态库,并对opencv里ffmpeg-test进行编译论证,然后在cmake-gui的配置选项中添加链接库以及路径,从而解决opencv 交叉编译...

    使用Cygwin编译ffmpeg.doc

    使用Cygwin编译ffmpeg, 描述了自己在搭建ffmpeg windows下编译环境过程中走的一些坑,有需要的可以下载

    ffmpeg 4.3.1 Windows 32位以及64位SDK

    目前ffmpeg官方只提供64位版本的编译好的开发包,而没有32位的,目前还有不少机器是32位的,在开发过程中32位版本的是必不可少的,本资源包含的ffmpeg 4.3.1 Windows 32位以及64位SDK

    MinGW && MSYS编译ffmpeg

    方法解释了,如何用MinGW在windows系统上编译ffmpeg。 由于ffmpeg本事linux系统下开发的GNU项目,所用的是C99编译标准,而MSVC++不能很好的支持C99标准,所以需要使用MinGW来模拟unix环境,期间还会用到MSYS来提供...

    windows下用MinGW编译ffmpeg+x265库

    详细讲述了windows下使用MinGW编译ffmpeg+x265编解码的过程。有问题可以到我的主页反馈。windows xp和win8下进行过测试,xp下无误运行。

    opencv-4.4.0 编译下载文件以及生成的库文件

    opencv-4.4.0 编译文件压缩文件中包含有两个文件,分别是编译过程中下载的文件以及编译生成的dll和lib文件以及包含的头文件 1、下载的文件分别是 ippicv_2020_win_intel64_20191018_general.zip、opencv_videoio_...

    ffmpeg_for_win 支持 x264

    ffmpeg windows x264 lib dll 压缩为make install生成全部文件,包括: ...编译过程参考人个空间: http://blog.csdn.net/bxjie/article/details/35844447 库已经过测试h264编码成功.测试环境: windows 7 64bit/vs2010

    从ffmpeg中抽取的h264解码器,可用于Linux和windows

    该资源是从ffmpeg中抽取的h264解码器,是一个vc工程文件,但同样经过修改后可以在Linux下运行,修改过程只需要对每个.c文件进行编译即可

    cmake_opencv3.2需要手动下载的ippicv_windows_20151201.zip;opencv_ffmpeg.dll;opencv_ffmpe

    cmake编译opencv3.2过程中需要手动下载的文件,包括:ippicv_windows_20151201.zip;opencv_ffmpeg.dll;opencv_ffmpeg_64.dll 下载后将 opencv3.2.0\opencv\sources\3rdparty\ippicv\downloads\windows-04e81ce5d...

    H264_ddraw.rar_askgi9_ffmpeg file_ffmpeg vs2010工程_nestgld_vs2010

    没使用FFMPEG编译出来的lib和dll库,可以直接在VS2010环境下单步调试以跟踪解压缩的所用过程细节, 对于想学习和掌握H264编解码的标准的同学们非常有用. 读取h264格式的文件并进行实时解压缩和播放, 解压缩后的...

    XamarinAndroidFFmpeg:Xamarin Android FFmpeg作为过程-示例

    XamarinAndroidFFmpeg 移植自: : Xamarin Android FFmpeg作为过程-示例该Xamarin Android应用程序演示了如何将ARMv7编译的FFmpeg用作Windows中的进程,方法与Windows命令行中的用法相同。 有一些视频转换示例。

    ffmpeg-dui-c

    一个优秀的ffmpeg视频解码器源代码,编译方式:Release.x64版本。 .windows下播放网络视频流低延时 .解码器支持网络摄像头、本地视频文件、电脑自带usb摄像头、桌面抓取方法。 .视频解码处理过程已经经过硬...

    CentOS 5.3安装ffmpeg备忘录

    包含CentOS5.3环境下编译FFmepg开源项目的过程记录与依赖的源码包。FFmpeg 是一个用来记录,转换,流媒体audio和video的开源库,在Linux下开发,但可以在许多操作系统下编译,包括Windows 。

    opencv_ffmpeg&ippicv.rar

    在windows10 系统上用vs2017编译opencv 和它的contrib过程中需要自动下载一些文件,但是由于国内某些地区被墙了,所以不能通过正常渠道下载。安装方法见:...

    ffmpeg-video-client:一款优化后低延时的ffmpeg视频解码器,以及演示如何用dui制作出多路的网络视频播放器

    一个优秀的ffmpeg视频解码器源代码,编译方式:Release.x64版本。 .windows下播放网络视频流低延时 .解码器支持网络摄像头、本地视频文件、电脑自带usb摄像头、桌面抓取方法。 .视频解码处理过程已经经过硬解码,及...

Global site tag (gtag.js) - Google Analytics