編譯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

相關文章
相關標籤/搜索