FFmpeg開發筆記(十七)Windows環境給FFmpeg整合字幕庫libass

aqi00發表於2024-04-27
libass是一個適用於ASS和SSA格式(Advanced Substation Alpha/Substation Alpha)的字幕渲染器,支援的字幕型別包括srt、ass等,凡是涉及到給影片畫面新增字幕,均需事先整合libass。

《FFmpeg開發實戰:從零基礎到短影片上線》一書的“7.3.1 Linux環境安裝libass”介紹瞭如何在Linux環境給FFmpeg整合libass,其實在Windows環境也能給FFmpeg整合libass,具體的整合步驟說明如下。注意:下列的所有命令均需在MSYS視窗中執行。

1、安裝freetype

fontconfig、fribidi、harfbuzz、libass都依賴於freetype庫,所以要先安裝該庫。freetype的安裝步驟說明如下。
(1)freetype的下載頁面是https://download.savannah.gnu.org/releases/freetype/,比如2023年8月釋出的freetype-2.13.2,該版本的原始碼下載地址是https://download.savannah.gnu.org/releases/freetype/freetype-2.13.2.tar.gz。

tar zxvf freetype-2.13.2.tar.gz
cd freetype-2.13.2

(2)進入解壓後的freetype目錄,執行下面命令配置freetype。

./configure --prefix=/usr/local/freetype

(3)執行下面命令編譯freetype。

make

(4)編譯完成後,執行下面命令安裝freetype。

make install

(5)給環境變數PKG_CONFIG_PATH新增freetype的pkgconfig路徑,也就是在/etc/profile檔案末尾新增如下一行內容:

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

然後執行下面命令重新載入環境變數:

source /etc/profile

執行下面命令檢視當前的環境變數,發現PKG_CONFIG_PATH的修改已經奏效。

env | grep PKG_CONFIG_PATH

2、安裝libxml2

由於字型配置庫fontconfig依賴於libxml2庫,因此要先安裝該庫。libxml2的安裝步驟說明如下。
(1)libxml2的下載頁面是http://xmlsoft.org/sources/,比如2010年11月釋出的libxml2-2.7.8,該版本的原始碼下載地址是http://xmlsoft.org/sources/libxml2-2.7.8.tar.gz。執行下面命令解壓下載好的壓縮包:

tar zxvf libxml2-2.7.8.tar.gz
cd libxml2-2.7.8

(2)修改include/libxml/xmlexports.h,在檔案開頭增加下面一行:

#define LIBXML_STATIC

(3)進入解壓後的libxml2目錄,執行下面命令配置libxml2。

./configure --prefix=/usr/local/libxml2

(4)執行下面命令編譯libxml2。

make

(5)編譯完成後,執行下面命令安裝libxml2。

make install

(6)給環境變數PKG_CONFIG_PATH新增libxml2的pkgconfig路徑,也就是在/etc/profile檔案末尾新增如下一行內容:

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

然後執行下面命令重新載入環境變數:

source /etc/profile

執行下面命令檢視當前的環境變數,發現PKG_CONFIG_PATH的修改已經奏效。

env | grep PKG_CONFIG_PATH

3、安裝gperf

由於字型配置庫fontconfig依賴於gperf,因此要先安裝該工具。Windows環境執行下面命令安裝gperf:

pacman -S gperf

4、安裝fontconfig

fontconfig是一款字型配置工具,它能夠自動檢測字型檔,以及管理和配置字型檔。fontconfig的安裝步驟說明如下。
(1)fontconfig的下載頁面是https://www.freedesktop.org/software/fontconfig/release/,比如2023年1月釋出的fontconfig-2.14.2,該版本的原始碼下載地址是https://www.freedesktop.org/software/fontconfig/release/fontconfig-2.14.2.tar.gz。執行下面命令解壓下載好的壓縮包:

tar zxvf fontconfig-2.14.2.tar.gz
cd fontconfig-2.14.2

(2)進入解壓後的fontconfig目錄,執行下面命令配置fontconfig。

./configure --prefix=/usr/local/fontconfig --enable-libxml2 --disable-docs

注意:如果沒安裝libxml2,執行configure就會報錯“*** expat is required. or try to use --enable-libxml2”。
(3)執行下面命令編譯fontconfig。

