动态

详情 返回 返回

FFmpeg開發筆記(七十)Windows給FFmpeg集成AV1編碼器libsvtav1 - 动态 详情

​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四種。接下來以微軟的視窗系統為例,介紹如何在Windows環境給FFmpeg集成AV1編碼器libsvtav1,具體的操作步驟説明如下:

一、配置libsvtav1

SVT-AV1項目最初由英特爾與奈飛公司合作創建,後來被AOM官方收編,它的源碼託管頁面在 https://gitlab.com/AOMediaCodec/SVT-AV1 。雖然最新版為2025年3月推出的SVT-AV1-v3.0.2,但實際驗證在Windows10上配置失敗,所以要用2024年10月推出的SVT-AV1-v2.3.0,下載地址是 https://gitlab.com/AOMediaCodec/SVT-AV1/-/archive/v2.3.0/SVT-...
先下載最新的svt-av1源碼,再把svt-av1源碼包複製到MSYS環境的/usr/local/src目錄下。接着在MSYS控制枱執行下面命令解壓源碼包:

tar zxvf SVT-AV1-v2.3.0.orig.tar.gz
cd SVT-AV1-v2.3.0

然後執行下面命令配置svt-av1:

cd Build
cmake -DBUILD_SHARED_LIBS=1 ..

配置完畢,會在Build目錄下找到svt-av1.sln,這就是svt-av1的Visual Studio項目工程文件。

二、編譯libsvtav1

打開Visual Studio 2022,在歡迎頁面單擊右側的“打開項目或解決方案”,在彈出的文件對話框中選擇SVT-AV1-v2.3.0\Build目錄下的svt-av1.sln。
打開svt-av1工程後,依次選擇頂部菜單:生成→配置管理器,在打開的配置管理器窗口上,找到左上角的“活動解決方案配置”下拉框,把Debug模式改為Release模式,再單擊窗口右下角的關閉按鈕。
依次選擇頂部菜單:生成→Build ALL_BUILD,Visual Studio就開始編譯svt-av1模塊。編譯過程可在Visual Studio界面下方觀察,直到編譯完成如下圖所示。

此時可在SVT-AV1-v2.3.0\Bin\Release目錄下找到SvtAv1Enc.lib和SvtAv1Enc.dll,這兩個文件就是編譯生成的libsvtav1庫文件。

三、安裝libsvtav1

確保Windows系統已經按照《FFmpeg開發實戰:從零基礎到短視頻上線》第一章“1.3  Windows系統安裝FFmpeg”的説明安裝配置了MSYS,再按照以下步驟在MSYS環境安裝libsvtav1。
1、在msys64的/usr/local目錄下新建libsvtav1目錄,並在該目錄下創建lib子目錄;
2、把svt-av1工程中Bin\Release目錄下的SvtAv1Enc.lib和SvtAv1Enc.dll兩個文件複製到第一步創建的lib目錄;
3、在lib目錄下創建pkgconfig子目錄,並把svt-av1工程的Build\SvtAv1Enc.pc複製到pkgconfig目錄;然後打開SvtAv1Enc.pc,把開頭一行改成下面這樣。

prefix=/usr/local/libsvtav1

4、在msys64的/usr/local/libsvtav1目錄下創建include目錄,再在include下創建子目錄svt-av1,然後把svt-av1工程中Source\API目錄下的幾個h文件都複製到剛才創建的include/svt-av1目錄;
經過以上步驟操作後的libsvtav1目錄結構如下所示。

/usr/local/libsvtav1
 |--------------- lib
 |                 |----- SvtAv1Enc.lib
 |                 |----- SvtAv1Enc.dll
 |                 |----- pkgconfig
 |                           |----- SvtAv1Enc.pc
 |--------------- include
 |                 |----- svt-av1
 |                           |----- EbSvtAv1.h
 |                           |----- EbSvtAv1Enc.h
 |                           |----- ……

四、編譯安裝FFmpeg

先下載最新的FFmpeg源碼(版本號需大於等於7.1),再把FFmpeg源碼包複製到MSYS環境的/usr/local/src目錄下。接着在MSYS控制枱執行下面命令解壓源碼包:

cd /usr/local/src
unzip ffmpeg-n7.1.1.zip

確保MSYS環境已經按照《FFmpeg開發實戰:從零基礎到短視頻上線》該書第八章的“8.1.1  給FFmpeg集成x264”和“8.1.5  給FFmpeg集成x265”安裝了H.264的編碼器libx264和H.265的編碼器libx265,也按照該書第十章的“10.1.1  FFmpeg集成SDL”安裝了Windows系統的SDL2庫,並且按照之前的文章安裝了H.266的編碼器libvvenc,然後執行下面命令配置FFmpeg的編譯環境:

cd ffmpeg-n7.1.1
export PKG_CONFIG_PATH=/usr/local/libsvtav1/lib/pkgconfig:$PKG_CONFIG_PATH
./configure --prefix=/usr/local/ffmpeg --arch=x86_64 --enable-shared --disable-static --disable-doc --enable-libx264 --enable-libx265 --enable-libvvenc --enable-liblc3 --enable-librist --enable-libdav1d --enable-libaom --enable-libsvtav1 --enable-sdl2 --enable-gpl --enable-nonfree --enable-iconv --enable-zlib --cross-prefix=x86_64-w64-mingw32- --target-os=mingw32

配置完畢執行下面命令編譯和安裝FFmpeg,編譯完成的ffmpeg庫將會安裝到configure指定的/usr/local/ffmpeg目錄。

make
make install
cp /usr/local/libsvtav1/lib/SvtAv1Enc.dll /usr/local/ffmpeg/bin

五、查看FFmpeg的安裝結果

運行下面命令查看FFmpeg的安裝版本:

ffmpeg -version

上面命令返回的FFmpeg版本信息如下:

ffmpeg version 7.1.1 Copyright (c) 2000-2025 the FFmpeg developers
built with gcc 12.2.0 (Rev10, Built by MSYS2 project)
configuration: --prefix=/usr/local/ffmpeg --arch=x86_64 --enable-shared --disable-static --disable-doc --enable-libx264 --enable-libx265 --enable-libvvenc --enable-liblc3 --enable-librist --enable-libdav1d --enable-libaom --enable-libsvtav1 --enable-sdl2 --enable-gpl --enable-nonfree --enable-iconv --enable-zlib --cross-prefix=x86_64-w64-mingw32- --target-os=mingw32
libavutil      59. 39.100 / 59. 39.100
libavcodec     61. 19.101 / 61. 19.101
libavformat    61.  7.100 / 61.  7.100
libavdevice    61.  3.100 / 61.  3.100
libavfilter    10.  4.100 / 10.  4.100
libswscale      8.  3.100 /  8.  3.100
libswresample   5.  3.100 /  5.  3.100
libpostproc    58.  3.100 / 58.  3.100

根據以上返回的版本信息,可知已安裝的FFmpeg版本號為7.1.1,同時configuration這行找到“--enable-libsvtav1”,説明FFmpeg已經啓用了AV1編碼器libsvtav1。

更多詳細的FFmpeg開發知識參見《FFmpeg開發實戰:從零基礎到短視頻上線》一書。

user avatar xiangjian_659d190d45a7b 头像
点赞 1 用户, 点赞了这篇动态!
点赞

Add a new 评论

Some HTML is okay.