参考网上的资料编译安装了ffmpeg和H.264,安装过程总结如下:
一.编译ffmpeg
1.安装gcc等
sudo apt-get install build-essential
动生成makefile的相关工具sudo apt-get install automake
sudo apt-get install vim
sudo apt-get install git-core
2.安装编译所需的工具和库
sudo apt-get remove ffmpeg x264 libx264-dev
sudo apt-get update
sudo apt-get install build-essential subversion git-core checkinstall texi2html libfaac-dev libopencore-amrnb-dev libopencore-amrwb-dev libsdl1.2-dev libtheora-dev libvorbis-dev libx11-dev libxfixes-dev libxvidcore-dev zlib1g-dev libavcodec-dev
再试一次
sudo apt-get -y install autoconf automake build-essential git libass-dev libgpac-dev
libsdl1.2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libx11-dev libxext-dev libxfixes-dev pkg-config texi2html zlib1g-dev
3.安装yasm
cd /usr/local
sudo apt-get install build-essential checkinstall
sudo apt-get build-dep yasm
wget && tar -xf yasm-1.2.0.tar.gz && cd yasm-1.2.0
./configure
make
sudo checkinstall --pakdir "$HOME/Desktop" --pkgname yasm --pkgversion 1.2.0 --backup=no --default
4.安装H.264
git clone git://git.videolan.org/x264.git
cd x264
./configure --enable-shared --enable-static(此处需要注意,H.264是第三方编码器库)
make
sudo make install
5.安装fdk-aac
git clone --depth 1 git://github.com/mstorsjo/fdk-aac.git
cd fdk-aac
autoreconf -fiv
./configure --prefix="$HOME/ffmpeg_build" --disable-shared
make
make install
6.安装libmp3lame
sudo apt-get install libmp3lame-dev
7.安装libopus
wget
tar xzvf opus-1.0.3.tar.gz
cd opus-1.0.3
./configure --prefix="$HOME/ffmpeg_build" --disable-shared
make
make install
8.安装libvpx
git clone --depth 1
cd libvpx
./configure --prefix="$HOME/ffmpeg_build" --disable-examples
make
make install
9.安装ffmpeg
cp /home/jxd/Downloads/ffmpeg-2.0.tar.bz2 /usr/local
tar -xjf ffmpeg-2.0.tar.bz2
mv ffmpeg-2.0 ffmpeg
cd ffmpeg
./configure --enable-shared --enable-gpl --enable-nonfree --enable-pthreads --enable-libfaac --enable-libmp3lame --enable-libtheora --enable-libxvid --enable-x11grab --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopencore-amrnb --enable-version3 --enable-libx264 --enable-encoder=libx264
make
make install
安装完毕,但是执行ffplay时会报下面的错:
ffplay: error while loading shared libraries: libavdevice.so.52: cannot open shared object file: No such file or directory
这个是因为默认的*.so库是安装到了/usr/local/lib这个目录下面,这个目录并不是系统默认的路径,所以会说找不到文件或目录。解决方法有两种:
1. 把/usr/local/lib目录下的库拷贝到/usr/lib下面。
2. 修改/etc/ld.so.conf文件,在下面加上一行include /usr/local/lib,然后执行一下sudo ldconfig。
编译ffmpeg/libavcodec/api-example.c命令:
gcc -o api-example api-example.c -lavcodec -lavformat -lavutil
二.第三方编码器库(如H.264)
安装好了ffmpeg后,如果你使用ffmpeg工具去把某个视频文件转成h264视频编码、mp3音频编码或其他ffmpeg自身不带的xxx编码类型,就会看到报错信息,unknown encoder 'xxx'。此刻你需要去安装其他的编码器,本质上其实是把其他的编码器以库的形式安装好,例如,把正确的libx264.so or libx264.a存放在/usr/lib下 or /usr/local/lib下。
举两个例子吧,视频方面的编码器就拿h264来说,音频方面的例子就拿mp3(mp3lame)来说。
Linux下安装一个正规的软件,一般都是三部曲./configure(加一些可能的参数,比如enable一些功能,disable一些功能,究竟有哪些功能可以开启和关闭呢?一般通过./configure --help命令来查询);make(编译);sudo make install(把生成的二进制应用程序文件和.so和.a复制到/usr/local/下)
1.h264
动手搜一下ffmpeg的工程代码库,会发现每个codec都有一下几个成员变量,但是有好几个codec缺少encoder,h264就是其中一个了。先不管什么原因,ffmpeg没有原生的支持h264,但是你可以查看一下avcodec_register_all这个API,会发现一大片的REGISTER_ENCODER(XXX, xxx)REGISTER_DECODER(XXX, xxx)
这里分很多块,例如/* video codecs */,/* audio codecs */,/* external libraries */但是你在/* video codecs */这一块却看不到h264的REGISTER_ENDECODER (H264, h264);这句话,如果你坚持往下翻,你会在/* external libraries */这块里面发现REGISTER_ENCODER (LIBX264, libx264);所以ffmpeg是有给h264准备好了接口的,但是需要第三方库来支持。
怎么安装呢?
安装方法如前所示,只要注意./configure的参数
进入x264目录,然后./configure --help看看它的帮助信息,我们这里需要的是x264以.so or .a的形式来支援ffmpeg,所以一般就关注shared和static关键词就可以了。执行./configure --enable-shared --enable-static就行了。
在./configure的时候没有指定前缀--prefix=/usr,很明显,libx264.so和libx264.a就会复制到/usr/local/lib下去,记住这里,等下会因为这里要做一些修改。
2.mp3lame
下载mp3lame的工程代码,。可以看到x264用的是git,mp3lame是用的sourceforge,不妨再多说一个faac(也是一种原生ffmpeg不支持的音频codec),faac用的是,所以每一种codec或者很重要的软件都有一个团队或者社区在维护,所以需要什么东西,尽量去sourceforge或者git上找,其他地方找的可能不够新,可能不完整不正确。
先./configure --help,看看哪些功能是我们需要打开关闭的,完了make && sudo make install就可以了。
很明显,我们又没有指定--prefix-/usr,所以mp3lame的libmp3lame.so和libmp3lame.a就被赋值到了/usr/local/lib下了。
3.重新编译ffmpeg
ffmpeg主要还是用来解码,所以部分格式的encoder却没有,所以才会有第三方库支援,为什么原生ffmpeg不支持某些格式呢?原因我暂时不知道。
阅读(3656) | 评论(1) | 转发(0) |