make

(4)編譯完成後,執行下面命令安裝fontconfig。

make install

(5)給環境變數PKG_CONFIG_PATH新增fontconfig的pkgconfig路徑,也就是在/etc/profile檔案末尾新增如下一行內容:

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

然後執行下面命令重新載入環境變數:

source /etc/profile

執行下面命令檢視當前的環境變數,發現PKG_CONFIG_PATH的修改已經奏效。

env | grep PKG_CONFIG_PATH

5、安裝fribidi

fribidi是個中東字型增強庫,它實現了Unicode字符集的雙向演算法,以便處理阿拉伯語、希伯來語這些中東語言。fribidi的安裝步驟說明如下。
(1)fribidi的下載頁面是https://github.com/fribidi/fribidi/releases,比如2023年5月釋出的fribidi-1.0.13,該版本的原始碼下載地址是https://github.com/fribidi/fribidi/releases/download/v1.0.13/fribidi-1.0.13.tar.xz。注意要下載副檔名是tar.xz的壓縮包,不能下載副檔名是tar.gz的壓縮包,因為tar.gz裡面沒有configure檔案。執行下面命令解壓下載好的壓縮包:

tar xvf fribidi-1.0.13.tar.xz
cd fribidi-1.0.13

(2)進入解壓後的fribidi目錄,執行下面命令配置fribidi。

./configure --prefix=/usr/local/fribidi

(3)執行下面命令編譯fribidi。

make

(4)編譯完成後,執行下面命令安裝fribidi。

make install

(5)給環境變數PKG_CONFIG_PATH新增fribidi的pkgconfig路徑,也就是在/etc/profile檔案末尾新增如下一行內容:

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

然後執行下面命令重新載入環境變數:

source /etc/profile

執行下面命令檢視當前的環境變數,發現PKG_CONFIG_PATH的修改已經奏效。

env | grep PKG_CONFIG_PATH

6、安裝harfbuzz

harfbuzz是一個文字塑形引擎,它能夠將Unicode字元轉換為格式正確的字形輸出,可用於除錯和預覽字型效果。harfbuzz的安裝步驟說明如下。
(1)harfbuzz的最新原始碼在https://github.com/harfbuzz/harfbuzz,但是高版本harfbuzz容易編譯失敗,實際應用採取1.2.7版本就夠了。各版本harfbuzz的下載頁面是https://www.freedesktop.org/software/harfbuzz/release/,比如1.2.7版本的原始碼下載地址是https://www.freedesktop.org/software/harfbuzz/release/harfbuzz-1.2.7.tar.bz2。執行下面命令解壓下載好的壓縮包:

tar xvf harfbuzz-1.2.7.tar.bz2
cd harfbuzz-1.2.7

(2)進入解壓後的harfbuzz目錄,執行下面命令配置harfbuzz。

./configure --prefix=/usr/local/harfbuzz --disable-gtk-doc

(3)執行下面命令編譯harfbuzz。

make

(4)編譯完成後,執行下面命令安裝harfbuzz。

make install

(5)給環境變數PKG_CONFIG_PATH新增harfbuzz的pkgconfig路徑,也就是在/etc/profile檔案末尾新增如下一行內容:

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

然後執行下面命令重新載入環境變數:

source /etc/profile

執行下面命令檢視當前的環境變數,發現PKG_CONFIG_PATH的修改已經奏效。

env | grep PKG_CONFIG_PATH

7、安裝libass

確認以上的freetype、libxml2、gperf、fontconfig、fribidi、harfbuzz等庫全都正確安裝之後,再來安裝字幕渲染器libass。libass的安裝步驟說明如下。
(1)libass的原始碼頁面是https://github.com/libass/libass,下載頁面是https://github.com/libass/libass/releases,比如2023年2月釋出的libass-0.17.1,該版本的原始碼下載地址是https://github.com/libass/libass/releases/download/0.17.1/libass-0.17.1.tar.gz。執行下面命令解壓下載好的壓縮包:

tar zxvf libass-0.17.1.tar.gz
cd libass-0.17.1

(2)進入解壓後的libass目錄,執行下面命令配置libass。

./configure --prefix=/usr/local/libass

