Windows下編譯ffmpeg
- 2020 年 4 月 1 日
- 筆記
前言
在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下的常用命令了,是不是很爽?
編譯安裝 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 –prefix=/usr/local make && sudo make install
註:編譯lame遇到的問題:
- 問題一: 在Cygwin下安裝 lame的時候遇到執行 ./configure 失敗的情況。如
"error: cannot guess build type; you must sepcify one"
,對這個問題可以通過下面的步驟來解決:
- 安裝automake。可以通過
which automake
來確認automake 是否已經安裝。如果沒有安裝,可以通使用apt-cyg install automake
進行安裝。 - 確認automake當前版本。可執行
automake --version
獲取當前automake的版本號。 - 將 lame目錄下的 config.guess文件替換為 /usr/share/automake-version下的config.guess 文件。
- 此時,再執行./configure進就可以下成功了。
- 問題二: make時出現
"error: '_O_BINARY' undeclared (first use in this function)"
的錯誤,解決辦法如下:
- 打開出錯文件 vi ./frontend/lametime.c
- 將下面這段代碼注釋掉
/* #elif defined __CYGWIN setmod(fileno(fp), _O_BINARY); */
- 再執行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 ./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.tar.bz2 ./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了。