windows系統下_ffmpeg編譯

來源:互聯網
上載者:User

http://blog.csdn.net/himulakensin/article/details/6693457

ffmpeg開源庫在linux系統下弄的,是一個很全的音頻和視頻的編解碼庫要在windows下編譯出用於開發的lib庫確實比linux下要麻煩,百度了很久,參照別人的見解終於成功編譯出自己需要的可以用於開發的庫(dll的形式,附帶dll的lib,靜態庫不會編) 

編譯環境:window xp,vs2008(vs2003也成功編過一次),MinGW+msys百度出來的多數說的比較麻煩,特別是下載一些MinGW+msys的檔案,隨著時間的更新,實際上已經沒有那麼麻煩了。 

1.首先去下載MinGW,去http://sourceforge.net/搜尋mingw,下載一個最新的名字類似於mingw-get-inst-20110802.exe的檔案這個檔案一般只有幾百K位元組,下完以後雙擊運行,按提示安裝,在需要選擇的時候把和C、C++、msys相關的都選上,然後繼續自動安裝,然後需要等待一些時間(因為是下載檔案安裝的方式)。。。。MinGW+msys系統便已經安裝好了,我安裝的路徑是C:\MinGW,
msys的目錄就是C:\MinGW\msys\1.0,下面都是按此路徑說的(路徑隨便放哪都可以) 

2.編輯C:\MinGW\msys\1.0\msys.bat檔案,在最前面加入一行

call "C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\vcvars32.bat"

後面路徑是你機器上安裝了vs200x的對應路徑,加入這行編譯ffmpeg時會多出windows下調用dll對應的lib,方便vs200x調用,好像就看到ffmepg會生產,測試過xvid和x264及一些其他庫都沒產生,ffmpeg太仁慈了。 

3.去ffmpeg的官方網站http://ffmpeg.org/上下載一個最新的版本,此時的版本是0.8,檔案很小,應該能很快下載下來,解壓,隨便放哪,我展開目錄是D:\pifu\ffmpeg-0.8\ffmpeg-0.8

註:ffmpeg編譯裡面的彙編代碼需要yasm.exe,去yasm官網當一個window合適的最新版本,32bit和64bit不要弄錯了,弄好改名成yasm.exe放到C:\WINDOWS\system32下去(主要是省得加環境變數),最好nasm也弄一個,經常某些庫編譯用的上。不放也無所謂,就是產生的東西不支援彙編,可以速度會很受影響 

4.雙擊C:\MinGW\msys\1.0\msys.bat運行,進入目錄D:\pifu\ffmpeg-0.8\ffmpeg-0.8 它和cmd運行有些區別,右斜杠需要換成左斜杠,然後盤符D:也需要更改/d上面輸入cd /d/pifu/ffmpeg-0.8/ffmpeg-0.8,也可以分部進入如

cd /d

cd pifu

cd ffmpeg-0.8

cd ff*

等等。。。(*號可以替字元)

然後輸入

./configure --enable-shared --disable-static --enable-memalign-hack

等待比較長的時間,介面回到$開頭後輸入

make

等待很長的編譯時間,介面回到$開頭後輸入

make install

編譯過程結束

需要的結果在C:\MinGW\msys\1.0\local目錄下,有對應的標頭檔、dll加lib和ffmpeg.exe等運行程式

是不是很簡單。

補充說明:make指令後實際上在ffmpeg目錄裡已經有產生的dll和lib了,但是make install指令還是建議要執行 因為它會為你整理好需要的標頭檔(太體貼了,自己全拷覺得太多,自己選擇又太麻煩,而且不會正確),然後dll檔案會小好幾圈(原理不清楚)。第一個指令./configure加上make和make install三個指令可以在windows下用mingw編譯很多來自於linux的開源庫./configure --help可以看到./configure可以配置那些開關,後面輸錯了或者輸少了沒有關係,msys會提醒你,非常體貼。一般./configure能執行,那麼根目錄下都有一個configure檔案,可以用wordpad或者其他文檔編輯工具(如UE)開啟

D:\pifu\ffmpeg-0.8\ffmpeg-0.8下的configure檔案,裡面可以找到./configure --help列出的檔案。有這麼一段

