存档

文章标签 ‘compile’

Debian 下编译静态链接的 ffmpeg 版本

2009年3月24日 dipplum 没有评论

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
分类: 开源软件 标签: , ,
This work by dipplum is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.5 China Mainland.