yasm linux gcc,Ubuntu下ffmpeg的编译过程及第三方代码库介绍

参考网上的资料编译安装了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不支持某些格式呢?原因我暂时不知道。

阅读(2710) | 评论(1) | 转发(0) |

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值