ffmpeg 配置与编译
生活随笔
收集整理的這篇文章主要介紹了
ffmpeg 配置与编译
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
| 本文標(biāo)簽(Tag) | |
| ffmpeg 配置 編譯 | |
1 ffmpeg介紹 ?? ffmpeg是音視頻的分離,轉(zhuǎn)換,編碼解碼及流媒體的完全解決方案,其中最重要的就是libavcodec庫(kù)。它被mplayer或者xine使用作為×××。還有,國(guó)內(nèi)比較流行的播放器影音風(fēng)暴或MyMPC的后端ffdshow也是使用ffmpeg的解碼庫(kù)的。 ? ??? ffmpeg軟件包經(jīng)編譯過(guò)后將生成三個(gè)可執(zhí)行文件,ffmpeg,ffserver,ffplay。其中ffmpeg用于對(duì)媒體文件進(jìn)行處理,ffserver是一個(gè)http的流媒體服務(wù)器,ffplay是一個(gè)基于SDL的簡(jiǎn)單播放器。 ? ??? ffmpeg 中有五個(gè)庫(kù)文件,libavcodec,libavformat,libavutil,libswscale,libpostproc,其中庫(kù) libavcodec,libavformat用于對(duì)媒體文件進(jìn)行處理,如格式的轉(zhuǎn)換;libavutil是一個(gè)通用的小型函數(shù)庫(kù),該庫(kù)中實(shí)現(xiàn)了CRC校驗(yàn)碼的產(chǎn)生,128位整數(shù)數(shù)學(xué),最大公約數(shù),整數(shù)開(kāi)方,整數(shù)取對(duì)數(shù),內(nèi)存分配,大端小端格式的轉(zhuǎn)換等功能;libswscale,libpostproc 暫時(shí)不知道何用。 ? 2 ffmpeg下載 ??? 最新的ffmpeg可以通過(guò)svn下載,SVN輔助的軟件有: ??? SubVersion,從 http://subversion.tigris.org/ 下載,支持linux。 ??? TortoiseSVN,從 http://tortoisesvn.tigris.org/ 下載,是很不錯(cuò)的SVN客戶(hù)端程序,為windows外殼程序集成到windows資源管理器和文件管理系統(tǒng)的Subversion客戶(hù)端,用起來(lái)很方便。 ? ??? subversion安裝,記住最好之前裝過(guò)apr和apr-util,在apache.org網(wǎng)站能下到 ??? wget http://subversion.tigris.org/downloads/subversion-1.3.2.tar.gz ??? tar zvxf subversion-1.3.2.tar.gz ??? cd subversion-1.3.2 ??? ./configure --with-apr=/usr/local/apr-httpd --with-apr-util=/usr/local/apr-util-httpd/ ??? make ??? make install ??? 如果安裝了FC6,它已經(jīng)帶了svn,不用裝了。 ? ??? ffmpeg的下載:我們就可以通過(guò)svn命令獲取最新的ffmpeg,命令如下: ??? svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg ? 3 ffmpeg支持庫(kù)的安裝 * xvid ??? xvid的獲取地址如下: http://www.xvid.org/ ??? wget http://downloads.xvid.org/downloads/xvidcore-1.1.3.tar.gz ??? 配置編譯 ??? for x86 ?#./configure --prefix=/usr/local ?#make ?#make install ??? for arm ?#CC=arm-linux-gcc ./configure --prefix=/usr/local/arm/arm-linux --build=i686-pc-linux --host=arm-linux --target=arm-linux ?#make ?#make install ? * x264 ??? x264的獲取地址如下: svn co svn://svn.videolan.org/x264/trunk x264 ??? 配置編譯 ??? for x86 ?#./configure --enable-shared --prefix=/usr/local ?#make ?#make install ??? for arm ?#CC=arm-linux-gcc ./configure --enable-pthread --enable-shared --host=arm-linux --prefix=/usr/local/arm/arm-linux ?#make ?#make install ? * 支持mp3 ??? lame的獲取地址如下: http://lame.sourceforge.net/index.php ??? 配置編譯 ??? for x86 ?./configure --enable-shared --prefix=/usr/local ? * 支持Ogg Vorbis: ? * AC3和dts編碼的支持 ??? libdts編譯參數(shù) ./configure --prefix=/usr make make install ? * mpg4 aac格式支持, ??? 如果ffserver服務(wù)器還針對(duì)手機(jī)用戶(hù)服務(wù),所以,類(lèi)似aac,mpg4鈴聲格式的支持,我們也得做。這里我們安裝faad2和faac就行,下載請(qǐng)到http://www.audiocoding.com/modules/mydownloads/,http://prdownloads.sourceforge.net/faac ??? FAAD2的編譯 cd faad2 autoreconf -vif ./configure --prefix=/usr --with-mp4v2 --enable-shared make make install ??? faac的編譯 cd faac chmod +x bootstrap ./bootstrap ./configure --prefix=/usr --with-mp4v2 --enable-shared make make install ??? 在編譯ffmpeg,在configure時(shí)加上--enable-amr_nb --enable-faad --enable-faac參數(shù)。 ? * 支持3gp格式, ??? 這也是現(xiàn)在好多手機(jī)支持的格式,所以也得支持編譯, 編譯的時(shí)候加上--enable-amr_nb --enable-amr_wb參數(shù)就行,根據(jù)編譯系統(tǒng)的提示,所以我們得下載一些編譯3gp所需得文件。 源碼網(wǎng)址:http://www.3gpp.org/ftp/Specs wget http://www.3gpp.org/ftp/Specs/archive/26_series/26.204/26204-510.zip 解壓以后把里面的文件都拷貝到libavcodec/amrwb_float wget http://www.3gpp.org/ftp/Specs/archive/26_series/26.104/26104-510.zip 解壓以后把里面的文件都拷貝到libavcodec/amr_float ? * ffmpeg支持VC1格式 ??? 微軟ASF格式的三個(gè)版本,WMV1,WMV2,WMV3分別對(duì)應(yīng)MediaPlayer的版本7,8和9,所以很多時(shí)候會(huì)稱(chēng)VC1為WMV3或WMV9,都是它了,有時(shí)候在代碼里,也能看到稱(chēng)呼它為VC9的。因?yàn)槲④涍€沒(méi)有正式公開(kāi)這種格式,所以當(dāng)前對(duì)VC1的支持還很不完善。本文基本是根據(jù) Multimedia Mike 的一篇博客翻譯和完善而來(lái)。 ??? (1) 首先要下載 SMPTE VC-1 reference decoder,這個(gè)組織是要收費(fèi)的,可以從這里下載免費(fèi)的。 ??? (2) 在ffmpeg目錄下的libavcodec目錄下面,建立目錄libvc1。 ??? (3) 將VC1_reference_decoder_release6/decoder/目錄中的*.c和*.h文件全部copy到libvc1目錄下。 ??? (4) 將VC1_reference_decoder_release6/shared/目錄中的*.c和*.h文件全部copy到libvc1目錄下。 ??? (5) 將 libvc1-makefile.txt放到libvc1下的Makefile文件。 ??? (6) 將smpte-vc1.c文件放到libavcodec目錄下。 ??? (7) 修改libavcodec目錄下的vc9.c,將文件最后的wmv3_decoder這個(gè)AVCodec的structure,用#if 0和#endif包含起來(lái),也就是使它失效了。 ??? (8) 修改libavcodec目錄下的allcodecs.c,將register_avcodec(&wmv3_decoder)上下的注釋去掉,使它發(fā)揮作用。 ??? (9) 修改libavcodec目錄下的Makefile,把OBJS的列表中加入smpte-vc1.o。 ??? (10)修改ffmpeg主目錄下的Makefile文件,把-L./libavcodec/libvc1 -lvc1$(BUILDSUF)加入到FFLIBS后面。 ??? (11) 進(jìn)入ffmpeg/libavcodec/libav1,執(zhí)行make ??? (12) 到ffmpeg主目錄下,執(zhí)行config;make;make install。config時(shí)根據(jù)實(shí)際情況帶參數(shù)。 ? * 采用ffmpeg轉(zhuǎn)碼制作FLV文件的方法 ??? 采用ffmpeg轉(zhuǎn)碼制作FLV文件,和轉(zhuǎn)碼成其它媒體類(lèi)型的重要差別是一定要有l(wèi)ame庫(kù)支持,因?yàn)镕LV的聲音編碼采用mp3格式,非lame這個(gè)東東不行。編譯ffmpeg中加入lame庫(kù)真是一場(chǎng)災(zāi)難,特別在windows下,很多參數(shù)都不能發(fā)揮作用,最后直接手工copy和改一些文件,記錄如下: ??? (1) 如果在Windows下編譯,第一步當(dāng)然是下載MinGW和MSYS來(lái)裝上了。到http://mingw.sourceforge.net/去下載最新版的MinGW-5.0.2.exe和MSYS-1.0.11-2004.04.30-1.exe。 ??? (2) 先安裝MinGW,直接運(yùn)行MinGW-5.0.2.exe安裝,選擇目錄,譬如選擇D:\MinGW為安裝目錄。安裝時(shí)需要選擇gcc和make模塊,安裝文件本身很小,會(huì)從網(wǎng)上下載模塊來(lái)安裝。 ??? (3) 然后安裝MSYS,也是直接運(yùn)行MSYS-1.0.11-2004.04.30-1.exe安裝。安裝目錄一般選擇D:\MinGW\bin \1.0。,安裝過(guò)程會(huì)詢(xún)問(wèn)剛才安裝MinGW的目錄,輸入D:\MinGW,其它都回答'Y'就搞定了。如果不清楚,可以看這個(gè)圖片效果。 ??? (4) 運(yùn)行MSYS,桌面上有個(gè)圖標(biāo),雙擊就運(yùn)行了,運(yùn)行結(jié)果是一個(gè)模擬unix的命令窗口,后面的編譯都在這種狀態(tài)下進(jìn)行。前面4步在linux不需要。 ??? (5) 到http://lame.sourceforge.net/去下載最新版的lame-3.97b2.tar.gz,copy到你認(rèn)為合適的地方,解壓后進(jìn)入lame解壓出來(lái)的目錄中。執(zhí)行 ??????? ./configure --prefix=PREFIX ??????? make ??????? make install ??? (6) 就把編譯出來(lái)的include下的lame目錄copy到/usr/include目錄下,把lib下的幾個(gè)庫(kù)文件都copy到/usr/lib目錄下。這里注意有個(gè)變化,如果只copy lib目錄下的靜態(tài)庫(kù)到/usr/lib下,就是只copy libmp3lame.a文件,編譯出來(lái)的ffmpeg最終就不會(huì)對(duì)libmp3lame的動(dòng)態(tài)庫(kù)有依賴(lài)關(guān)系,這是因?yàn)榫幾g首先找動(dòng)態(tài)庫(kù),動(dòng)態(tài)庫(kù)沒(méi)有才找靜態(tài)庫(kù)。如果不做這個(gè)copy,后面編譯ffmpeg時(shí)無(wú)論如何指定參數(shù),都會(huì)報(bào)錯(cuò)LAME not found,不知道是哪里的bug。 ??? (7) 從http://ffmpeg.mplayerhq.hu/取得最新的ffmpeg,現(xiàn)在自由軟件都大量采用SVN了,要先裝一個(gè)SVN,可以去http://tortoisesvn.tigris.org/下載windows版的SVN,去http://subversion.tigris.org/下載linux版的SVN。SVN如何編譯安裝這里就省略了。 ??? (8) 如果在windows下,打開(kāi)解壓后的ffmpeg目錄下的Makefile文件,在FFLIBS的那一行后面加上-lmp3lame$(BUILDSUF)。這個(gè)也不知道是哪個(gè)bug引起的,搞了好長(zhǎng)時(shí)間才搞出來(lái),郁悶。Linux下不用這樣。 ? 4 ffmpeg的編譯 ? ??? 配置編譯 ??? for x86 #./configure --prefix=/usr --enable-gpl --enable-shared --enable-mp3lame --enable-amr_nb --enable-amr_wb --enable-amr_if2 --enable-libogg --enable-vorbis --enable-xvid --enable-a52 --enable-a52bin --enable-faadbin --enable-dts --enable-pp --enable-faad --enable-faac --enable-x264 --enable-pthreads --disable-ffserver --disable-ffplay make make install ? 補(bǔ)充1: 關(guān)于3gp的編譯,如果大家要編譯--enable-amr_nb-fixed,那就不能跟--enable-amr_nb同時(shí)編譯,我不大清楚這兩者到底有什么區(qū)別,似乎fixed是修正版,管他呢,編譯的方法: wget http://www.3gpp.org/ftp/Specs/archive/26_series/26.073/26073-510.zip 解壓以后把里面的文件都拷貝到libavcodec/amr目錄下 ? 修改libavcodec/amr/makefile 找到CFLAGS = -Wall -pedantic-errors -I. $(CFLAGS_$(MODE)) -D$(VAD) 換成CFLAGS = -Wall -I. ? $(CFLAGS_$(MODE)) -D$(VAD) -DMMS_IO ? 整體編譯參數(shù)就是 #./configure --prefix=/usr --enable-gpl --enable-shared --enable-mp3lame --enable-amr_nb-fixed --enable-amr_wb --enable-amr_if2 --enable-libogg --enable-vorbis --enable-xvid --enable-a52 --enable-a52bin --enable-dts --enable-pp --enable-faad --enable-faadbin --enable-faac --enable-x264 --enable-pthreads --disable-ffserver --disable-ffplay make make install ? ?for x86的簡(jiǎn)易配置 #./configure --prefix=./install --disable-shared --enable-pthreads --enable-libx264 --enable-libxvid --arch=i686 --enable-gpl #make #make install ? ??? for arm ??? 配置編譯 #./configure --prefix=/home/zht/redhatzht/sources/image-colletct/ffmpeg/install --enable-static --disable-shared --enable-libx264 --enable-libxvid --cross-compile --cc=arm-linux-gcc --arch=arm --enable-gpl --disable-strip --disable-network --disable-ipv6 --disable-vhook --disable-audio-beos --disable-audio-oss --disable-mpegaudio-hp? --enable-pthreads --enable-small --disable-parsers --disable-debug #make #make install ? 注意: ? (1)“/home/zht/redhatzht/sources/image-colletct/ffmpeg”為ffmpeg源碼所在目錄。 (2)“/usr/local/arm”為arm-linux-gcc交叉編譯器所在目錄。 (3) 如果庫(kù)文件安裝在/usr/local/lib目錄中導(dǎo)致配置失敗,可以在/etc/ld.so.conf文件中添加/usr/local/lib目錄,然后執(zhí)行#ldconfig。 ??? x86上的ldconfig不能在arm上運(yùn)行,arm上的ldconfig工具是在建立交叉編譯器時(shí),編譯glibc是產(chǎn)生的,可以拷貝到arm-linux中。 (4) 本文大部分內(nèi)容來(lái)自網(wǎng)絡(luò),其中xvid,x264的庫(kù),我親手安裝過(guò),ffmpeg的配置編譯for x86的簡(jiǎn)易配置,for arm,我親手配置編譯過(guò),并在x86,arm上可用,編譯配置都是采用靜態(tài)庫(kù)。 |
轉(zhuǎn)載于:https://blog.51cto.com/prothesman/1411477
總結(jié)
以上是生活随笔為你收集整理的ffmpeg 配置与编译的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 韩式自助烤肉宣传文案30句
- 下一篇: Dll 导出类 [示例代码]