一、前言
本文講述使用msys2編譯ffmpeg源碼的方法,使用該方法不需要安裝mingw。msys2是一個在windows上模擬linux環境的軟件,在msys2上可以使用大多數的shell命令,它可以在一定程度上代替虛擬機,讓用戶可以在windows上使用shell。
二、下載安裝msys2
首先我們在http://msys2.github.io/ 下載msys2。進入該網址後,可以看到如下頁面:
這裏由於博主的電腦是win10、64位操作系統,所以選擇msys2-x86_64-20190524.exe。下載下來後雙擊安裝。這裏博主安裝到D盤,因爲我們安裝完msys2後是要在裏面安裝其它的軟件的,隨着裏面安裝的軟件越來越多,msys2在電腦中佔用的空間會越來越大,所以不推薦安裝在C盤(系統盤)。
安裝過程中,我們可能會發現,進度會一直卡在中間,無法繼續執行,然後“隱藏詳細信息”這裏顯示“Updating trust database”,如下圖所示。當遇到這個問題時,我們只要點擊右下方的“取消”按鈕,然後重新安裝即可。
安裝完成後,我們進入安裝目錄,打開msys2_shell.cmd
在彈出的窗口上右擊, 選擇Options,按照如下設置更改字符集,如下圖所示,否則可能會出現中文亂碼的問題。更改完成後,點擊“Save按鈕”,這裏要注意更改完成後得要重新啓動msys2_shell.cmd,設置才能生效。
三、MSYS2更換國內源
參見《MSYS2更換國內源》
四、在msys2中安裝軟件(啓動msys2_shell.cmd)
1. 安裝yasm
重啓msys2_shell.cmd後,我們在彈出的窗口中執行命令:pacman -S make yasm diffutils pkg-config
2. 安裝gcc
Windows: |
pacman -S mingw-w64-x86_64-gcc |
Linux: |
pacman -S mingw-w64-i686-gcc |
如果報錯:“錯誤:無法從 XXX: Operation too slow. Less than 1 bytes/sec......”,我們只要再重新執行上述命令安裝就可以了。在每一次重新安裝gcc的過程中,下圖所示的“下載大小”的值都會變小,所以我們在安裝gcc失敗後,多次重複安裝,讓“下載大小”的值越來越小,最終我們就能成功安裝的。
安裝完gcc後,我們可執行命令:pacman -Sl | grep "gcc"查看gcc是否安裝完成
五、下載FFmpeg源碼
我們進入FFmpeg官網http://ffmpeg.org/download.html#releases,下載最新版本的FFmpeg源碼(FFmpeg4.2.2)。
在msys2的安裝目錄下新建一個文件夾“SourceCode”,將下載下來的FFmpeg源碼解壓,放到該文件夾下,如下圖所示:
六、編譯FFmpeg源碼(編譯出32位庫)-64位庫同理
通過命令提示符進入msys2的安裝目錄即msys64下, 執行命令: msys2_shell.cmd -mingw32
在啓動的窗口中執行命令:cd /SourceCode/ffmpeg-4.2.2,進入msys2中ffmpeg源碼的目錄,如下圖所示:
第一步清理 |
make clean |
可以看到ffmpeg-4.2.2的目錄下有一個configure文件,執行configure命令生成Makefile:
第二步configure命令 |
./configure --enable-shared --enable-static --arch=x86_32 --prefix=/usr/local/ffmpeg |
|
--arch=x86_32 |
32位庫 |
|
--arch=x86_64 |
64位庫 |
|
prefix=/usr/local/ffmpeg可以設定爲自己定義的存放路徑,如prefix=C:/Users/xxx/Desktop/ffmpeg
注:上述命令不唯一,可以根據自己的需要設置其它選項。生成Makefile可能需要很長時間,需耐心等待。
第三步編譯 |
make |
第四步安裝 |
make install |
以上四個步驟可以在批處理文件中一次執行
注:每條命令執行可能需要很長時間,需耐心等待
執行完後會在msys64/usr/local目錄下生成ffmpeg目錄,生成的庫和可執行文件就在msys64/usr/local/ffmpeg/bin目錄下,如下圖所示:
由於用msys2生成的庫有依賴,比如生成的32位庫依賴於msys64\mingw32\bin下的dll庫,所以我們將msys64\mingw32\bin下的所有dll都拷貝到msys64\usr\local\ffmpeg\bin下。這樣我們就能使用生成的ffmpeg.exe和庫了
依賴如下:
七、參考文章
八、需要x264庫需先編譯x264庫再編譯Ffmpeg