動態

詳情 返回 返回

FFmpeg開發筆記(七十三)Windows給FFmpeg集成MPEG-5視頻編解碼器 - 動態 詳情

​MPEG-5是新一代的國際音視頻編解碼標準,像我們熟悉的MP3、MP4等音視頻格式就來自於MPEG系列。MP3格式的説明介紹參見《FFmpeg開發實戰:從零基礎到短視頻上線》一書的“5.2  MP3音頻”,MP4格式的説明介紹參見《FFmpeg開發實戰:從零基礎到短視頻上線》一書的“2.1.2  音視頻文件的封裝格式”。

MPEG-5現已開源MPEG-5 EVC的視頻編解碼器,其中視頻解碼器的開源庫叫libxevd,視頻編碼器的開源庫叫libxeve。如今EVC的編解碼器libxevd和libxeve日漸成熟,從7.0版本開始的最新FFmpeg源碼已經支持EVC的編解碼器libxevd和libxeve。
接下來以微軟的視窗系統為例,介紹如何在Windows環境給FFmpeg集成MPEG-5 EVC視頻編解碼器libxevd和libxeve,具體的操作步驟説明如下:

一、配置libxevd

libxevd是一款MPEG-5的EVC視頻解碼器。它的源碼託管頁面在 https://github.com/mpeg5/xevd/,最新版本是2024年4月發佈的xevd-0.5.0,該版本的源碼包下載地址是https://codeload.github.com/mpeg5/xevd/tar.gz/refs/tags/v0.5.0
libxevd的配置步驟説明如下。
1、下載最新的xevd源碼,再把xevd源碼包複製到MSYS環境的/usr/local/src目錄下。接着在MSYS控制枱執行下面命令解壓源碼包:

tar zxvf xevd-0.5.0.tar.gz
cd xevd-0.5.0

2、在xevd目錄下創建新文件version.txt,文件內容填入“v0.5.0”,表示解碼器的版本為0.5.0。
3、執行下面命令配置xevd:

mkdir build
cd build
cmake ..

配置完畢,會在build目錄下找到XEVD.sln,這就是xevd的Visual Studio項目工程文件。

二、編譯libxevd

在xevd工程的build目錄下創建xevd.def,並往該文件填入以下內容(其中函數列表來自inc\xevd.h定義的函數):

LIBRARY xevd
EXPORTS
  xevd_create
  xevd_delete
  xevd_decode
  xevd_pull
  xevd_config
  xevd_info

打開Visual Studio 2022,在歡迎頁面單擊右側的“打開項目或解決方案”,在彈出的文件對話框中選擇xevd-0.5.0\build目錄下的XEVD.sln。
打開xevd工程後,右擊解決方案管理器的xevd_dynamic模塊,右鍵菜單依次選擇:屬性→配置屬性→鏈接器→輸入,在窗口右側的模塊定義文件欄填寫xevd.def的絕對路徑。繼續依次選擇:配置屬性→鏈接器→高級,在窗口右側的導入庫欄填寫待生成xevd.lib的絕對路徑。完成設置後,單擊右下角的確定按鈕,保存xevd.def和xevd.lib的路徑配置。
依次選擇頂部菜單:生成→配置管理器,在打開的配置管理器窗口上,找到左上角的“活動解決方案配置”下拉框,把Debug模式改為Release模式,再單擊窗口右下角的關閉按鈕。
依次選擇頂部菜單:生成→生成→生成xevd_dynamic,Visual Studio就開始編譯xevd_dynamic模塊。編譯過程可在Visual Studio界面下方觀察,直到編譯完成如下圖所示。

此時可在xevd-0.5.0\build\src\_main\Release目錄下找到xevd.lib和xevd.dll,這兩個文件就是編譯生成的libxevd庫文件。

三、安裝libxevd

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

prefix=/usr/local/libxevd
exec_prefix=${prefix}/bin
libdir=${prefix}/lib
includedir=${prefix}/include

4、在msys64的/usr/local/libxevd目錄下創建include目錄,然後把xevd工程中inc\xevd.h和build\xevd_exports.h複製到剛才創建的include目錄;
經過以上步驟操作後的libxevd目錄結構如下所示。

/usr/local/libxevd
 |--------------- lib
 |                 |----- xevd.lib
 |                 |----- xevd.dll
 |                 |----- pkgconfig
 |                           |----- xevd.pc
 |--------------- include
 |                 |----- xevd.h
 |                 |----- xevd_exports.h

