AV1是一種新興的免費視頻編碼標準,它由開放媒體聯盟(Alliance for Open Media,簡稱AOM)於2018年制定,融合了Google VP10、Mozilla Daala以及Cisco Thor三款開源項目的成果。據說在實際測試中,AV1標準比H.265(HEVC)的壓縮率提升了 ...
AV1是一種新興的免費視頻編碼標準,它由開放媒體聯盟(Alliance for Open Media,簡稱AOM)於2018年制定,融合了Google VP10、Mozilla Daala以及Cisco Thor三款開源項目的成果。據說在實際測試中,AV1標準比H.265(HEVC)的壓縮率提升了大約27%。由於AV1具有性能優勢,並且還是免費授權,因此各大流媒體平臺更傾向使用AV1而非HEVC標準。
AV1如此炙手可熱,以致它的編解碼器如雨後春筍,單單FFmpeg支持的AV1編解碼器,就有libaom、libdav1d、libsvtav1、librav1e四種。經過在Linux環境實地驗證,前三種都能在華為雲的歐拉系統上編譯集成,只有librav1e尚未成功編譯。下麵就介紹如何在Linux環境給FFmpeg集成libaom、libdav1d、libsvtav1這三種AV1編解碼庫。
一、安裝libaom
libaom是谷歌提供的AV1編解碼工具,其代碼托管在谷歌網站,國內無法訪問,開發者可通過清華大學的鏡像網站下載它的源碼,下載地址是https://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/pool/main/a/aom/aom_3.7.1.orig.tar.gz。
libaom的安裝步驟說明如下。
1、將下載好的壓縮包上傳到伺服器並解壓,也就是依次執行以下命令。
tar zxf aom_3.7.1.orig.tar.gz
cd aom-3.7.1
2、進入解壓後的build目錄,運行下麵命令配置libaom。
cd build
cmake ..
3、運行下麵命令編譯libaom。
make -j4
4、編譯完成後,運行下麵命令安裝libaom。
make install
二、安裝libsvtav1
SVT-AV1項目最初由英特爾與奈飛公司合作創建,後來被AOM官方收編,它的源碼托管頁面在https://gitlab.com/AOMediaCodec/SVT-AV1。因為《FFmpeg開發實戰:從零基礎到短視頻上線》一書採用的FFmpeg版本為5.1.2,相容該版本FFmpeg的SVT-AV1最高版本為1.4.0,所以需要下載這個源碼鏈接https://gitlab.com/AOMediaCodec/SVT-AV1/-/archive/v1.4.0/SVT-AV1-v1.4.0.tar.gz。註意,如果使用更高版本的SVT-AV1,會導致後面FFmpeg編譯失敗。
libsvtav1的安裝步驟說明如下。
1、將下載好的壓縮包上傳到伺服器並解壓,也就是依次執行以下命令。
tar zxvf SVT-AV1-v1.4.0.tar.gz
cd SVT-AV1-v1.4.0
2、進入解壓後的Build目錄,運行下麵命令配置libsvtav1。
cd Build
cmake ..
3、運行下麵命令編譯libsvtav1。
make -j4
4、編譯完成後,運行下麵命令安裝libsvtav1。
make install
三、安裝libdav1d
libdav1d是一款AV1的解碼器,只負責解碼,不負責編碼。它的源碼托管頁面在https://code.videolan.org/videolan/dav1d/,源碼包的下載地址是https://code.videolan.org/videolan/dav1d/-/archive/1.3.0/dav1d-1.3.0.tar.gz。
libdav1d的安裝步驟說明如下。
1、安裝編譯工具meson和ninja
meson和ninja是基於Python語言的編譯工具,故需確保伺服器已經安裝了Python3。另外,由於伺服器訪問國外網站不穩定,因此可先設置國內的資源鏡像網站,比如移動雲。具體的鏡像設置與工具安裝命令如下:
pip config set global.index-url https://ecloud.10086.cn/api/query/developer/nexus/repository/python-sdk/simple
pip3 install meson
pip3 install ninja
2、將下載好的壓縮包上傳到伺服器並解壓,也就是依次執行以下命令。
tar zxvf dav1d-1.3.0.tar.gz
cd dav1d-1.3.0
3、進入解壓後的build目錄,運行下麵命令配置libdav1d。
mkdir build
cd build
meson setup
4、運行下麵命令編譯libdav1d。
ninja
5、編譯完成後,運行下麵命令安裝libdav1d。
ninja install
四、讓FFmpeg啟用libaom、libdav1d、libsvtav1
由於FFmpeg預設未啟用libaom、libdav1d、libsvtav1,因此需要重新配置FFmpeg,標明啟用libaom、libdav1d、libsvtav1,然後重新編譯安裝FFmpeg。FFmpeg的Linux環境完整編譯過程參見《FFmpeg開發實戰:從零基礎到短視頻上線》一書的“1.2.3 自行編譯與安裝FFmpeg”,詳細的啟用步驟說明如下。
1、載入環境變數PKG_CONFIG_PATH和LD_LIBRARY_PATH
因為libaom、libdav1d、libsvtav1三個庫預設安裝在/usr/local/lib64目錄,所以要將相關路徑載入到PKG_CONFIG_PATH和LD_LIBRARY_PATH。執行下麵命令編輯profile文件:
cd
vi .bash_profile
往.bash_profile的文件末尾添加下麵兩行:
export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:$PKG_CONFIG_PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib64
保存並退出.bash_profile之後,執行以下命令載入環境變數:
source .bash_profile
然後執行下麵的環境變數查看命令,確保環境變數PKG_CONFIG_PATH和LD_LIBRARY_PATH已經成功載入。
env | grep PKG_CONFIG_PATH
env | grep LD_LIBRARY_PATH
2、回到FFmpeg源碼的目錄,執行以下命令重新配置FFmpeg,主要增加啟用libaom、libdav1d、libsvtav1。(增加了選項--enable-libaom --enable-libsvtav1 --enable-libdav1d)
./configure --prefix=/usr/local/ffmpeg --enable-shared --disable-static --disable-doc --enable-zlib --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libdavs2 --enable-libmp3lame --enable-libfreetype --enable-libass --enable-libfribidi --enable-libxml2 --enable-fontconfig --enable-sdl2 --enable-libvorbis --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-version3 --enable-libopus --enable-libvpx --enable-openssl --enable-libaom --enable-libsvtav1 --enable-libdav1d --enable-libuavs3d --enable-iconv --enable-gpl --enable-nonfree
3、運行下麵命令編譯FFmpeg。
make clean
make -j4
4、執行下麵命令安裝FFmpeg。
make install
5、運行以下命令查看FFmpeg的版本信息。
ffmpeg -version
查看控制台回顯的FFmpeg版本信息,找到“--enable-libaom --enable-libsvtav1 --enable-libdav1d”,說明FFmpeg正確啟用了AV1的三個編解碼器libaom、libdav1d、libsvtav1。