【前言】
本文参考网上大量资料,经整理而成,并经实践验证,最后更新日期2010年3月11日。另外本人使用开发工具为Delphi,不会VC,所以没有编译VC相关的lib库部分。
本文搭建MinGW+MSYS环境路径分别假设为C:\MinGW和C:\MSYS,并且为纯手工安装,即下载相应的压缩包,直接解压到相应目录。
本文链接——http://www.codecoolie.com/ffmpeg/compile-ffmpeg-under-windows/
本文作者——CodeCoolie
【简介】
■FFmpeg
FFmpeg是一套用于录制、转换和流化音频、视频的完整解决方案,其中包含一组叫做libavcodec的领先的音频、视频编码解码库。FFmpeg虽然是在Linux平台下开发的,但可以在包括Windows在内的大多数操作系统下进行编译。
■MinGW
在Windows下编译FFmpeg所需编译环境是MinGW,是Minimalist GNU for Windows的缩写。MinGW包含Windows平台头文件、GCC、以及一些GNU工具。
■MSYS
http://www.mingw.org/wiki/msys
MSYS是MinGW的Shell环境,是Minimal SYStem的缩写。MSYS提供了一些开发工具,如make等。
【编译环境】
■MinGW
http://sourceforge.net/projects/mingw/files/
下载如下压缩包:
GNU Binutils:binutils-2.20.1-2-mingw32-bin.tar.gz
MinGW Runtime:mingwrt-3.18-mingw32-dev.tar.gz
MinGW API for MS-Windows:w32api-3.14-mingw32-dev.tar.gz
GCC Version 4:gcc-core-4.2.1-sjlj-2.tar.gz(GCC 4.4有bug,将x264、xvid等与ffmpeg一起编译时候GCC会崩溃)
将上述压缩包按顺序解压到同一个目录下即可,例如解压到C:\MinGW
复制或重命名如下文件,其实就是去掉sjlj后缀:
从C:\MinGW\bin\gcc-sjlj.exe到gcc.exe
NOTICE:libiberty.a使用GNU Binutils包里较新的,而不是GCC Core包里的
■MSYS
http://sourceforge.net/projects/mingw/files/
下载如下压缩包:
msysCORE-1.0.11-bin.tar.gz
msysCORE-1.0.13-2-msys-1.0.13-bin.tar.lzma
make-3.81-2-msys-1.0.11-bin.tar.lzma
coreutils-5.97-2-msys-1.0.11-ext.tar.lzma(只需要pr.exe,configure ffmpeg时候用到)
vim-7.2-1-msys-1.0.11-bin.tar.lzma(不打算使用vi可以不装)
将上述压缩包按顺序解压到同一个目录下即可,例如解压到C:\MSYS
■MinGW+MSYS
编辑C:\MSYS\etc\fstab文本,指定MinGW在MSYS下的挂接目录
C:/MinGW /mingw
■yasm
编译x264时候需要
http://www.tortall.net/projects/yasm/
下载:http://www.tortall.net/projects/yasm/releases/yasm-0.8.0.tar.gz
解压,编译安装:
./configure –prefix=/mingw
make
make install
【基本库】
■zlib
http://sourceforge.net/projects/mingw/files/
下载如下压缩包:
MinGW zlib:libz-1.2.3-1-mingw32-dev.tar.gz
将其解压到C:\MinGW
删除C:\MinGW\lib\libz.dll.a(否则会使用动态链接,需要libz.dll)
■bzip2
http://sourceforge.net/projects/mingw/files/
下载如下压缩包:
MinGW bzip2:bzip2-1.0.5-2-mingw32-dev.tar.gz
将其解压到C:\MinGW
删除C:\MinGW\lib\libbz2.dll.a(否则会使用动态链接,需要libbz-2.dll)
■SDL
编译ffplay时候需要
下载:http://www.libsdl.org/release/SDL-devel-1.2.13-mingw32.tar.gz
解压,修改Makefile:CROSS_PATH := /mingw
编译安装:make cross
【FFmpeg基本编译】
源码取得:svn://svn.mplayerhq.hu/ffmpeg/trunk
配置编译:假设安装路径为/FFmpeg/Release
./configure –prefix=/FFmpeg/Release –enable-memalign-hack
make
make install
【编解码库】
假设第三方库安装路径为/olibs
■libgsm
GSM support via libgsm
GSM 06.10 lossy speech compression
http://user.cs.tu-berlin.de/~jutta/toast.html
下载gsm-1.0.12.tar.gz
解压,修改Makefile中的CC = gcc -ansi -pedantic为CC = gcc
编译安装:
make
编译到后来会出错,但库已经编译完成,用如下命令拷贝即可
cp lib/libgsm.a /olibs/lib/
cp inc/gsm.h /olibs/include/gsm/
ffmpeg编译参数:–enable-libgsm
■libmp3lame
MP3 encoding via libmp3lame
http://sourceforge.net/projects/lame/files/
下载lame-3.98.3.tar.gz
解压,修改lame-3.98-3/libmp3lame/i386/Makefile.in中下面这行
$(ECHO) “non_pic_object=’$*.o'” >>$@
为
$(ECHO) “non_pic_object=’ .libs/$*.o'” >>$@
编译安装:
./configure –prefix=/olibs –disable-shared –enable-static –disable-frontend
make
make install
ffmpeg编译参数:–enable-libmp3lame
■opencore-amr
AMR-NB de/encoding、AMR-WB decoding via libopencore-amrnb
http://sourceforge.net/projects/opencore-amr/
下载opencore-amr-0.1.1.tar.gz(0.1.2编译需要g++、libstdc++.dll.a)
解压,注释掉以下Makefile中的几行
./opencore-amr/amrnb/Makefile
install: libopencore-amrnb.a $(SHLIB)
install -d $(DESTDIR)$(PREFIX)/lib
install -m 644 libopencore-amrnb.a $(DESTDIR)$(PREFIX)/lib
# install $(SHLIB) $(DESTDIR)$(PREFIX)/lib
ifneq ($(shell uname), Darwin)
# ln -sf $(SHLIB) $(DESTDIR)$(PREFIX)/lib/$(SONAME)
# ln -sf $(SONAME) $(DESTDIR)$(PREFIX)/lib/libopencore-amrnb.so
endif
./opencore-amr/amrwb/Makefile
install: libopencore-amrwb.a $(SHLIB)
install -d $(DESTDIR)$(PREFIX)/lib
install -m 644 libopencore-amrwb.a $(DESTDIR)$(PREFIX)/lib
# install $(SHLIB) $(DESTDIR)$(PREFIX)/lib
ifneq ($(shell uname), Darwin)
# ln -sf $(SHLIB) $(DESTDIR)$(PREFIX)/lib/$(SONAME)
# ln -sf $(SONAME) $(DESTDIR)$(PREFIX)/lib/libopencore-amrwb.so
endif
编译安装:
make CC=gcc
make install PREFIX=/olibs
ffmpeg编译参数:–enable-version3 –enable-libopencore-amrnb –enable-libopencore-amrwb
■libogg
供libvorbis和libtheora用
http://www.xiph.org/downloads/
下载libogg-1.1.4.tar.gz
解压,编译安装:
./configure –prefix=/olibs –disable-shared
make
make install
■libvorbis
Vorbis encoding via libvorbis
http://www.xiph.org/downloads/
下载libvorbis-1.2.3.tar.gz
解压,编译安装:
./configure –prefix=/olibs –disable-shared –with-ogg=/olibs
make
make install
ffmpeg编译参数:–enable-libvorbis
■libtheora
Theora encoding via libtheora
http://www.xiph.org/downloads/
下载libtheora-1.1.1.zip
解压,编译安装:
./configure –prefix=/olibs –disable-shared –with-ogg=/olibs
make
make install
ffmpeg编译参数:–enable-libtheora
■libx264
H.264 encoding via x264
http://www.videolan.org/developers/x264.html
ftp://ftp.videolan.org/pub/videolan/x264/snapshots/
下载最新的源码包
解压,编译安装:
./configure –prefix=/olibs
make
make install
ffmpeg编译参数:–enable-gpl –enable-libx264
■libxvid
Xvid encoding via xvidcore
下载xvidcore-1.2.2.tar.gz
解压,修改:
./build/generic/configure: “libxvidcore. <- “xvidcore.
编译安装:
cd xvidcore/build/generic
./configure –prefix=/olibs –disable-shared
make
make install
删除/olibs/lib/libxvidcore.dll
ffmpeg编译参数:–enable-gpl –enable-libxvid
■libfaac、libfaad
ffmpeg内置已经支持aac编码、解码,不需要libfaac、libfaad了,而且libfaac是nonfree的,nonfree是unredistributable即禁止发布
【FFmpeg高级编译】
假设安装路径为/FFmpeg/Release,假设第三方库所在路径为/olibs
配置编译:
./configure \
–prefix=/FFmpeg/Release \
–disable-debug \
–disable-static \
–enable-shared \
–enable-gpl \
–enable-version3 \
–enable-avfilter \
–enable-avfilter-lavf \
–enable-memalign-hack \
–enable-avisynth \
–enable-libgsm \
–enable-libmp3lame \
–enable-libopencore-amrnb \
–enable-libopencore-amrwb \
–enable-libtheora \
–enable-libvorbis \
–enable-libx264 \
–enable-libxvid \
–extra-cflags=-I/olibs/include \
–extra-ldflags=-L/olibs/lib
make
make install
时隔三年,又被我挖出来了。
求教,–enable-avisynth加了以后会出现ERROR:vfw32 not found,请问这是怎么回事呢,我把vfw32.lib和vfw.h放到olibs里面也不行!
1、http://ffmpeg.zeranoe.com/builds/
2、http://www.codecoolie.com/shareware/batch-files-for-mingw-and-msys-toolchains/
3、应该是在MingGW的include和lib目录里。