在Windows下編譯ffmpeg完全手冊

來源:互聯網
上載者:User
本文的內容幾乎全部來自於FFmpeg on Windows,但是由於國內的網路封鎖,很難訪問這個網域名稱下的內容,因此我一方面按照我自己的理解和實踐做了翻譯,另一方面也是為了能提供一個方便的參考方法。

註:

  1. 對於compile和build這兩個詞,本文統一的使用編譯這個詞,根據上下文讀者應能區分語義上的差別。

    本文的目的是提供一切與FFmpeg在Windows下的相關協助。它最初是一個針對用MSys+MinGW系統編譯的手把手的教程,現在也增加了如何在你的項目中連結FFmpeg所產生的庫(C++,C#)。   
      我們不討論Cygwin,因為它的工作方式基本上與Unix系統相一致。 開始之前,首先要明確以下幾點:

  1. 由於MSVC++並不嚴格的遵循C標準,因此FFmpeg不能使用MSVC++來編譯,而且將來也不會支援。所以整個編譯過程必須使用MSys+MinGW系統來完成。
  2. 如果你選擇編譯動態連結程式庫(dll),這些庫將和其他的動態連結程式庫一樣在使用上沒什麼差別。你可以使用MSVC++來連結這些庫進入到你的程式,只有這種情況下MSVC++是被支援的。

    介紹本指南是十分冗長的。如果你已經以前曾有過編譯開源軟體的經驗,你可以嘗試讀一下這篇。它要簡短的多,只需要一些小的微調就能正常工作。
     但是如果你遇到了任何問題,在你向ffmpeg的郵件清單報告錯誤時請先仔細的通讀本文,它是非常直觀的,不少地方的細節甚至可能過於詳細了。我們試圖涵蓋一切可能出錯的地方,如果你精確的遵照文中的方法,你不會在Windows環境下的FFmpeg上有任何問題。 盡你的努力去解決你所遇到的問題,絕大多數的FFmpeg開發人員不使用Windows,所以他們幫不了你什麼。

    預備這裡的內容可能和本文沒有什麼關係,但是我不想留下任何可能出錯的地方。對於絕大多數人來說,這一部分可以跳過。 你需要一個解壓的工具軟體支援“*.tar.gz”和“*.tar.bz2”檔案。你將需要把這些壓縮包解壓縮到指定的目錄下。如果你已經有這樣的程式了,並且知道如何解壓到特定目錄下,請閱讀準備MSys+MinGW系統。 這裡我將示範如何使用7-Zip或WinRAR來解壓縮。推薦使用7-Zip,因為它是開源且免費的。

  • 7-Zip
  • WinRAR

準備MSys+MinGW系統擷取最新的MSys+MinGW系統。注意以下幾個包的版本要求:

  • 不要使用2.0.4的bash,這個是有缺陷的,2.05b的bash用來編譯FFmpeg沒有問題,但是更推薦3.1版本。
  • 使用msys-1.0.dll-SNAP-1.0.11-2006.04.23
  • 不要使用binutils-2.15.91-20040904-1,它無法正確的連結。

    如果你已經安裝配置完畢,那麼請閱讀下一部分用SVN方式擷取FFmpeg,否則的話請依次執行下面的步驟。

  • 安裝MSys
  • 安裝MinGW
  • 整合MinGW和MSys

    用SVN方式擷取FFmpeg如果你已經知道如何擷取FFmpeg的原始碼,那麼請閱讀下一部分編譯。 由於FFmpeg的原始碼存放在SVN倉庫裡,你必須使用命令列程式或是圖形介面程式來訪問。我個人推薦TortoiseSVN,因為它和Windows資源管理員結合的非常棒,所以我只介紹使用TortoiseSVN的方法。 編譯

  • 編譯靜態庫
  • 編譯動態庫

連結

  • 用MSVC++連結DLL庫
  • 用MSVC++建立output_example.exe

編譯FFplay你必須事先安裝了SDL-devel。

  1. 解壓該軟體包。
  2. lib下的所有檔案複製到C:/msys/mingw/lib
  3. include下的所有檔案複製到C:/msys/mingw/include
  4. bin下的i386-mingw32msvc-sdl-config複製到C:/msys/mingw/bin,並重新命名為sdl-config
  5. bin下的SDL.dll複製到C:/msys/mingw/bin
[Copy to clipboard]

CODE:

SDL.dll必須在ffplay.exe德PATH路徑中,程式才能啟動。在MSys環境下mingw/bin在PATH環境變數中,因此運行ffplay.exe不會有問題。但如果你想在MSys外部運行,則應SDL.dll複製到和ffplay.exe同一個目錄下。

現在你可以按照前面的方式靜態或動態重新編譯FFmpeg,在運行configure指令碼後,它將正確的找到SDL和ffplay。

對第三方庫的支援

    你必須完全的理解了編譯動態庫部分。

     在向FFmpeg的二進位檔案中添加其他的庫時,你必須首先考慮庫是以靜態還是動態連結到FFmpeg中。不要把這個和FFmpeg本身是靜態/動態連結程式庫搞混,你可以把靜態將第三方庫連結到FFmpeg中,但是FFmpeg的庫本身是動態載入的dll庫。

    考慮這種情況:你想要更換xvidcore卻不希望重新編譯FFmpeg,那你就應該把xvidcore編譯成動態連結程式庫。

    其次你要考慮的是這些第三方庫被安裝到MSys系統中的什麼位置上。

     對於絕大多數的是庫,如果你把它們安裝到預設路徑,你就得向FFmpeg的configure指令碼傳遞額外的參數,這樣才能在編譯的時候找到這些庫。

    如果你把這些庫安裝到gcc的預設includelib路徑下,就不需要額外指定這些參數了。如果你希望把動態庫和靜態庫分開儲存,那就不得不指定路徑。這樣的路徑被稱為你所安裝的庫的prefix。 如果你把庫安裝在了非gcc的預設尋找路徑,你必須向FFmpeg的configure指令碼傳遞這些路徑資訊。

[Copy to clipboard]

CODE:

--extra-ldflags=-L<prefix>/lib --extra-cflags=-I<prefix>/include

類似這樣:

[Copy to clipboard]

CODE:

./configure --enable-memalign-hack --enable-mp3lame  -–extra-ldflags=-L/usr/local/lib  --extra-cflags=-I/usr/local/include

在MSys下gcc的預設路徑是 /mingw另外,如果你把這些庫的dll安裝後,確保你的應用程式能在PATH環境變數中找到相應的dll。 我將展示下面這些庫的安裝:

  • zlib
  • mp3lame
  • xvidcore
  • libogg
  • libvorbis
  • faad
  • faac
  • amr_nb
  • amr_wb
  • libdts
  • libgsm
  • x264

引用原文:http://www.aurora-x.net/wiki/CompileFFmpegWindows

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.