手动编译mplayer(mencoder),支持x264+AAC,解决ubuntu下使用mencoder压缩视频出现MPlayer was compiled without libfaac错误问题

标题很长,是因为这问题很严重

我在Ubuntu10.04下使用源中自带的mencoder压缩H.264视频,就出现了这个错误:

MPlayer was compiled without libfaac

找了一堆资料,发现是Ubuntu10.04自带的mencoder不支持faac编码。于是寄希望于新立得,安装了faac、libfaac0、libfaac-dev等包,仍然无用。苦恼之下只有自己编译了。

其实编译这事,我一直是比较排斥的。一直以来,我都是希望把Ubuntu作为Windows在办公电脑上的替代品来使用的。既然是替代品,当然应该使用简单、老少咸宜,而编译就已经超出了这个范畴。不过转念想来,我的应用其实也已经超出了这个范畴了。哪个office boy会吃饱了没事干在Windows下面用命令行来压制H.264视频?至少在我工作的单位,知道H.264这个名词是什么意思的,估计不会比三毛的头发数量多 :razz:

mencoder是包含在mplayer中的,下载mplayer的源码一看,原来mplayer有良好的中文文档支持,手册和操作提示都有中文资源。相比而言,官方源中的mplayer虽然手册是中文,但帮助和提示信息就是英文了。于是摩拳擦掌,准备编译一套中文的mplayer了!

一、下载

1.进入MPlayer官方网站的下载页面下载源码:mplayer-checkout-snapshot.tar.bz2,使用svn的方法该页面也有详述。
解压:

tar xjf mplayer-checkout-snapshot.tar.bz2

