幽谷奇峰 | 燕雀鸣幽谷,鸿鹄掠奇峰

Ubuntu 12.04 x64系统下编译ffmpeg和mplayer全程记录


建立Chroot环境

关于什么是Chroot,请查阅参考资料。

1
2
3
4
$ sudo apt-get install dchroot debootstrap
$ sudo mkdir -p /var/chroot
$ sudo mkdir -p /var/chroot/precise_amd64
$ sudo vim /etc/schroot/chroot.d/precise_amd64.conf

向文件precise_amd64.conf中写入

1
2
3
4
5
6
7
8
[precise_amd64]
description=Ubuntu 12.04 Precise for amd64/x64
directory=/var/chroot/precise_amd64
users=your_user_name
groups=sbuild
root-groups=root
run-setup-scripts=true
run-exec-scripts=true

然后运行以下命令:

1
2
3
4
$ sudo debootstrap --arch amd64 precise /var/chroot/precise_amd64 http://mirrors.tuna.tsinghua.edu.cn/ubuntu/
$ sudo cp /etc/apt/sources.list /var/chroot/precise_amd64/etc/apt/
$ sudo chroot /var/chroot/precise_amd64 #进入chroot环境,它的"/"目录实际上是主系统的"/var/chroot/precise_amd64"
$ apt-get update

安装编译依赖包

1
2
3
$ apt-get build-dep ffmpeg
$ apt-get build-dep mplayer
$ apt-get install libass-dev libfaac-dev libopencore-amrnb-dev libopencore-amrwb-dev librtmp-dev libtwolame-dev libvo-aacenc-dev libopenjpeg-dev liba52-0.7.4-dev libmpg123-dev libmad0-dev libdv4-dev

下载源码

1) libnut(AMD64特殊需求)

1
2
$ cd home/
$ svn checkout svn://svn.mplayerhq.hu/nut/src/trunk libnut

2) Ffmpeg

1
$ git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg

3) Mplayer

1
$ svn checkout svn://svn.mplayerhq.hu/mplayer/trunk mplayer

编译libnut

1
2
$ cd libnut
$ vim config.mak

1
CFLAGS += -Os -fomit-frame-pointer -g -Wall

改成

1
CFLAGS += -Os -fomit-frame-pointer -Wall -fPIC

保存,编译,安装

1
2
$ make libnut
$ make install-libnut

编译ffmpeg

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
$ cd ffmpeg
$ ./configure --enable-nonfree --enable-gpl --enable-version3 \
    --enable-shared --enable-postproc --enable-libmp3lame \
    --enable-libopenjpeg --enable-libvorbis --enable-libopencore-amrnb \
    --enable-libopencore-amrwb --enable-libxvid --enable-libx264  \
    --enable-libfaac --enable-libass --enable-libbluray --enable-librtmp \
    --enable-libtwolame --enable-libpulse --enable-libvo-aacenc --enable-gnutls \
    --enable-pthreads --disable-debug --enable-libschroedinger \
    --enable-libspeex --enable-libtheora --enable-libvpx --enable-x11grab \
    --enable-libnut --disable-podpages --disable-htmlpages --disable-txtpages \
    --enable-libgsm
$ make -j2
$ checkinstall --pkgname=ffmpeg --pkgversion=1.0.git.`date +%Y%m%d`.YYS \
    --pkgarch=amd64 --install=no --nodoc make install-progs
$ checkinstall --pkgname=ffmpeg-headers --pkgversion=1.0.git.`date +%Y%m%d`.YYS \
    --pkgarch=amd64 --install=no --nodoc make install-headers
$ checkinstall --pkgname=ffmpeg-data --pkgversion=1.0.git.`date +%Y%m%d`.YYS \
    --pkgarch=amd64 --install=no --nodoc make install-data

