Ubuntu 编译安装ffmpeg,mplayer,x264全教程支持VDPAU(高清硬解)

来源:互联网 发布:linux 一直ping的命令 编辑:程序博客网 时间:2024/04/29 07:45
这个是针对Ubuntu 10.04 AMD64的安装ffmpeg,mplayer,x264全教程,包括VDPAU
Ubuntu 10.10AMD64也是可以的。

目前mplayer仍然使用svn,编译mplayer时要把ffmpeg的代码拷贝进去。!
libxvidcore4-dev 这个包在10.10里面是libxvidcore-dev 这个名字


普通版
我的工作根目录为~/src
确定之前没有安装过ffmpeg,mplayer,x264,有则卸载。
代码:
sudo apt-get --purge remove ffmpeg mplayer x264

安装依赖包
1.偷懒法
这里输出了文件是为了记录所安装的依赖包,以便日后删除。
代码:
sudo apt-get build dep ffmpeg mplayer x264 >>aptlog.log

2.仔细法
代码:
sudo apt-get install build-essential subversion git-core checkinstall yasm texi2html libfaad-dev libfaac-dev libmp3lame-dev libtheora-dev libvorbis-dev libxvidcore4-dev libschroedinger-dev libspeex-dev libgsm1-dev libgtk2.0-dev

下载需要的源代码包
1.x264
代码:
git clone git://git.videolan.org/x264.git

2.ffmpeg
代码:
git clone git://git.videolan.org/ffmpeg.git

3.libnut(AMD64特殊需求)
代码:
svn checkout svn://svn.mplayerhq.hu/nut/src/trunk libnut

4.mplayer
代码:
svn checkout svn://svn.mplayerhq.hu/mplayer/trunk mplayer

把它们都下载在工作根目录下
开始编译
1.编译x264
切换到工作根目录,后输入
代码:
 cd x264
./configure --enable-shared
make
sudo checkinstall --fstrans=no --install=yes --pkgname=x264 --pkgversion "3:0.git`date +%Y%m%d`-0.0ubuntu1"
sudo ldconfig

有问题就一路回车
有双核的或以上的可以在make后加-j 2参数,提高效率。(3核用-j 3,类推)。这里”j"后的空格可加可不加,还有数字大于核心数也没问题,就是不要太大了,应CPU而异。
代码:
make -j 2

2.编译libnut(注意,它一定要在ffmpeg之前编译,否则ffmpeg会报错,当然只要不加--enable-libnut就行了)
切换到工作根目录,后输入
代码:
cd libnut
gedit config.mak


代码:
CFLAGS += -Os -fomit-frame-pointer -g -Wall

改成
代码:
CFLAGS += -Os -fomit-frame-pointer -Wall -fPIC

保存
编译
代码:
make libnut
make prefix=/usr install-libnut

3.编译ffmpeg
切换到工作根目录,后输入
代码:
cd ffmpeg
./configure-enable-gpl --enable-shared --enable-postproc --enable-nonfree  --enable-x11grab --enable-bzlib  --enable-libfaac --enable-libmp3lame --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libxvid --enable-zlib --disable-ffplay --disable-debug --disable-indev=oss --disable-outdev=oss --enable-libvpx

代码:
sudo checkinstall --fstrans=no --install=yes --pkgname=ffmpeg --pkgversion "0.8

有问题就一路回车
4.编译mplayer
需要复制一份ffmpeg的代码到其目录下(不是工作根目录),文件名要叫 ffmpeg 而不是ffmpeg-0.8之类的!不要使用软链接!
编译它就比较简单了。
切换到工作根目录
代码:
cd mplayer
./configure --disable-jack --disable-fbdev --disable-svga --disable-aa --disable-ossaudio --disable-esd --yasm=/usr/bin/yasm --disable-caca --disable-dga2 --disable-dga1 --disable-v4l2 --disable-directfb

代码:
sudo checkinstall --fstrans=no --install=yes --pkgname=mplayer --pkgversion "1.0rc4"


最后为了防止系统将自己的老旧包(新的也一样)替换调我们辛辛苦苦编译的包,

在新利得中分别搜索ffmpeg,mplayer,x264,分别选中它们,在新利得菜单->软件包->锁定软件包


VDPAU版

注意Nvidia显卡用户请使用非开源驱动。请要先安装ibvdpau1可以安装nvidia-cg-toolkit并检测/usr/include/vdpau下是否有两个.h文件,因为nvidia的驱动有vdpau的so文件

目前(linux-3.4.11)xen的dom0下不可用
有双核的或以上的可以在make后加-j 2参数,提高效率。(3核用-j 3,类推)。这里”j"后的空格可加可不加,还有数字大于核心数也没问题,就是不要太大了,应CPU而异。


我的工作根目录为~/src
确定之前没有安装过ffmpeg,mplayer,有则卸载。

代码:
sudo apt-get --purge remove ffmpeg mplayer x264


安装依赖包
1.偷懒法
这里输出了文件是为了记录所安装的依赖包,以便日后删除。
代码:
sudo apt-get build dep ffmpeg mplayer  >>aptlog.log

