首先下载 ffmpeg 0.5 的原始码,官方载点:http://ffmpeg.org/releases/ffmpeg-0.5.tar.bz2
编译的最基本选项。(以下所述皆为静态编译,得到的 ffmpeg.exe 可独立执行。不编译 dll)
./configure --enable-memalign-hack --extra-cflags=-fno-common
make
make install
--enable-memalign-hack,若无此项无法编译;-fno-common 为应对一个 GCC 的 bug。
偶所使用的编译选项
CFLAGS="-pipe -s -fno-common" /path/to/ffmpeg-0.5/configure / --enable-memalign-hack --disable-logging --disable-debug --disable-ffserver --enable-avisynth / --enable-gpl --enable-postproc --enable-swscale --enable-avfilter --enable-avfilter-lavf --cpu=i586 / / --enable-pthreads --enable-libx264 --enable-libmp3lame --enable-libfaac --enable-libgsm --enable-libtheora
前两行的选项共计11个,为 ffmpeg 内建可直接使用的选项。--cpu=i586,不能使用 i686 及以上,否则无法使用内建 mpeg4 转文件,ffplay 无法播放视讯。编译过程中会强制开启 -O3,configure 的 --cpu 参数会覆盖掉 CFLAGS 中指定的 -march。
最后一行的6个选项需要事先安装其它相对应的软件包才能开启。因为 ffmpeg 有内建 mpeg4 和 vorbis,所以无需额外安装外部编码器 libxvid 和 libvorbis。
pthreads(--enable-pthreads)
CPU 的多线程 / 多核心支持。libx264 依赖于这个软件包。如果只是想要多线程 / 多核心支持,但不安装 libx264。则可使用内建的 Win32 threads(--enable-w32threads)
下载 pthreads:pthreads-w32-2-8-0-release.tar.gz
下载补丁:
http://ffmpeg.arrozcru.org/wiki/images/1/12/Pthreads-w32-2-8-0.diff
http://ffmpeg.arrozcru.org/wiki/images/d/dd/Ffmpeg_r15966_static_pthreads.diff
pthreads 资料夹中:
make clean GC-static patch -p1 < ../pthreads-w32-2-8-0.diff cp libpthreadGC2.a /mingw/lib cp pthread.h sched.h /mingw/include
ffmpeg 资料夹中:
patch -p0 < ../Ffmpeg_r15966_static_pthreads.diff
第一个补丁解决 sched.h 编译出错的问题。第二个补丁解决 ffmpeg 无法使用 pthreads 静态库的问题。
x264(--enable-libx264)
下载 x264 原始码 ftp://ftp.videolan.org/pub/videolan/x264/snapshots
下载 YASM:yasm-0.7.2-win32.exe。重新命名为 yasm.exe,复制到 msys/mingw/bin
x264 原始码数据夹中执行:
./configure --prefix=/mingw --extra-cflags=-DPTW32_STATIC_LIB ; make -j2 ; make install
--extra-cflags 必备,不然 ffmpeg 那边会编译不通过卡在 libx264.a:undefined reference to `_imp__pthread
lame(--enable-libmp3lame)
下载 LAME:http://downloads.sourceforge.net/lame/lame-398-2.tar.gz
下载补丁:http://superfq.googlepages.com/ffmpeg-20080908-lame-flush-once.patch
前往 lame-398-2。执行:
./configure --prefix=/mingw --disable-shared --disable-frontend ; make -j2 ; make install
ffmpeg 资料夹中:
patch -p0 < ../ffmpeg-20080908-lame-flush-once.patch
补丁用以解决 lamemp3 编码结束时出现错误的问题:lame: output buffer too small, Audio encoding failed
faac(--enable-libfaac)
下载 FAAC:http://downloads.sourceforge.net/faac/faac-1.28.tar.bz2
faac 资料夹中:
./bootstrap ; ./configure --prefix=/mingw --disable-shared --without-mp4v2 ; make -j2 ; make install
FAAC 无需编入 mp4 容器支持,封入 mp4 容器的工作由 ffmpeg 负责。
GSM(--enable-libgsm)
经其编码后的音讯听起来就像是从电话线中传出。(make 编译出错无视之:make: *** [bin/toast] Error 1)
下载 GSM:http://user.cs.tu-berlin.de/~jutta/gsm/gsm-1.0.12.tar.gz
gsm-1.0-pl12 资料夹中:
make -j2
cp lib/libgsm.a /mingw/lib
cp inc/gsm.h /mingw/include
使用方法特殊:ffmpeg -i input.wav -acodec libgsm_ms -ac 1 -ar 8000 -ab 13000 output.wav
Theora(--enable-libtheora)
libtheora 是 OGG 的视讯编码,依赖于 libogg。
下载
libogg:http://downloads.xiph.org/releases/ogg/libogg-1.1.3.tar.gz
Theora:http://downloads.xiph.org/releases/theora/libtheora-1.0.tar.bz2
libogg、libtheora-1.0 数据夹中(先安装 libogg):
./configure --prefix=/mingw --disable-shared ; make -j2 ; make install
FFplay
ffplay 是一个简单的问题多多的阳春播放器,不支持去交错。偶是拿它来作测试。一般的影音播放用途应使用其它播放器。ffplay 依赖于 SDL,若未安装 SDL 则不会编译 ffplay。
下载 SDL:http://www.libsdl.org/release/SDL-devel-1.2.13-mingw32.tar.gz
解压缩后用记事本开启 SDL-1.2.13/bin/sdl-config,将 prefix 由 Users/hercules/tmp/SDL-1.2.13 改为 /mingw。 复制 SDL-1.2.13 中的 bin, include, lib 至 /mingw。出现取代数据夹提示时选择全部取代。
若 configure 输出的讯息中有显示 SDL support 为 yes,即表示可编译出 ffplay.exe。使用 ffplay 需要将 SDL.dll 同 ffplay.exe 放在一起。
帮助文档
必需安装有 texi2html,才会在编译时编译出文档。
下载 texi2html:http://ftp.twaren.net/Unix/NonGNU/texi2html
texi2html 资料夹中:
./configure --prefix=/mingw ; make install
touch /mingw/bin/pod2man
touch /mingw/bin/pod2man。解决编译时出现错误:「/bin/sh: pod2man: command not found」。如果你有 pod2man 可以省去这步。pod2man 是一个 Perl script,这里建立一个空的免得找不到命令。
帮助文档主要就是6个 HTML 档案,偶已经给它 PO 到网络上:
§ FFmpeg FAQ
§ FFmpeg Documentation
§ FFplay Documentation
§ FFserver Documentation
§ General Documentation
§ Video Hook Documentation
档案下载
ffmpeg-0.5-windows-i586.7z:包括 ffmpeg、ffplay 和帮助文档。
备用载点一
备用载点二