以前寫的C++基本都是C with STL,大多是面向過程的演算法題,或者比較小的項目,然後經常報各種編譯錯誤(對編譯原理不熟),經常把人搞到崩潰,搞不懂構建、鏈接之類的東西。 現在開始記錄一下XMake的學習筆記,記錄一些學習過程中踩的坑,在這篇文章,你將學習到Windows下利用MSYS2進行Mi ...
由於Linux系統比較專業,個人電腦很少安裝Linux,反而大都安裝Windows系統,因此提高了FFmpeg的學習門檻,畢竟在Windows系統搭建FFmpeg的開發環境還是比較麻煩的。
不過若有已經編譯好的Windows版本FFmpeg開發包,那就免去了繁瑣的Windows編譯過程,所以直接安裝已編譯的FFmpeg開發包,還是相對容易的。在Windows系統安裝FFmpeg之前,要先安裝MSYS2。
一、安裝MSYS2
MSYS2允許在Windows系統模擬Linux環境,它的命令行界面可以很好地模擬Linux終端,所以在Windows系統上編譯和執行FFmpeg程式都要通過MSYS2的控制台操作。以下是在Windows系統安裝MSYS2的步驟說明。
1、到這個網址下載MSYS2的安裝包 https://github.com/msys2/msys2-installer/releases/,打開該頁面後單擊Assets文字以便展開安裝包列表,接著單擊MSYS2的Windows安裝包鏈接,比如msys2-x86_64-20230318.exe,瀏覽器就開始下載Windows版本的安裝文件。
2、雙擊下載好的msys2-x86_64-20230318.exe,根據安裝嚮導的指引一步一步完成安裝Windows版本的MSYS2。
3、MSYS2安裝完畢,打開安裝目錄下的msys2_shell.cmd,去掉該文件第17行代碼的註釋,也就是刪除關鍵字rem,修改之後的代碼如下所示:
set MSYS2_PATH_TYPE=inherit
之所以把該行代碼去掉註釋,是因為要讓MSYS2繼承Windows系統的Path環境變數,否則後面編譯會報錯。
4、依次選擇Windows開始菜單的“Windows系統”——“命令提示符”,打開Windows的命令行界面。接著先進入msys64目錄,再打開MSYS2的命令行視窗,也就是依次執行以下命令:
cd E:\msys64 msys2_shell.cmd -mingw64
之所以要在msys2_shell.cmd後面添加“ -mingw64”,是為了讓MinGW運行於64位模式,而非預設的32位模式。MinGW允許在Windows系統執行Linux的編譯命令。如果說MSYS2相當於Windows環境的Linux模擬器,那麼MinGW給MSYS2準備了32位和64位兩套編譯器,而我們的目標是在Windows系統模擬64位的Linux開發環境。
5、雖然安裝完了MSYS2,可是一開始裡面只支持cd和ls等基本命令,竟然連gcc和make這些編譯命令都沒有,因此要先給它安裝常用的編譯工具。在MSYS2的命令行輸入以下命令安裝幾個編譯工具:
pacman -S gcc make nasm pkg-config diffutils zlib vim
pacman在安裝過程中會提示[Y/n]確認是否繼續安裝,此時輸入Y確定安裝即可。等待pacman將編譯工具安裝完畢,會在mingw64\bin下麵找到相應的可執行程式了。如果在打開MSYS2視窗時,msys2_shell.cmd命令後面沒加“ -mingw64”,那麼編譯工具會預設裝到mingw32\bin目錄;只有在msys2_shell.cmd命令後面加上“ -mingw64”,編譯工具才會裝到mingw64\bin目錄。
二、安裝FFmpeg
安裝好了MSYS2,再來安裝FFmpeg,具體的安裝步驟說明如下:
1、到這個網址下載Windows環境編譯好的FFmpeg安裝包https://github.com/BtbN/FFmpeg-Builds/releases,比如ffmpeg-master-latest-win64-gpl-shared.zip。
2、把ffmpeg-master-latest-win64-gpl-shared.zip解壓到指定目錄,並將解壓後的目錄改名為ffmpeg,比如E:\Program Files\ffmpeg。
3、編輯Windows系統變數列表裡的Path變數,給它添加兩個目錄,第一個是FFmpeg的可執行程式及其動態庫目錄,比如E:\Program Files\ffmpeg\bin;第二個是MSYS2的可執行程式目錄,比如E:\msys64\usr\bin。之所以給Path變數添加這兩個目錄,是為了在命令行輸入相關命令時,Windows能夠自動找到對應的可執行程式。
4、在MSYS2的控制台執行以下命令查看FFmpeg的版本信息:
ffmpeg -version
發現控制台回顯如下所示的FFmpeg版本與編譯器版本信息,說明FFmpeg程式成功跑起來了。
ffmpeg version 5.1.2 Copyright (c) 2000-2022 the FFmpeg developers Built with gcc 12.2.0 (Rev4, Built by MSYS2 project)
三、編寫測試程式
關於C語言的代碼驗證,可採用上一篇文章介紹的測試代碼及其編譯命令,這裡不再贅述了。