External library support:
  --enable-avisynth        enable reading of AVISynth script files [no]
  --enable-bzlib           enable bzlib [autodetect]
  --enable-libcelt         enable CELT/Opus decoding via libcelt [no]
  --enable-frei0r          enable frei0r video filtering
  --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
  --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
  --enable-libopencv       enable video filtering via libopencv [no]
  --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394
                           and libraw1394 [no]
  --enable-libdirac        enable Dirac support via libdirac [no]
  --enable-libfaac         enable FAAC support via libfaac [no]
  --enable-libfreetype     enable libfreetype [no]
  --enable-libgsm          enable GSM support via libgsm [no]
  --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]
  --enable-libnut          enable NUT (de)muxing via libnut,
                           native (de)muxer exists [no]
  --enable-libopenjpeg     enable JPEG 2000 decoding via OpenJPEG [no]
  --enable-librtmp         enable RTMP[E] support via librtmp [no]
  --enable-libschroedinger enable Dirac support via libschroedinger [no]
  --enable-libspeex        enable Speex decoding via libspeex [no]
  --enable-libtheora       enable Theora encoding via libtheora [no]
  --enable-libvo-aacenc    enable AAC encoding via libvo-aacenc [no]
  --enable-libvo-amrwbenc  enable AMR-WB encoding via libvo-amrwbenc [no]
  --enable-libvorbis       enable Vorbis encoding via libvorbis,
                           native implementation exists [no]
  --enable-libvpx          enable VP8 support via libvpx [no]
  --enable-libx264         enable H.264 encoding via x264 [no]
  --enable-libxavs         enable AVS encoding via xavs [no]
  --enable-libxvid         enable Xvid encoding via xvidcore,
                           native MPEG-4/Xvid encoder exists [no]
  --enable-mlib            enable Sun medialib [no]
  --enable-zlib            enable zlib [autodetect]

它們是指ffmpeg本身沒有但可以擴充的的庫,下面就繼續說一下這個 

5.擴充庫,ffmpeg本身不支援MP3的編碼,而我又強烈希望能編MP3

去http://sourceforge.net/搜尋lame,此時是第一個,下載下來,仿照上面ffmpeg的步驟執行./configure,make,make install,執行./configure前先--help一下,如果有靜態和動態庫區別,關掉動態庫,選擇靜態庫(當然你也可以不理)執行完以後lame(實際上裡麵包含了mp3的編碼)的庫就在C:\MinGW\msys\1.0\local下了(庫的輸出路徑

是可以設定的,不過最好不要去找那個麻煩)其它庫也可以同樣的執行,我試過x264 xvid libvo-aacenc libvo-amrwbenc zlib,前面兩個很容易找到官方網站然後下載,後面的都是去sourceforge上搜的,主要注意./configure的時候加上彙編和線程的支援(如果支援的話) 

然後ffmepg先卸載掉(也可以重新來過),進入目錄D:\pifu\ffmpeg-0.8\ffmpeg-0.8,執行

make uninstall

./configure後面我的參數做為一個例子(下面是沒有斷行符號之類的):

 ./configure --enable-shared --disable-static --enable-w32threads --enable-m
emalign-hack --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libmp3lame -
-enable-zlib --extra-cflags=-I/usr/local/include --extra-ldflags=-L/usr/local/li
b --enable-version3

--extra-cflags和--extra-ldflags是指明調用其它庫的路徑

最後我實際上是沒有加上xvid和x264的。xvid是對mpeg4視頻的編解碼,功能非常強大,ffmpeg對mpeg4的編解其實也是支援的。x264是對h.264編碼,非常高效,ffmpeg沒有對h.264編碼的支援。我沒有加入這兩個庫的理由:我用了x264的vfw的一個版本,然後又用了加了x264支援的ffmpeg庫,在一個進程裡debug時碰到斷言錯誤(release版本沒有),所以沒有加入x264,而且x264額外拿出來編碼效率比ffmpeg高,然後我擔憂xvid也可能碰到一樣的情況,就都沒有加入。

說到xvid當你用了xvid就請厭惡divx吧

x264我在CSDN上掛了一個很好的vfw的版本(第一次掛)http://download.csdn.net/source/3463887

適合開發,效率比最新的x264,用mingw編譯出來的要好,而且整理過。可惜沒人下載,估計資源快被刪除了 

6.最後說點不大相關的

產生的dll和lib有好幾組,檔案實際上是一樣的,需要取類似avcodec-53.dll和avcodec-53.lib的檔案,*.lib的名字

無所謂,但是dll的名字卻是被限定的。用ue編輯avcodec-53.lib,裡面一堆avcodec-53.dll的字元。有時後希望改掉

dll的名字,因為畢竟怕調用別人的庫是人家也產生了ffmpeg的庫,名字衝突可是很危險的事情。

這個可以簡單操作一下,用ue把裡面avcodec-53大小全字匹配更改成別的名字,(名字長度需要和以前一樣,不一樣

結界自己去試),avcodec-53.dll也幹這個事情,還有就是ffmpeg裡產生的dll都用到了avutil-51.dll,avcodec-53.dll裡

對應的的avutil-51.dll字元需要對應更改。(上述說檔案名稱只是舉例,後面跟的版本後可能會改動) 

在ffmpeg目錄下搜尋包含example的檔案(應該有兩個),照著寫應該很容易寫出簡單的調用上面產生的ffmpeg庫swscale庫實現了原始映像格式的轉換(支援很多很多格式)和大小的變化,只要調用兩個方法(加一個釋放相關的)輕鬆搞定,效率很不錯,建議使用

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.