本文共 6005 字,大约阅读时间需要 20 分钟。
编译了ffmpeg,由于需要生成在windows下的可执行文件,所以采用的是mingw+msys的环境。这个环境可以在windows下模拟一个linux终端,对linux下的makefile项目进行编译,从而生成windows下的可执行文件和动静态链接库。 对环境的搭建费了好大功夫,百度出来的文章基本上都是几年前的,大家转来转去,就那一个版本,还很简略,现在已经跟不上时代的步伐。好在终于找到一篇比较新的文章,内容非常详细,根据它的步骤一步一步来就可以正常编译ffmpeg,现在将这篇文章转载让大家看看。 我根据此文章搭建好的环境压缩放在了CSDN上,下载了之后解压即可使用,免去了大家下载的麻烦,不过我没有做对各种库的添加支持,就是说我的环境已经做完了前面的11步,需要添加支持的直接从后面开始就可以了!
注:我把mingw放在了msys/1.0/目录下。mingw+msys环境下载地址: 以下内容转自《MinGW下简单编译FFmpeg》,转载时有改动。 原文地址: 由于原文中的资源下载链接现在大部分都已失效,有些资源还比较难找,本人就自己搜集下载并上传到了CSDN上,可以直接下载。 编译环境要求: Msys: 1.0.10 MinGW:5.1.4 make: 3.81 gcc: 4.3.2 w32api: 3.13 SDL: 1.2.1 MinGW-Runtime: 3.15一步步的来吧:1. Minimal SYStem (MSYS) 安装下载MSYS-1.0.10.exe并安装:下载地址:安装到c:/msys/1.0,临近最后会出现个dos窗口,最后一句为:Do you wish to continue with the post install? [yn ]输入n,结束安装。2. MSYS DTK (Developer Tool Kit) 安装下载msysDTK-1.0.1.exe并安装:下载地址:安装到C:/msys/1.0,其他默认。3. 升级下MSYS下载msysCORE-1.0.11-bin.tar.gz:下载地址:解压这个文件,将bin/mount.exe, msys-1.0.dll, ps.exe三个文件copy到c:/msys/1.0/bin下面覆盖下。4. 升级下MSYS的BASH下载bash-3.1-MSYS-1.0.11-snapshot.tar.bz2:下载地址:解压这个文件,将bin/bash.exe, sh.exe两个文件copy到c:/msys/1.0/bin。5. MinGW 安装下载mingw-5.1.4.exe并安装:下载地址:安装,选择download and install,下两步之后选择Candidate,不要选Current。选择MinGW base tools (autoselected), g++ compiler, MinGW make; 安装路径为c:/msys/1.0/mingw。等待下载完了安装吧。O(∩_∩)O……5.2. 还原binutils-2.16.91很多朋友需要用ffmpeg的dll来做开发。编译的时候是用./configure --enable-memalign-hack --disable-static --enable-shared。但是最终编译出来make install或者将相关的dll拷贝得到ffmepg同级目录后,执行ffmpeg或者ffplay报错:应用程序正常初始化失败。经过google了许多资料,发现是binutils的版本问题。chinavideo论坛上面有的朋友说是mingw的版本问题,使用MinGW-3.1.0-1.exe会解决。Jeremiah经过试验,发现不大行,从报错的结果来看,MinGW-3.1.0-1.exe没有自带binutils。还是要自己安装。而MinGW-5.1.4.exe的candidate选项会默认给我们安装binutils-2.18.50-20080109-2.tar.gz。而这个binutils会最终导致应用程序正常初始化失败的错误。Jeremiah和网友deepocean测试了n个binutils的版本,最后发现binutils-2.16.91-20050827-1.tar.gz是最适合的。其他的,ms不行!下载地址:解压到c:/msys/1.0/mingw,覆盖原来的。6. 配置fstabcopy C:/msys/etc/fstab.sample 成 fstab,确保以下对应:#Win32_Path Mount_Point c:/msys/1.0/mingw /mingw原始环境就搭建好了。可以启动桌面上行的MSYS了。7. 升级make下载make-3.81.90-msys.rar:下载地址:解压,复制make.exe到c:/msys/1.0/bin下,覆盖原来的make。MSYS中输入make -v显示的版本为3.81。8. 升级gcc下载gcc-4.3.2-tdm-1-core.zip:下载地址:解压到c:/msys/1.0/mingw,覆盖原来的。MSYS中输入gcc -v显示的版本为4.3.2。9. 升级W32API下载w32api-3.13-mingw32-dev.tar.gz:下载地址:解压到c:/msys/1.0/mingw,覆盖原来的。10. 添加SDL下载SDL-devel-1.2.11-mingw32.tar.gz:下载地址:解压该软件包;将lib下的所有文件复制到C:/msys/1.0/mingw/lib;将include下的所有文件复制到C:/msys/1.0/mingw/include;将bin下的i386-mingw32msvc-sdl-config复制到C:/msys/1.0/mingw/bin,并重命名为sdl-config;将bin下的SDL.dll复制到C:/msys/1.0/mingw/bin。10.2 添加pr.exe下载coreutils-5.97-MSYS-1.0.11-snapshot.tar.bz2:下载地址:解压,拷贝bin的pr.exe到c:/msys/1.0/bin下。整体上的编译环境就搭建好了。====================================================================如果拿上面的做好的环境直接来用时可以的,但是一定要记住对msys.bat中的call "C:/Program Files/Microsoft
Visual Studio/VC98/Bin/VCVARS32.BAT"一定要改成自己的路径,否则后面编译的时候会出问题哦。
======================================================================
11. 编译FFmpeg
ffmpeg下载地址:0.5版本:0.5.1版本:0.5.2版本:0.6版本:copy到c:/msys/1.0/home/your_name下面(此路径可根据自己喜好)。解压:tar xjvf ffmpeg-(根据版本).tar.bz2。vi一个文件ffmpeg-conf.sh,内容为:SDL_CFLAGS=/mingw/include SDL_LIBS=/mingw/lib ./configure --enable-ffplay --enable-memalign-hack执行 make distclean
======================================================
1.这一步很重要哦,很多人都是编译到后面产生了dll文件,却没有相应的lib文件,就是因为这个。
找了很多的帖子,反复试验才找到这个血泪原因。特别是反复编译的时候,make之前一定要执行
这个清理的命令。
2.还有在我们添加的扩展lib越来越多,编译的configure选项越来越多的时候,,有时候ffmpeg的
make会报fork的错。这种情况,只要你把make的结果输入到一个文件中而不是打印在屏幕中,就
没问题了,
======================================================
执行./ffmpeg-conf.sh。执行make,应该不会有错误的。执行ffplay filename就可以播放了。12. 写在编译完之后我们只是对ffmpeg进行了简单的编译,如果需要其他的功能还是去google吧。编译完了应该会出三个可执行文件:ffmpeg.exe, ffplay.exe, ffserver.exe, 但是我编译完了只有前两个,没有ffserver.exe。因为MinGW里面少了关于ffserver用的网络的相关的包。参考。单独使用ffplay,需要将c:/msys/1.0/mingw/bin/SDL.dll和ffplay.exe放到相同的目录下。Ffmpeg工程组的网站不错,它的论坛[url=http://bbs.chinavideo.org/index.php[/url]]http://bbs.chinavideo.org/index.php[/url]里面应该有不少关于FFmpeg的东西。14. libamr库加入首先下载,解压wget.exe到/mingw/bin下。下载,解压bin/unzip.exe到/mingw/bin下。下载两个库:amrnb:amrwb:分别解压到~下面。(~:/home/yourname)。下载,将这个zip包放到~/amrnb-7.0.0.2下面。下载,将这个zip包放到~/amrwb-7.0.0.3下面。~/amrnb-7.0.0.2和~/amrwb-7.0.0.3下面分别执行:./configure --disable-shared make make install其中,--disable-shared将产生静态库,如需要动态库,则不要加这个选项。进入ffmpeg-0.5目录,保存以下脚本为ffmpeg-conf02.shSDL_CFLAGS=/mingw/include SDL_LIBS=/mingw/lib ./configure --enable-ffplay --enable-memalign-hack --enable-libamr-nb --enable-libamr-wb --enable-nonfree --extra-ldflags=-L/usr/local/lib --extra-cflags=-I/usr/local/include执行以下脚本:rm -rf config.* sh ffmpeg-conf02.sh make其中rm -rf config.*是为了确保config.h文件能被重写。如果不删除而是覆盖的话,可能会有不能写入覆盖的情况,所以,每次重新从configure开始的编译的话,还是执行下这个rm命令把configure产生的文件都干掉。这样编译出来的ffplay就可以播放3gp文件了。(附件提供)15. libmp3lame库加入首先到lame-3.97.tar.gz (不要最新的版本3.98.2,ms有些问题,说audio专码的buffer不够)解压到~下。执行以下脚本:./configure --disable-sharedmake make install进入ffmpeg-0.5目录,保存以下脚本为ffmpeg-conf03.shSDL_CFLAGS=/mingw/include SDL_LIBS=/mingw/lib ./configure --enable-ffplay --enable-static --disable-shared --enable-memalign-h ack --enable-libamr-nb --enable-libamr-wb --enable-libmp3lame --enable-nonfree - -extra-ldflags=-L/usr/local/lib --extra-cflags=-I/usr/local/include 执行以下脚本:rm -rf config.* sh ffmpeg-conf03.sh makemake后就可以使用ffmpeg玩MP3的转码了ffmpeg -i d:/video/01.avi -vcodec mpeg2video -acodec libmp3lame 01.mpg16. libfaac及libfaad库加入下载faac及faad的源码:分别解压到~下。注释掉faad2-2.7/frontend/main.c的第34行:/*#define off_t __int64*/分别执行:./bootstrap ./configure --disable-shared --without-mp4v2 make make install进入ffmpeg-0.5目录,保存以下脚本为ffmpeg-conf04.shSDL_CFLAGS=/mingw/include SDL_LIBS=/mingw/lib ./configure --enable-ffplay --enable-static --disable-shared --enable-memalign-hack --enable-libamr-nb --enable-libamr-wb --enable-libmp3lame --enable-libfaac --enable-libfaad --enable-gpl --enable-nonfree --extra-ldflags=-L/usr/local/lib --extra-cflags=-I/usr/local/include执行以下脚本:rm -rf config.* sh ffmpeg-conf04.sh makemake后就ffmpeg就可以使用faac及faad了。ffmpeg -i d:/video/02.mp3 -acodec libfaac 01.aac转载地址:https://blog.csdn.net/snowbabybw/article/details/5987239 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!