FFmpeg開發筆記(二十四)Linux環境給FFmpeg集成AV1的編解碼器

来源:https://www.cnblogs.com/aqi00/p/18199491
-Advertisement-
Play Games

​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。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Spring AI 初學 Spring AI 官方地址 ”spring 不生產 AI,只是 AI 工具的搬運工“ 項目可以查看gitee Open AI 前期準備 Open AI官方地址,需要使用魔法才能打開,同時購買很麻煩,建議淘寶進行購買,只需要購買 open ai 的 apikey 即可。 a ...
  • 在財稅工作中,處理髮票信息是一項繁瑣而重要的任務。然而,藉助先進的技術,我們可以將這個過程簡化並提高效率。今天,我將介紹一個API介面,它可以在秒級內識別發票信息,讓財稅工作變得更輕鬆。 這個API介面是由挖數平臺提供的,你可以在他們的網站上找到詳細的信息。它支持對多種類型的發票進行結構化識別,包括 ...
  • 一、爬取目標 小紅書是眾多客戶的流量藍海,可通過評論區數據高效引流獲客。我用python開發的爬蟲採集軟體,可自動抓取小紅書評論數據,並且含二級評論數據。 為什麼有了源碼還開發界面軟體呢?方便不懂編程代碼的小白用戶使用,無需安裝python,無需改代碼,雙擊打開即用! 1.1 效果截圖 軟體界面截圖 ...
  • 作者:l拉不拉米 鏈接:https://juejin.cn/post/7031445206152577061 一、前言 公司剛入職了一名中級Java開發,經過一個星期的適應學習,各方面表現還不錯,於是分配了一個小的迭代給新人做。 需求很簡單,把從第三方拉取的數據匹配到自身公司後臺設置的渠道後,聚合到 ...
  • 目的:求多個集合之前的並集,例如:現有四個集合C1 = {11, 22, 13, 14}、C2 = {11, 32, 23, 14, 35}、C3 = {11, 22, 38}、C4 = {11, 22, 33, 14, 55, 66},則它們之間的並集應該為: C1 & C2 & C3 = {11 ...
  • 1.排序方式 假設有一個序列,數據為:['n1', 'n2', 'n10', 'n11', 'n21', 'n3', 'n13', 'n20', 'n23'], 排序後需要達到這個效果:['n1', 'n2', 'n3', 'n10', 'n11', 'n13', 'n20', 'n21', 'n2 ...
  • 介紹 在學習了sylar的C++高性能分散式伺服器框架後,想把自己在學習過程中的感想記錄下來。當然主要原因還是sylar的B站視頻過於難以理解了,也是想加強一下自己對這個框架的理解。很多內容也是借鑒了其他大佬的博文,比如找人找不到北,zhongluqiang 日誌模塊概述 日誌模塊的目的: 用於格式 ...
  • 本文介紹JupyterLab中菜單欄按鈕無法點擊、快捷鍵無法執行問題的解決辦法。 近期打開JupyterLab後,發現其中菜單欄按鈕無法點擊,快捷鍵也均無法執行。如圖,紅框內的按鈕點擊均無任何反應。 為解決這一問題,首先嘗試關閉VPN、瀏覽器代理設置等,均不奏效。隨後,在搜索時看到Stack Ove ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...