Debian 下编译静态链接的 ffmpeg 版本
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 |
最近评论