(3)執行下面命令編譯libass。

make

(4)編譯完成後,執行下面命令安裝libass。

make install

(5)給環境變數PKG_CONFIG_PATH新增libass的pkgconfig路徑,也就是在/etc/profile檔案末尾新增如下一行內容:

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

然後執行下面命令重新載入環境變數:

source /etc/profile

執行下面命令檢視當前的環境變數,發現PKG_CONFIG_PATH的修改已經奏效。

env | grep PKG_CONFIG_PATH

8、啟用libass

由於FFmpeg預設未啟用libass,因此需要重新配置FFmpeg,標明啟用libass,然後重新編譯安裝FFmpeg。FFmpeg的Windows環境完整編譯過程參見《FFmpeg開發實戰:從零基礎到短影片上線》一書的“8.1 Windows環境編譯FFmpeg”,詳細的啟用步驟說明如下。
(1)確保下列路徑均已載入至環境變數PKG_CONFIG_PATH

export PKG_CONFIG_PATH=/usr/local/freetype/lib/pkgconfig:$PKG_CONFIG_PATH
export PKG_CONFIG_PATH=/usr/local/libxml2/lib/pkgconfig:$PKG_CONFIG_PATH
export PKG_CONFIG_PATH=/usr/local/fontconfig/lib/pkgconfig:$PKG_CONFIG_PATH
export PKG_CONFIG_PATH=/usr/local/fribidi/lib/pkgconfig:$PKG_CONFIG_PATH
export PKG_CONFIG_PATH=/usr/local/harfbuzz/lib/pkgconfig:$PKG_CONFIG_PATH
export PKG_CONFIG_PATH=/usr/local/libass/lib/pkgconfig:$PKG_CONFIG_PATH

(2)執行以下命令,在libxml2的安裝路徑下補充一個xmlversion.h,因為配置FFmpeg的時候會檢查<libxml2/libxml/xmlversion.h>。

mkdir -p /usr/local/libxml2/include/libxml2/libxml2/libxml
cp /usr/local/libxml2/include/libxml2/libxml/xmlversion.h /usr/local/libxml2/include/libxml2/libxml2/libxml/xmlversion.h

(3)回到FFmpeg原始碼的目錄,執行以下命令重新配置FFmpeg,主要增加啟用libass。(增加了選項--enable-libass --enable-libfribidi --enable-libxml2 --enable-fontconfig)

./configure  --prefix=/usr/local/ffmpeg --arch=x86_64 --enable-shared --disable-static --disable-doc --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libdavs2 --enable-libmp3lame --enable-gpl --enable-nonfree --enable-libfreetype --enable-sdl2 --enable-libvorbis --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-version3 --enable-libopus --enable-libvpx --enable-libass --enable-libfribidi --enable-libxml2 --enable-fontconfig --enable-openssl --enable-iconv --enable-zlib --extra-cflags='-I/usr/local/lame/include -I/usr/local/libogg/include -I/usr/local/amr/include' --extra-ldflags='-L/usr/local/lame/lib -L/usr/local/libogg/lib -L/usr/local/amr/lib' --cross-prefix=x86_64-w64-mingw32- --target-os=mingw32

(4)執行下面命令編譯FFmpeg。

make clean
make -j4

(5)執行下面命令安裝FFmpeg。

make install
mv /usr/local/ffmpeg/bin/*.lib /usr/local/ffmpeg/lib/
cp /usr/local/libxml2/bin/*.dll /usr/local/ffmpeg/bin
cp /usr/local/freetype/bin/*.dll /usr/local/ffmpeg/bin
cp /usr/local/fontconfig/bin/*.dll /usr/local/ffmpeg/bin
cp /usr/local/fribidi/bin/*.dll /usr/local/ffmpeg/bin
cp /usr/local/harfbuzz/bin/*.dll /usr/local/ffmpeg/bin
cp /usr/local/libass/bin/*.dll /usr/local/ffmpeg/bin

(6)執行以下命令檢視FFmpeg的版本資訊。

ffmpeg -version

檢視控制檯回顯的FFmpeg版本資訊,找到“--enable-libass”,說明FFmpeg正確啟用了字幕渲染器libass。

相關文章