2.仔细法
代码:
sudo apt-get install build-essential subversion git-core checkinstall yasm texi2html libfaad-dev libfaac-dev libmp3lame-dev libtheora-dev libvorbis-dev libxvidcore-dev libschroedinger-dev libspeex-dev libgsm1-dev libgtk2.0-dev autoconf

在现在的NVIDIA驱动中,VDPAU头文件不再包含,需要编译或安装libvdpau-dev,方法如下:
代码:
git clone git://anongit.freedesktop.org/~aplattner/libvdpau
cd libvdpau
./autogen.sh
./configure --prefix=/usr
make

主体软件
1.ffmpeg
代码:
git clone git://git.videolan.org/ffmpeg.git

2.libnut(不要也行,编译ffmpeg时去掉--enable-libnut)
代码:
svn checkout svn://svn.mplayerhq.hu/nut/src/trunk libnut

3.mplayer
代码:
svn checkout svn://svn.mplayerhq.hu/mplayer/trunk mplayer

把它们都下载在工作根目录下
开始编译
1.编译libnut(注意,它一定要在ffmpeg之前编译,否则ffmpeg在AMD64系统下会报错,幷不是VDPAU所必需)
切换到工作根目录,后输入
代码:
cd libnut
gedit config.mak


代码:
CFLAGS += -Os -fomit-frame-pointer -g -Wall

改成
代码:
CFLAGS += -Os -fomit-frame-pointer -g -Wall -fPIC

保存
编译
代码:
make libnut
make prefix=/usr install-libnut

2.编译ffmpeg
这里有两个方法,标准打包与定制方法
i)标准
复制附件中的ff_mplayer.tar.gz下的debian文件到ffmpeg的源代码下
切换到工作根目录,后输入
代码:
mv ffmpeg ffmpeg-0.8
cd ffmpeg-0.8
fakeroot debian/rules binary

代码:
mv ffmpeg ffmpeg-0.8
tar zcvf  ffmpeg-0.8.tar.gz  ffmpeg-0.8/ --exclude-vcs
cd ffmpeg-0.8
dh_make -f ../ ffmpeg-0.8.tar.gz
fakeroot debian/rules binary

ii)定制
切换到工作根目录,后输入
代码:
cd ffmpeg
./configure-enable-gpl --enable-shared --enable-postproc --enable-nonfree  --enable-x11grab --enable-bzlib  --enable-libfaac --enable-libmp3lame --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libxvid --enable-zlib --disable-ffplay --disable-debug --disable-indev=oss --disable-outdev=oss --enable-libvpx

代码:
make -j 2

打包
代码:
tar zcvf ffmpeg

代码:
sudo checkinstall --fstrans=no --install=yes --pkgname=ffmpeg --pkgversion "0.8"

有问题就一路回车

3.编译mplayer
需要复制一份ffmpeg的代码到其目录下(不是工作根目录),文件名要叫 ffmpeg 而不是ffmpeg-0.8之类的!不要使用软链接!
i)标准
解压复制附件中的 mp_debian.tar.gz 下的debian文件到ffmpeg的源代码下
切换到工作根目录,后输入
代码:
cd mplayer
fakeroot debian/rules binary

安装工作根目录下的 mplayer 或 mplayer-nogui 即可。

ii)定制
编译它就比较简单了。
切换到工作根目录
代码:
cd mplayer
./configure --disable-jack --disable-fbdev --disable-svga --disable-aa --disable-ossaudio --disable-esd --yasm=/usr/bin/yasm --disable-caca --disable-dga2 --disable-dga1 --disable-v4l2 --disable-directfb --enable-vdpau

代码:
make -j 2

这里屏蔽了一些滤镜和音频输出,其实不屏蔽也行,只是我为了好看还有那些是不常用的。
打包
代码:
sudo checkinstall --fstrans=no --install=yes --pkgname=mplayer --pkgversion "1.0rc4"

最后为了防止系统将自己的老旧包(新的也一样)替换调我们辛辛苦苦编译的包,
在新利得中分别搜索ffmpeg,mplayer,分别选中它们,在新利得菜单->软件包->锁定软件包。
还有如果没打make命令编译,打包时会自动编译。
注意:如果直接使用mplayer播放时,不仅要指定
代码:
-vo vdpau
,还要指定解码器
代码:
-vc ffh264vdpau

具体请看mplayer的man page,大概在2819行那里。
知识补充
H.264才是一种视频的编码格式,x264只是一个开源的H.264编码器(encoder),不是一种视频的编码格式。
libnut是nut容器的支持可,nut容器是开源的,不过很少有见到使用。
看看效果,图片是调整过分辨率的,我的屏幕是1080P的。成功后如果是VDPAU可处理的格式(如MPEG-1、MPEG-2、MPEG-4 AVC(H.264)、VC-1和WMV3/WMV9)mplayer的CPU占用律是不会超过5%(和显卡有关)
如果ffmpeg检测不到alsa,mplayer检测不到pulse audio,就安装libasound2-dev 和 libpulse-dev 。
对于jack 我做一点说明,因为mplayer的jack部分代码没有做到线程安全,所以有的时候mplayer会卡在,是因为mplayer的jack client 死了,这时只有重新开始(stop)就行了,也可增大jackd的buffer.另外这个问题也会带来花屏,也只能重新开始(stop)解决,可能要几次才行。