2.下载codecs:all-20100303.tar.bz(所有codecs

二、安装编译包

通过新立得发现,libgtk2.0和libstdc++6默认已经安装了,因此就只需要安装build-essential包了(其实如果不制作deb包的话,连build-essential也不需要装):

sudo apt-get install build-essential

三、调整参数

使用

./configure --help

查看可以使用的参数。最有用的就是安装目录参数和语言参数。如下:

Installation directories:
--prefix=DIR prefix directory for installation [/usr/local]
--bindir=DIR directory for installing binaries [PREFIX/bin]
--datadir=DIR directory for installing machine independent
data files (skins, etc) [PREFIX/share/mplayer]
--mandir=DIR directory for installing man pages [PREFIX/share/man]
--confdir=DIR directory for installing configuration files
[PREFIX/etc/mplayer]
--libdir=DIR directory for object code libraries [PREFIX/lib]
--codecsdir=DIR directory for binary codecs [LIBDIR/codecs]
Language options:
--charset=charset convert the console messages to this character set
--language-doc=lang language to use for the documentation [en]
--language-man=lang language to use for the man pages [en]
--language-msg=lang language to use for the messages and the GUI [en]
--language=lang default language to use [en]

我的配置参数是这样的:

./configure --prefix=/opt/mplayer --language=zh_CN --language-doc=zh_CN --language-man=zh_CN --language-msg=zh_CN

这样编译安装的mplayer,使用man mplayer是看不到手册的,因为手册并不是在默认的man路径中。而是在/opt/mplayer/share/man中。我这样编译是为了实现“绿色软件”(Windows思想作怪),以后若不想要了,直接删除/opt/mplayer即可。

也可以指定--mandir=/usr/share/man,这样编译安装的mplayer,就可以直接通过man mplayer命令看到中文手册了。

四、安装codec库支持

在刚开始的几次编译中,我把Codec中的几十个参数一个个进行了添加。后来才发现我的做法是错误的。并非在参数中加上了-enable-x264 --enable-mp3lame,编译的时候就会将x264和mp3支持包含进去。相反的,如果系统中没有x264与lame库,编译的时候就会报错。正确的做法应该是安装对应的codec源码库,不使用任何的enabled参数,让配置文件自行检测是否支持该codec。

那么如何知道系统中是否包含需要的编码呢?可以使用重定向将configure显示的内容保存到一个文本文件中,然后查看文本文件即可。

./configure --prefix=/opt/mplayer --language=zh_CN --language-doc=zh_CN --language-man=zh_CN --language-msg=zh_CN > log.txt

打开log.txt,搜索“x264”,可以看到类似的文字:

Checking for x264 ... no (in libavcodec: no)

由此可以看出,系统默认是不支持x264编码的。同样的,常用的xvid、lame编码也是一概不支持的:

Checking for libmp3lame ... no (in libavcodec: no)
Checking for Xvid ... no

在文件底部,可以看到配置的参数以及支持和不支持的编码信息:

Config files successfully generated by ./configure --prefix=/opt/mplayer --language=zh_CN --language-doc=zh_CN --language-man=zh_CN --language-msg=zh_CN !

Install prefix: /opt/mplayer
Data directory: /opt/mplayer/share/mplayer
Config direct.: /opt/mplayer/etc/mplayer

Byte order: little-endian
Optimizing for: native

Languages:
Messages/GUI: zh_CN
Manual pages: zh_CN
Documentation: zh_CN

Enabled optional drivers:
Input: dvdnav(internal) ftp pvr tv-v4l2 tv-v4l tv libdvdcss(internal) dvdread(internal) vcd dvb network
Codecs: libavcodec(internal) qtx real xanim win32 faad2(internal) libmpeg2(internal) mp3lib(internal) tremor(internal)
Audio output: oss v4l2 mpegpes(dvb)
Video output: v4l2 pnm mpegpes(dvb) fbdev cvidix yuv4mpeg md5sum tga

Disabled optional drivers:
Input: vstream radio tv-dshow live555 nemesi cddb cdda smb
Codecs: libschroedinger libdirac x264 xvid libdv libopencore_amrwb libopencore_amrnb faac musepack libdca liba52 libtheora speex toolame twolame libmad liblzo gif OpenJPEG
Audio output: sun alsa openal jack pulse nas esd arts ivtv dxr2 sdl
Video output: zr zr2 ivtv dxr3 dxr2 matrixview opengl sdl vesa gif89a jpeg svga caca aa ggi xmga mga
ix winvidix 3dfx dga vdpau xvmc xv x11 dfbmga directfb bl xvr100 tdfx_vid wii s3fb tdfxfb

要系统支持这些codec也很简单,需要什么编码,在新立得里面搜索就可以了,例如,如果希望编译出来的mencoder支持xvid编码,就在新立得里面搜索“xvid”然后安装libxvidcore-dev即可,新立得会将相关的包一并选中。记住,搜索的时候可能有多个类似的包,但一定要安装-dev结尾的,这个才是源码。如下图:

新立得

我安装的所有支持包如下:

libxvidcore-dev libmp3lame-dev libdv4-dev libopencore_amrwb-dev libopencore_amrnb-dev libfaac-dev libmpcdec-dev libdts-dev liba52-0.7.4-dev libtheora-dev libspeex-dev libtwolame-dev libmad0-dev liblzo2-dev libgif-dev libopenjpeg-dev libjpeg62-dev

除了x264之外,常用的codec都在上面了。为什么不使用新立得安装x264呢?因为Ubuntu源中带的libx264-dev不能被自动识别。因此,需要自行下载x264编译安装,或者在这里下载国外网友打包好的deb进行安装。编译安装x264的方法放狗随便就能搜到。反正我是直接安装deb的 :em67:
这两个deb都要装:;

libx264-dev_0.96.1602+git69588a-1_i386.deb

libx264-96_0.96.1602+git69588a-1_i386.deb

安装带有dev这个的时候,Ubuntu会提示“您最好从软件仓库中安装libx264-dev,因为通常有更好的支持”,不要理他。

全部安装完成后,再执行configure一次,查看是否还有codec漏掉了。如果没问题的话,就可以编译了。

五、编译与安装

1.make的时间比较长,所以要有点耐心。当然如果是4核CPU就另当别论 :em67: 由于安装目录在/opt下,因此install的时候加上sudo:

make
sudo make install

2.将先前下载的外部codec复制到对应的文件夹:

tar xjf all-20100303.tar.bz2
sudo mkdir /opt/mplayer/lib/codecs
sudo mv all-20100303/* /opt/mplayer/lib/codecs/

3.由于安装路径不在系统路径中,因此制作链接让命令随时可用

cd /opt/mplayer/bin
sudo ln -s mplayer /usr/local/bin/mplayer
sudo ln -s mencoder /usr/local/bin/mencoder

4.在manpath.conf中添加环境变量
编辑/etc/manpath.config,在

MANDATORY_MANPATH /usr/local/share/man

一行下方加入

MANDATORY_MANPATH /opt/mplayer/share/man

如果在编译前指定了--mandir=/usr/share/man,这里就不用这么做了。

六、反安装与其他

由于编译的时候指定了路径,因此反安装的时候,只需要删除/opt/mplayer即可。

当然,也可以使用这个命名:

make uninstall

但这个命令删得并不干净,只会把文件删除,文件夹是仍然保留的。

我一共编译了20多次,才最终形成了上面这些经验。如果看完了上面文章,仍然不能一次编译成功的,最好在下次编译之前,执行一下这条命令:

make clean

好了!享受中文的Mplayer和MEncoder吧! {style="color:red"}