Debian 下编译静态链接的 ffmpeg 版本
March 24th, 2009
ffmpeg 是一款开源视频编码转换工具,最近刚刚发布 0.5 版本。ffmpeg 支持 h264,mpeg4,aac,mp3,等多种视频音频编码格式,同时支持 avi,mp4,mov,flv 等多种 container 格式。
Debian 中源中自带 ffmpeg,由于版权问题,只支持很少的几种编解码器,功能非常弱,可用性比较差。Debian Multimedia 项目弥补了这一缺陷,提供了预编译好的支持各种常用格式的 ffmpeg。
由于 Linux 发行版对于动态链接库的使用情有独钟,喜欢用链接到 Shared Object(so)库的方式编译各种软件,Debian 自然也不例外。而 ffmpeg 这款博览各家之长的软件拥有众多的库依赖关系,因此不能单独安装。不同发行版之间,甚至相同发行版的不同版本号之间,ffmpeg 的安装包都是不兼容的。安装起来非常不方便。
花了一周末的时间,使用 Debian 成功编译出静态链接的 ffmpeg 版本,得到脚本如下。下载后在 Debian 中直接运行即可。我在当前 Debian Multimedia 的 ffmpeg-0.5.svn20090318,和 Sid,Squeeze,Lenny 上测试该脚本成功。如果软件下载速度太慢,请自行修改脚本中的 Debian 源 URL。
另外,我用 Intel C Compiler 编译了 ffmpeg 的静态版本,只能运行在 Cuo 2 Duo 之后的芯片上。简单测试了一下,mpeg4 编码大概能比 gcc 版本快 10% 左右。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | #/bin/sh cat > /etc/apt/sources.list.d/build-static-ffmpeg.list <<EOF deb http://debian.ustc.edu.cn/debian sid main contrib non-free deb-src http://debian.ustc.edu.cn/debian sid main contrib non-free deb http://debian.ustc.edu.cn/debian-multimedia sid main deb-src http://debian.ustc.edu.cn/debian-multimedia sid main EOF apt-get update apt-get -t sid install debian-multimedia-keyring debian-archive-keyring mkdir -p nvidia-glx-dev/DEBIAN cat > nvidia-glx-dev/DEBIAN/control <<EOF Package: nvidia-glx-dev Priority: optional Maintainer: nobody@example.com Architecture: all Version: 180.29 Description: dummy package for nvidia-glx-dev dummy package for nvidia-glx-dev EOF dpkg-deb -b nvidia-glx-dev dpkg -i nvidia-glx-dev.deb apt-get -t sid build-dep ffmpeg || ( apt-get -t sid install libsdl1.2-dev && apt-get -t sid build-dep ffmpeg ) apt-get -t sid install libusb-1.0-0-dev apt-get -t sid source ffmpeg cd ffmpeg-*/ cat > static_build <<EOF debian/rules clean debian/rules patch CFLAGS="-Wall -g" CC="ccache gcc" NCPUS=\$(getconf _NPROCESSORS_ONLN 2>/dev/null || echo 1) ./configure \ --disable-ffplay --disable-ffserver --disable-shared --enable-static \ --extra-libs="-static -ldirac_encoder -ldirac_decoder -lstdc++ -lspeex -lvorbis -lxvidcore -ldc1394 -lraw1394 -lusb-1.0 -lm -lasound -ldl" \ --prefix=/usr --extra-cflags="\$CFLAGS" --cc="\$CC" \ --libdir=\\\${prefix}/lib --shlibdir=\\\${prefix}/lib --bindir=\\\${prefix}/bin \ --incdir=\\\${prefix}/include/ffmpeg --enable-libmp3lame \ --enable-gpl --enable-libfaad --mandir=\\\${prefix}/share/man --enable-libvorbis \ --enable-pthreads --enable-libfaac --enable-libxvid --enable-postproc \ --enable-libamr-nb --enable-libamr-wb --enable-x11grab --enable-libgsm \ --enable-libx264 --enable-libtheora --enable-libdc1394 \ --enable-nonfree --disable-stripping --enable-avfilter --enable-libdirac \ --disable-decoder=libdirac --enable-libschroedinger --disable-encoder=libschroedinger \ --enable-libspeex --enable-avfilter-lavf --disable-mmx \ --disable-altivec --disable-armv5te --disable-armv6 --disable-vis echo "#define FFMPEG_VERSION \"SVN-r18029-static\"" > version.h make -j \$NCPUS && echo Build success || echo build failed strip ffmpeg ./ffmpeg -version cp ffmpeg .. EOF . static_build echo Type ". static_build" under source code dir to rebuild |
谢谢你的icc版在Xeon X3220下也能用。