得到三个deb包,其中,ffmpeg包是可执行文件和动静态库文件,ffmpeg-headers包是头文件,ffmpeg-data包是一些examples和转换视频和音频要用到的预设文件(ffmpeg presets)。

编译mplayer

1
2
$ cd ../mplayer
$ cp -rt ./ ../ffmpeg/

将mplayer/configure文件中的

 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
if test -e ffmpeg/.svn ; then
    echo "You have an outdated FFmpeg SVN checkout in ffmpeg/, please (re)move or replace it"
    exit 1
fi

if test -e ffmpeg/mp_auto_pull ; then
    if ! (cd ffmpeg && git checkout release/1.0) ; then
    if ! (cd ffmpeg && git pull --rebase --ff-only) ; then
        echo "git pull failed, (re)move ffmpeg/mp_auto_pull to disable pulling"
        exit 1
    fi
    (cd ffmpeg && git checkout release/1.0)
    fi
fi

if ! test -e ffmpeg ; then
    echo "No FFmpeg checkout, press enter to download one with git or CTRL+C to abort"
    read tmp
    if ! git clone --depth 1 git://source.ffmpeg.org/ffmpeg.git ffmpeg ; then
        rm -rf ffmpeg
        echo "Failed to get a FFmpeg checkout"
        exit 1
    fi
    touch ffmpeg/mp_auto_pull
fi

注释掉。

新开一个终端,执行

1
$ sudo cp /proc/cpuinfo /var/chroot/precise_amd64/proc/

回到之前的终端

1
2
3
4
5
6
7
8
$ ./configure --enable-radio --enable-radio-capture --enable-menu --enable-xvmc \
    --language="en zh_CN" --enable-runtime-cpudetection --enable-mga \
    --enable-3dfx --enable-tdfxfb --disable-jack
$ make -j2
$ checkinstall --pkgname=mplayer --pkgversion=35233.svn`date +%Y%m%d`.YYS \
    --pkgarch=amd64 --install=no --nodoc make install-mplayer
$ checkinstall --pkgname=mencoder --pkgversion=35233.svn`date +%Y%m%d`.YYS \
    --pkgarch=amd64 --install=no --nodoc make install-mencoder install-mencoder-man

得到两个deb包,其中,mplayer包是mplayer的可执行文件,mencoder包是mencoder的可执行文件和两者的man文档。

回到主系统安装

卸载之前安装的ffmpeg和mpalyer

1
$ sudo apt-get purge ffmpeg mplayer mencoder

如果安装了smplayer,卸载mplayer时也会连同smplayer一起卸载掉。

dpkg -i deb包文件命令就可以安装之前生成的deb包。如果遇到有冲突的包,就把冲突的包卸掉,再安装。

装完后,别忘了运行sudo ldconfig.

装完自己生成的mplayer包之后,就可以重新安装smplayer了:

1
$ sudo apt-get install smplayer

最后为了防止系统将自己的老旧包(新的也一样)替换掉我们辛辛苦苦编译的包,在新立得软件包管理器中分别搜索ffmpeg,mplayer,mencoder,选中它们,点击新立得菜单->软件包->锁定版本。

也可以使用aptitude命令来锁定版本:

1
$ sudo aptitude hold ffmpeg mplayer mencoder

参考资料

  1. BasicChroot
  2. DebootstrapChroot
  3. Building 32-bit Wine on a 64-bit (x86-64) system
  4. Ubuntu x64版编译安装ffmpeg,mplayer,x264全教程【原创】支持VDPAU(高清硬解)

本作品由 Yysfire 创作,采用知识共享许可协议进行许可。转载时请在显著位置标明本文永久链接:
http://yysfire.github.io/linux/building-ffmpeg-mplayer-on-ubuntu-12.04-x64.html


相关文章


最后修改
2012-10-26 14:59
发表时间
2012-10-25 23:14
本文标签
Chroot 1 ffmpeg 1 Linux 18 mplayer 1 Ubuntu 9
关注我

侧栏导航