关于什么是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
|
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 |
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)。
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
|
本作品由 Yysfire 创作,采用进行许可。转载时请在显著位置标明本文永久链接:
http://yysfire.github.io/linux/building-ffmpeg-mplayer-on-ubuntu-12.04-x64.html