编译opencv添加x264和ffmpeg支持

从参加工作到现在,使用opencv已经有近五个月的时间,从刚开始误入歧途学习1.x版本的API到后来纠正学习路线,再到用Opencv做很多 图像处理工作。在这过程中,opencv从2.4.3更新到了2.4.5,每一次都让我有一种耳目一新的感觉,当我使用2.4.3编写程序要被java调 用时,刚开始想到采用JNI,但是发现2.4.3到2.4.4的更新正式添加了的java的支持,虽然在2.4.3之前就有java版本的opencv, 但是是由一个岛国程序猿贡献的,性能不是特别好。当我使用2.4.4工作的是对CLAHE算法进行纠结的时候,2.4.5出现了,其中一条就是添加 CLAHE的算法,让我又小激动了一下。随着使用的时间越来越长,对opencv的module也了解的越来越清楚,甚至都发现了一两个小bug自己动手 进行了修复,然后重新编译。废话不多说了,之前最视频采集压缩编码时发现对H264编码的不支持,于是回忆起半年过前做基于ARM的嵌入式视频采集项目时 利用x264和ffmpeg作h264编码压缩,这次同样采用这种方法进行,于是乎进行添加x264和ffmpeg的支持。

过程如下(环境Ubuntu12.04.2 LTS):

1.清除原有的x264和ffmpeg,方面后续的手动编译(aptitude与apt-get的等同,在处理包的依赖关系时更加优秀,所以我一般采用这个软件包管理工具)。

1
sudo aptitude remove ffmpeg x264 libx264-dev

2.安装x264和ffmpeg依赖的软件包

1
2
sudo aptitude update
sudo aptitude install build-essential checkinstall git cmake libfaac-dev libjack-jackd2-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libsdl1.2-dev libtheora-dev libva-dev libvdpau-dev libvorbis-dev libx11-dev libxfixes-dev libxvidcore-dev texi2html yasm zlib1g-dev

3.下载并编译安装x264源码包

ftp://ftp.videolan.org/pub/videolan/x264/snapshots/下 载一个稳定的x264源码包,不需要太新,但也不要太老,太新的源码包依赖于较新的其他包,比如x264-20130531stable依赖yasm版本 要高一些,但是apt源中提供的版本较低,需要手动编译yasm。假如yasm需要其他更新的包,这样就更加繁琐了,为了方便我这里采用一年前的安装包。

1
2
3
4
5
6
7
8
cd /opt
sudo wget ftp : //ftp .videolan.org /pub/videolan/x264/snapshots/x264-snapshot-20120601-2245-stable . tar .bz2
sudo tar -xvf x264-snapshot-20120601-2245-stable. tar .bz2
cd x264-snapshot-20120601-2245-stable
#如果使用的32位的linux,按照如下选项编译即可。
sudo . /configure -- enable -static -- enable -shared
sudo make
sudo make install

如果你使用的是64位的linux,则需要按照如下的选项编译。

1
2
3
sudo . /configure -- enable -shared -- enable -pic
sudo make
sudo make install

否则在编译opencv过程中,会出现如下错误提示:
Linking CXX shared library ../../lib/libopencv_highgui.so
/usr/bin/ld: /usr/local/lib/libavcodec.a(avpacket.o): relocation R_X86_64_32S against `av_destruct_packet’ can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libavcodec.a: could not read symbols: Bad value
大概是编译到26%的过程中.
3.下载并编译安装ffmpeg(由于ffmpeg需要先安装x264,所以顺序不能颠倒)
最新版本的ffmpeg可以到http://ffmpeg.org/download.html下载,这里我采用的是1.2.1的版本。过程如下:

1
2
3
4
5
6
7
8
9
10
11
12
cd /opt
sudo wget http: //ffmpeg .org /releases/ffmpeg-1 .2.1. tar .bz2
sudo tar -xvf ffmpeg-1.2.1. tar .bz2
cd ffmpeg-1.2.1
#如果是linux32位平台
sudo . /configure -- enable -gpl -- enable -libfaac -- enable -libmp3lame -- enable -libopencore-amrnb -- enable -libopencore-amrwb -- enable -libtheora -- enable -libvorbis -- enable -libx264 -- enable -libxvid -- enable -nonfree -- enable -postproc -- enable -version3 -- enable -x11grab
sudo make
sudo make install
#如果是linux64位平台
sudo . /configure -- enable -gpl -- enable -libfaac -- enable -libmp3lame -- enable -libopencore-amrnb -- enable -libopencore-amrwb -- enable -libtheora -- enable -libvorbis -- enable -libx264 -- enable -libxvid -- enable -nonfree -- enable -postproc -- enable -version3 -- enable -x11grab -- enable -shared -- enable -pic
sudo make
sudo make install

这样x264和ffmpeg就编译安装完成了,其中特别注意的是如果是其他架构的CPU,比如64位或者ARM架构的,configure选项是不 同的,其中64位的cpu架构特别需要–enable–shared –enable-pic选项。否则就会报上述错误,如果没有–enable-shared会默认编译为静态库,但是编译opencv的时候链接器无法识别 该库,至于–enable-pic选项原因暂时未知,不过在编译ffmpeg的时候经常需要这个选项。
4.安装opencv2.4.5
这是目前最新版的opencv了,下载之后,放到/opt目录下

1
2
3
4
5
6
7
cd /opt/opencv-2 .4.5
mkdir release
cd release
#cmake如果有其他需要的话可以根据官方文档进行添加,比如添加TBB支持,-DWITH_TBB=ON
cmake ..
sudo make
sudo make install

这样,为opencv编译x264和ffmpeg就安装完成了。
总结:
很久没用采用源码包编译安装程序了,这次编译让我回忆起了几年前刚学习linux源码包安装的时的乐趣。几年过去了,Linux也从虚拟机搬到了我实体 机,“windows7下虚拟机安装linux的日子”变成了现在“linux下虚拟机安装windows7”的日子。手中管理的Linux VPS和服务器也越来越多。也许大学给我的其中之一就是“喜欢”上linux?在linux下开发我还是个小菜鸟,希望未来的很长的日子里,我可以从在 linux下开发发展为对linux开发。
编译参考:
A Comprehensive Guide to Installing and Configuring OpenCV 2.4.2 on Ubuntu Web Site:http://www.ozbotz.org/opencv-installation/
Sebastian Montabone has several articles on installing OpenCV and image processing. His web site is http://www.samontab.com/


转载于:https://my.oschina.net/u/1757926/blog/305517

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值