Cygwin 及 Windows下編譯安裝 FFmpeg

原文鏈接:https://www.imooc.com/article/247113

圖片描述

##前言
最近我的視頻課《FFmpeg音視頻核心技術精講與實戰》終於與大家見面了。在學生學習的過程中不斷有學生反饋一些問題,其中較多的是如何在Windows 上編譯 ffmpeg。

在Linux/Mac下編譯 ffmpeg是非常方便的。但要在 Windows下編譯 ffmpeg還真要花點時間。不過爲了滿足學員的要求,也方便自己不再被這類問題打擾,今天我就寫一下在 Windowns下編譯ffmpeg的步驟,以供大家參考。

安裝Cygwin

在windows下安裝 ffmpeg 的最好方式就是使用Cygwin。 Cygwin是什麼呢?簡單的說,就是在 Windows上裝了一個Linux模擬器。然後你可以在這個模擬器上按照Linux的方式操作 Windows系統。因此,Windows安裝了Cygwin之後,你就把它當Linux用就可以了。

既然在Windows上裝Cygwin之後,可以像Linux一樣操作,那當然編譯ffmpeg也就相當的方便了。下面我們就開始安裝它吧。

  • 首先,到 Cygwin官網下載 Cygwin 的可執行程序 setup-x86_64.exe。當然,它是 64位的,如果你現在還在用 32位的,那請在 Cygwin官網上找 32位對應的版本。

  • 第二步安裝Cygwin。安裝 Cygwin的操作非常簡單,就是下一步,下一步。但
    需要注意一點,在安裝的時候我們需要將必須的包安裝上。主要有下面幾個包:
    1. gcc
    2. g++
    3. make
    4. cmake
    5. automake
    6. gdb
    7. nasm
    8. yasm
    9. wget

這幾個包如何安裝呢?要在選擇安裝包的界面裏選"Full"選項,它表式在所有的可安裝包裏選擇,然後在搜索框裏填入上面的關鍵字就可以搜索到了。經過上面的步驟你應該已經成功將 Cygwin 安裝到你的 Windows 系統上了。

安裝 apt-cyg

雖然我們上面安裝好了 Cygwin,但還是很不方便,爲什麼呢?主要是因爲 Cygwin目前設計的還不是很人性化。如果我們安裝好Cygwin後,如果缺少了某個包想安裝的話就特別麻煩。還需要重新安裝 Cygwin才能解決,有沒有更好的方式呢?

你遇到的困難,別人也會遇到,不同的是你要麼忍了,要麼不用了。可別人遇到困難後會去解決困難,這纔是人與人之間最大的不同。

話扯的有點遠哈。沒錯,已經有人幫我們解決了這個問題。這是一個很好用的開源工具,它叫 apt-cyg。它與 Ubuntu系統中的 apt一樣特別好用,而且使用的方式與 apt也是一個樣子的。

如何安裝它呢?網上有很多方法,但很多不可行。大家按我這個方法操作一定可以安裝成功。

其實,apt-cyg就是一個腳本。我們只需要將這個腳本下載下來就OK了。這裏是apt-cyg的下載地址。大家可以在Cygwin下執行下面的命令就好了。

  • 第一步:
    wget -c https://raw.githubusercontent.com/transcode-open/apt-cyg/master/apt-cyg
    
  • 第二步
    install apt-cyg /bin
    

有了這個神器,我們就可以安裝一些Linux下的常用命令了,是不是很爽?

比如我們要裝某個包就可以用 apt-cyg instal xxx這樣來安裝了。

安裝pkg-config工具

在Windows系統下,一般不會默認安裝該工具,所以在Windows下做實驗的同學大都會遇到明明已經裝了某個庫,但仍然找不到該庫的情況。其原因就是沒有安裝 pkg-config這個工具。

首先確認是否已經將 pkg-config工具安裝好了。可以執行下面的命令:

pkg-config

如果提示沒有安裝,則先將該工具安裝好,安裝命令如下:

apt-cyg install pkg-config

編譯安裝 ffmpeg

先別高興的太早,雖然有了apt-cyg這個神器,但它目前只能安裝Linux下的一些常用命令,像我們編譯時需要的 x264, x265這些庫它是無法找到的。

不能找到的原因也很簡單,是由於沒有人把編譯好的庫放到apt-cyg 可以夠到的源上。

沒有辦法,所以我們還必須要用最原始的方法,下代碼自己進行編譯。下面我們就一步一步的來吧

  • 編譯 yasm

wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
tar zxvf yasm-1.3.0.tar.gz
cd yasm-1.3.0
./configure
make && sudo make install

  • 編譯 fdk-aac

wget https://jaist.dl.sourceforge.net/project/opencore-amr/fdk-aac/fdk-aac-0.1.6.tar.gz
tar xvf fdk-aac-0.1.6.tar.gz
cd fdk-aac-0.1.6
./configure
make && sudo make install

  • 安裝lame

wget http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
tar -xzf lame-3.99.5.tar.gz
cd lame-3.99.5
./configure
make && sudo make install

注:編譯lame遇到的問題:

  • 問題一:
    在Cygwin下安裝 lame的時候遇到執行 ./configure 失敗的情況。如 "error: cannot guess build type; you must sepcify one",對這個問題可以通過下面的步驟來解決:
  1. 安裝automake。可以通過 which automake來確認automake 是否已經安裝。如果沒有安裝,可以通使用 apt-cyg install automake進行安裝。
  2. 確認automake當前版本。可執行automake --version獲取當前automake的版本號。
  3. 將 lame目錄下的 config.guess文件替換爲 /usr/share/automake-version下的config.guess 文件。
  4. 此時,再執行./configure進就可以下成功了。
  • 問題二:
    make時出現 "error: '_O_BINARY' undeclared (first use in this function)"的錯誤,解決辦法如下:
  1. 打開出錯文件 vi ./frontend/lametime.c
  2. 將下面這段代碼註釋掉
/*
#elif defined __CYGWIN
setmod(fileno(fp), _O_BINARY);
*/
  1. 再執行make就可以成功了。
  • 安裝nasm

wget https://www.nasm.us/pub/nasm/releasebuilds/2.13.03/nasm-2.13.03.tar.gz
tar xvf nasm-2.13.03.tar.gz
cd nasm-2.13.03
./configure
make && sudo make install

  • 安裝x264

wget http://mirror.yandex.ru/mirrors/ftp.videolan.org/x264/snapshots/last_x264.tar.bz2
bunzip2 last_x264.tar.bz2
tar -vxf last_x264.tar
cd last_x264
./configure --enable-static --enable-shared --disable-asm --disable-avs
make && sudo make install

  • 安裝ffmpeg
    從ffmpeg官網下載代碼編譯, 編譯方法如下:

wget -c https://ffmpeg.org/releases/ffmpeg-4.0.2.tar.bz2
bunzip2 ffmpeg-4.0.2.tar.bz2
cd ffmpeg-4.0.2
./configure --prefix=/usr/local/ffmpeg --enable-gpl --enable-small --arch=x86_64 --enable-nonfree --enable-libfdk-aac --enable-libx264 --enable-filter=delogo --enable-debug --disable-optimizations --enable-shared
make && sudo make install

FFmpeg編譯的問題

  • 問題一:找不到 fdk-aac庫

    在編譯ffmpeg時,有可能會報找不到fdk_aac庫的錯誤。此時我們應該設置一下 PKG_CONFIG_PATH,指定ffmpeg到哪裏找我們安裝好的庫。

    上面通過源碼安裝的庫,默認地址爲/usr/local/lib下面,當然你可以通過./configure 中的–prefix參數改變這個目錄。

    如果使用默認路徑的話,可以通過下面的命令來指定編譯時去哪裏找庫

    export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
    

    如果你改變了默認路徑,則將後面的 /usr/local/lib/pkgconfig修改爲你變更後的路徑/xxx/.../lib/pkgconfig即可。

小結

通過上面的步驟我們就可以成功的從 Window上編譯出我們可以執行的 ffmpeg了。

需要注意的是,ffmpeg是高度可訂製的,你可以根據自己的需要編譯出支持不同編解碼的ffmpeg庫,但方法都是一樣的。(不知這句話同學們是否真正理解?)

總的思路就是ffmpeg缺什麼庫,我們就下載相應庫的源碼給它編譯好。然後增加ffmpeg相應的配置選項,再重新編譯 ffmpeg。

有了上面的知識,我們也可以編譯出支持 x265的ffmpeg了,對不對?千萬不要告訴我你還不會喲!

我的視頻課

《FFmpeg音視頻核心技術精講與實戰》
《移動端音視頻入門》


作者:音視頻_李超
鏈接:https://www.imooc.com/article/247113
來源:慕課網
本文原創發佈於慕課網 ,轉載請註明出處,謝謝合作

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章