四、配置libxeve

libxeve是一款MPEG-5的EVC視頻編碼器。它的源碼託管頁面在 https://github.com/mpeg5/xeve/,最新版本是2024年6月發佈的xeve-0.5.1,該版本的源碼包下載地址是https://codeload.github.com/mpeg5/xeve/tar.gz/refs/tags/v0.5.1
注意:由於FFmpeg僅支持版本號大於等於0.5.1的libxeve,因此務必下載xeve-0.5.1,不可下載xeve-0.5.0。
libxeve的配置步驟説明如下。
1、下載最新的xeve源碼,再把xeve源碼包複製到MSYS環境的/usr/local/src目錄下。接着在MSYS控制枱執行下面命令解壓源碼包:

tar zxvf xeve-0.5.1.tar.gz
cd xeve-0.5.1

2、在xeve目錄下創建新文件version.txt,文件內容填入“v0.5.1”,表示編碼器的版本為0.5.1。
3、執行下面命令配置xeve:

mkdir build
cd build
cmake ..

配置完畢,會在build目錄下找到XEVE.sln,這就是xeve的Visual Studio項目工程文件。

五、編譯libxeve

在xeve工程的build目錄下創建xeve.def,並往該文件填入以下內容(其中函數列表來自inc\xeve.h定義的函數):

LIBRARY xeve
EXPORTS
  xeve_create
  xeve_delete
  xeve_push
  xeve_encode
  xeve_config
  xeve_param_default
  xeve_param_ppt
  xeve_param_check
  xeve_param_parse

打開Visual Studio 2022,在歡迎頁面單擊右側的“打開項目或解決方案”,在彈出的文件對話框中選擇xeve-0.5.1\build目錄下的XEVE.sln。
打開xeve工程後,右擊解決方案管理器的xeve_dynamic模塊,右鍵菜單依次選擇:屬性→配置屬性→鏈接器→輸入,在窗口右側的模塊定義文件欄填寫xeve.def的絕對路徑。繼續依次選擇:配置屬性→鏈接器→高級,在窗口右側的導入庫欄填寫待生成xeve.lib的絕對路徑。完成設置後,單擊右下角的確定按鈕,保存xeve.def和xeve.lib的路徑配置。
依次選擇頂部菜單:生成→配置管理器,在打開的配置管理器窗口上,找到左上角的“活動解決方案配置”下拉框,把Debug模式改為Release模式,再單擊窗口右下角的關閉按鈕。
依次選擇頂部菜單:生成→生成→生成xeve_dynamic,Visual Studio就開始編譯xeve_dynamic模塊。編譯過程可在Visual Studio界面下方觀察,直到編譯完成如下圖所示。

此時可在xeve-0.5.1\build\src\_main\Release目錄下找到xeve.lib和xeve.dll,這兩個文件就是編譯生成的libxeve庫文件。

六、安裝libxeve

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

prefix=/usr/local/libxeve
exec_prefix=${prefix}/bin
libdir=${prefix}/lib
includedir=${prefix}/include

4、在msys64的/usr/local/libxeve目錄下創建include目錄,然後把xeve工程中inc\xeve.h和build\xeve_exports.h複製到剛才創建的include目錄;
經過以上步驟操作後的libxeve目錄結構如下所示。

/usr/local/libxeve
 |--------------- lib
 |                 |----- xeve.lib
 |                 |----- xeve.dll
 |                 |----- pkgconfig
 |                           |----- xeve.pc
 |--------------- include
 |                 |----- xeve.h
 |                 |----- xeve_exports.h

七、編譯安裝FFmpeg

先下載最新的FFmpeg源碼(版本號需大於等於7.0),再把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/libxevd/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-libxevd --enable-libxeve --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/libxevd/lib/xevd.dll /usr/local/ffmpeg/bin
cp /usr/local/libxeve/lib/xeve.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-libxevd --enable-libxeve --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-libxevd --enable-libxeve”,説明FFmpeg已經啓用了MPEG-5 EVC視頻編解碼器libxevd和libxeve。

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

user avatar CH3CH2OH-Blog 頭像 startshineye 頭像 jingmingdewudongmian_dscnyw 頭像 weiyi_5b04fb4aa815a 頭像
點贊 4 用戶, 點贊了這篇動態!
點贊

Add a new 評論

Some HTML is okay.