编译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的支持。html

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

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

1
sudo aptitude remove ffmpeg x264 libx264-dev

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

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源码包web

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,则须要按照以下的选项编译。windows

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/ide

相关文章
相关标签/搜索