libaom 編碼器實驗 AV1 標準 SVC 分層編碼

SVC編碼

視頻SVC編碼,即Scalable Video Coding(可適性視訊編碼或可分級視頻編碼),是H.264/MPEG-4 AVC編碼的一種擴展,它提供了更大的編碼彈性,并且具有時間可適性(Temporal Scalability)、空間可適性(Spatial Scalability)及訊雜比(質量)可適性(SNR Scalability)三大特性。這種編碼方式允許視頻序列被分割成不同的部分,并根據實際環境選擇解碼的層級,從而適應不同的網絡帶寬和解碼能力。

SVC技術的目標是標準化編碼的高品質視頻碼流,使其能夠獨立拆分成一個或多個子比特流進行解碼,每個子比特流可以代表不同空間或時間分辨率較低或品質較差的視頻信號。SVC技術可以廣泛應用于監控、視頻會議、流媒體IPTV等領域,特別是在網絡丟包環境下,通過丟棄部分時域層級實現網絡適應性。

SVC技術的優勢在于其靈活性和網絡適應性,它可以一次編碼產生多個不同質量的視頻流,減少了服務器的編解碼負擔。然而,SVC的解碼復雜度比單層編碼高,且在相同條件下,分級碼流的壓縮效率比單層碼流低約10%。此外,由于SVC較晚成為正式標準,其兼容性和通用性不如AVC,實際應用不如AVC廣泛。

SVC對H.264的語法也進行了擴展,例如對NAL(Network Adaptive Layer)頭進行了擴展,以描述碼流的分級信息,并使用保留的NAL類型14、20編碼增強層碼流。

AV1

AV1是一種開源、免版稅的視頻編碼格式,由開放媒體聯盟(AOMedia)開發,旨在提供比現有標準更高的視頻壓縮效率。AV1是基于VP9的繼任者,結合了多種技術,提供了更多的編碼選項,以適應不同類型的輸入視頻內容。

AV1的主要目標是在現有編解碼器的基礎上獲得顯著的壓縮率提升,同時確保解碼的復雜性和硬件的實際可行性。它提供了以下關鍵編碼技術:

  1. 幀間預測運動補償:AV1允許更復雜的參考幀和運動矢量池,擴展了參考幀的數量,并使用高自適應加權算法和源,增強了復合預測。

  2. 動態空間與時間運動矢量參考:AV1通過搜索空間和時間候選,獲得更好的運動矢量參考,并通過運動場估計過程,生成時間候選。

  3. 重疊塊運動補償(OBMC):通過平滑地組合從鄰近運動矢量創建的預測,減少塊邊緣附近的預測誤差。

  4. 變換塊分區和擴展的轉換內核:AV1支持多種大小的變換單元,以及更豐富的轉換內核集,包括DCT、ADST、flipADST和IDTX等。

  5. 熵編碼:AV1使用多符號熵編碼和電平圖系數編碼,提高壓縮效率并簡化編碼器設計。

AV1編碼器在FFmpeg中得到支持,包括libaom(libaom-av1)SVT-AV1(libsvtav1)rav1e(librav1e) 等編碼器。AV1編碼器提供了不同的碼率控制模式,如恒定質量(CRF)、限制質量等,以適應不同的編碼需求。

NVIDIA GeForce RTX 30系列GPU支持AV1解碼,這標志著視頻內容新紀元的開啟。AV1編碼效率相比H.264最高提升50%,支持10-bit編碼和HDR視頻,為用戶提供了更高的分辨率和幀率體驗。

總的來說,AV1作為一種新興的開源視頻編碼格式,以其高效的壓縮性能和靈活的編碼選項,有望在視頻傳輸和流媒體服務中發揮重要作用。

AV1是默認支持SVC的第一個編解碼器,這使得它在公共互聯網上的應用具有顯著優勢。例如,在WebRTC(Web Real-Time Communications)應用中,AV1的SVC特性可以提供更好的網絡適應性和彈性,同時支持更高的視頻質量和更低的帶寬需求。

此外,AV1的SVC實現還包括了對屏幕內容編碼的優化,這是會議和視頻通話中的一個重要用例。AV1的屏幕編碼工具作為基本功能集成在編解碼器中,而不是作為擴展,這為屏幕共享提供了更高的編碼效率。

libaom實驗SVC 編碼

  1. 代碼下載git clone https://aomedia.googlesource.com/aom
  2. 安裝依賴軟件:CMake、Git、編譯器(gcc 6+, clang 7+, Microsoft Visual Studio 2019+ or the latest version of MinGW-w64 (clang64 or ucrt toolchains))、Perl、yasm/nasm、doxygen、EMSDK
  3. 編譯:參考 README.md,利用 CMake 進行編譯。
    $ cmake path/to/aom$ make
  1. 查看編譯后文件:在 build 目錄下,有對應的庫文件和可執行程序,其中在 examples 目錄里有對應的 libaom 使用例子:
.
├── aom_cx_set_ref
├── decode_to_md5
├── decode_with_drops
├── lightfield_bitstream_parsing
├── lightfield_decoder
├── lightfield_encoder
├── lightfield_tile_list_decoder
├── lossless_encoder
├── noise_model
├── photon_noise_table
├── scalable_decoder
├── scalable_encoder
├── set_maps
├── simple_decoder
├── simple_encoder
├── svc_encoder_rtc
├── twopass_encoder
  1. 終端實驗svc_encoder_rtc可執行程序./svc_encoder_rtc
Usage: ./svc_encoder_rtc <options> input_filename -o output_filename
Options:-f <arg>, --frames=<arg>              Number of frames to encode-o <arg>, --output=<arg>              Output filename-w <arg>, --width=<arg>               Source width-h <arg>, --height=<arg>              Source height-t <arg>, --timebase=<arg>            Timebase (num/den)-b <arg>, --target-bitrate=<arg>      Encoding bitrate, in kilobits per second-sl <arg>, --spatial-layers=<arg>     Number of spatial SVC layers-k <arg>, --kf-dist=<arg>             Number of frames between keyframes-r <arg>, --scale-factors=<arg>       Scale factors (lowest to highest layer)--min-q=<arg>               Minimum quantizer--max-q=<arg>               Maximum quantizer-tl <arg>, --temporal-layers=<arg>    Number of temporal SVC layers-lm <arg>, --layering-mode=<arg>      Temporal layering scheme.-th <arg>, --threads=<arg>            Number of threads to use-aq <arg>, --aqmode=<arg>             AQ mode off/on-d <arg>, --bit-depth=<arg>           Bit depth for codec 8 or 10. 8, 10-sp <arg>, --speed=<arg>              Speed configuration-bl <arg>, --bitrates=<arg>           Bitrates[spatial_layer * num_temporal_layer + temporal_layer]--drop-frame=<arg>          Temporal resampling threshold (buf %)--error-resilient=<arg>     Error resilient flag--output-obu=<arg>          Write OBUs when set to 1. Otherwise write IVF files.--test-decode=<arg>         Attempt to test decoding the output when set to 1. Default is 1.--tune-content=<arg>        Tune content typedefault, screen, film--psnr=<arg>                Show PSNR in status line.
  1. 命令行輸入空域 3 層 SVC 編碼./svc_encoder_rtc -w 1280 -h 720 -k 30 -sl 3 -lm 6 -b 1000 --bitrates=200,300,500 vidyo4_720p_60.yuv -o o.ivf
    • 注意:分層數要與分層模式相匹配。
Codec AOMedia Project AV1 Encoder v3.8.3
layers: 3
width 1280, height: 720
num: 1, den: 30, bitrate: 1000
gop size: 30
Total number of processed frames: 600Rate control layer stats for 1 layer(s):For layer#: 0 0 
Bitrate (target vs actual): 200 202.397200
Average frame size (target vs actual): 6666.666667 6357.117241
Average rate_mismatch: 38.170552
Number of input frames, encoded (non-key) frames, and perc dropped frames: 600 580 3.166667For layer#: 1 0 
Bitrate (target vs actual): 300 302.790800
Average frame size (target vs actual): 10000.000000 10441.062069
Average rate_mismatch: 59.582759
Number of input frames, encoded (non-key) frames, and perc dropped frames: 600 580 3.166667For layer#: 2 0 
Bitrate (target vs actual): 500 505.510000
Average frame size (target vs actual): 16666.666667 17431.379310
Average rate_mismatch: 58.197545
Number of input frames, encoded (non-key) frames, and perc dropped frames: 600 580 3.166667Short-time stats, for window of 15 frames:
Average, rms-variance, and percent-fluct: 512.739200 184.254718 35.935368Per layer encoding time/FPS stats for encoder: 0 0 601 1.340471 746.006507 
Per layer encoding time/FPS stats for encoder: 1 0 601 2.559216 390.744619 
Per layer encoding time/FPS stats for encoder: 2 0 601 7.417110 134.823405 Frame cnt and encoding time/FPS stats for encoding: 601 11.316797 88.364225
  1. 查看編碼出來的視頻流:可以看到在文件目錄里生成四個 ivf 格式視頻流,分別對應 0、1、2 層空域視頻流,其中 o.ivf 和 2 層一樣。
    在這里插入圖片描述

  2. 播放 SVC 視頻流:利用 ffplay 分別播放視頻,0、1、2 層分辨率分別為 360x180、640x360、1280x720。
    在這里插入圖片描述
    在這里插入圖片描述
    在這里插入圖片描述

  3. 用流工具 elecard 查看流信息: 可以看到 AV1 的流格式為 IVF Start Header | IVF Frame Header | OBU Header |OBU Sequence Header | OUB Frame |…
    在這里插入圖片描述

參考

  • 關于 AV1 語法可參考:AV1 Bitstream & Decoding Process Specification

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/42923.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/42923.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/42923.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

單向鏈表的概念和結構

文章目錄 1.鏈表的概念及結構2.單鏈表的實現 1.鏈表的概念及結構 概念&#xff1a;鏈表是一種物理存儲結構上非連續、非順序的存儲結構&#xff0c;數據元素的邏輯順序是通過鏈表 中的指針鏈接次序實現的 。 鏈表的結構跟火車車廂相似&#xff0c;淡季時車次的車廂會相應減少&…

【基礎算法總結】分治—歸并

分治—歸并 1.排序數組2.交易逆序對的總數3.計算右側小于當前元素的個數4.翻轉對 點贊&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;關注&#x1f496;&#x1f496; 你的支持是對我最大的鼓勵&#xff0c;我們一起努力吧!&#x1f603;&#x1f603; 1.排序數組 …

NFTScan | 07.01~07.07 NFT 市場熱點匯總

歡迎來到由 NFT 基礎設施 NFTScan 出品的 NFT 生態熱點事件每周匯總。 周期&#xff1a;2024.07.01~ 2024.07.07 NFT Hot News 01/ 數據&#xff1a;Mad Lads 地板價回升至 100 SOL 上方&#xff0c;24 小時漲幅為 13.65% 7 月 1 日&#xff0c;據數據顯示&#xff0c;Solana…

ARM架構以及程序運行解析

文章目錄 1. ARM架構 2. ARM處理器程序運行的過程 3. 示例 3. 基于ARM架構的STM32單片機 1. 運行模式 2. 寄存器組 3. STM32的基本結構 4. STM32的運行模式 4. 寄存器組詳解 1. 未備份寄存器 2. 備份寄存器 3. 程序計數器 4. 程序狀態寄存器 5. CPSR和SPSR寄存器…

【Unity】UGUI的基本介紹

Unity的UGUI&#xff08;Unity User Interface&#xff09;是Unity引擎內自帶的UI系統&#xff0c;官方稱之為UnityUI&#xff0c;是目前Unity商業游戲開發中使用最廣泛的UI系統開發解決方案。以下是關于Unity的UGUI的詳細介紹&#xff1a; 一、UGUI的特點 靈活性&#xff1a…

Trick : 10^x 以內最多的因子數

Trick : 1 0 x 10^x 10x 以內最多的因子數 1 0 5 10^5 105 以內具有最多的因子數的數是 83160&#xff0c;它有 128 個因子 ; 1 0 6 10^6 106 以內具有最多因子數的數是 720720&#xff0c;它有 240 個因子 ; 所以遇到需要枚舉因子的&#xff0c;預處理之后大膽枚舉就可以&…

Python 爬蟲 tiktok API接口獲取tiktok用戶關注列表

此接口可獲取tiktok用戶關注列表。若有需要&#xff0c;請點擊文末鏈接聯系我們。 詳細采集頁面如下https://www.tiktok.com/quanap_official 請求API http://api.xxxx.com/tt/user/following?user_id7252644648840381445&count10&offset0&tokentest 請求參數 返…

Impala寫Parquet文件

Impala Parquet相關代碼 https://github.com/cloudera/Impala/search?l=cpp&q=parquet&ref=cmdform 沒有可重用的庫接口,需要在代碼里去看,提取出來,直接使用源碼。 調用關系如下(自右向左調用): HdfsParquetTableWriter(HdfsTableWriter)<-HdfsTableSink<…

改進Transformer模型其實也不難

聲明&#xff1a;文章是從本人公眾號中復制而來&#xff0c;因此&#xff0c;想最新最快了解各類智能優化算法及其改進的朋友&#xff0c;可關注我的公眾號&#xff1a;強盛機器學習&#xff0c;不定期會有很多免費代碼分享~ 目錄 原理簡介 數據介紹 結果展示 完整代碼 之前…

列表(定義、引用、修改、切片和用途)

什么是列表 列表是 Python 中最常用的數據類型之一。它是一種有序、可變&#xff0c;異構的數據集合&#xff0c;可以存儲多個不同類型的元素。 列表的特點 列表是 Python 中的一種數據結構&#xff0c;具有以下特點&#xff1a; 有序性&#xff1a; 列表中的元素按照添加的…

【學術會議征稿】第五屆計算機工程與智能控制學術會議(ICCEIC 2024)

第五屆計算機工程與智能控制學術會議&#xff08;ICCEIC 2024) 2024 5th International Conference on Computer Engineering and Intelligent Control 第五屆計算機工程與智能控制學術會議&#xff08;ICCEIC 2024&#xff09;將于2024年10月18日至22日在廣州舉辦&#xff0…

improved-diffusion代碼逐行理解之train

目錄 代碼理解1、解析命令行參數2、分布式設置和日志配置3、創建模型和擴散過程4、加載數據5、訓練循環6、訓練過程中的關鍵點7、日志和模型保存 代碼 improved-diffusion代碼地址&#xff1a;https://github.com/openai/improved-diffusion 運行代碼會遇到的幾個問題&#xf…

LDR6282-顯示器:從技術革新到視覺盛宴

顯示器&#xff0c;作為我們日常工作和娛樂生活中不可或缺的一部分&#xff0c;承載著將虛擬世界呈現為現實圖像的重要使命。它不僅是我們與電子設備交互的橋梁&#xff0c;更是我們感知信息、享受視覺盛宴的重要窗口。顯示器在各個領域的應用也越來越廣泛。在辦公領域&#xf…

Gradle使用插件SonatypeUploader-v2.6上傳到maven組件到遠程中央倉庫

本文基于sonatypeUploader 2.6版本 插件的使用實例&#xff1a;https://github.com/jeadyx/SonatypeUploaderSample 發布步驟 提前準備好sonatype賬號和signing配置 注&#xff1a;如果沒有&#xff0c;請參考1.0博文的生成步驟&#xff1a; https://jeady.blog.csdn.net/art…

收銀系統源碼-營銷活動-幸運抽獎

1. 功能描述 營運抽獎&#xff1a;智慧新零售收銀系統&#xff0c;線上商城營銷插件&#xff0c;商戶/門店在小程序商城上設置抽獎活動&#xff0c;中獎人員可內定&#xff1b; 2.適用場景 新店開業、門店周年慶、節假日等特定時間促銷&#xff1b;會員拉新&#xff0c;需會…

SQLServer連接異常

2. 文件夾對應的是[internal].[folders]表&#xff0c;與之相關的權限在[internal].[folder_permissions]表 項目對應的是[internal].[projects]表&#xff0c;與之相關的權限在[internal].[project_permissions]&#xff0c;版本在[internal].[object_versions]表。 環境對應…

MongoDB本地配置分片

mongodb server version: 7.0.12 社區版 mongo shell version: 2.2.10 平臺&#xff1a;win10 64位 控制臺&#xff1a;Git Bash 分片相關節點結構示意圖 大概步驟 1. 配置 配置服務器 副本集 &#xff08;最少3個節點&#xff09; -- 創建數據目錄 mkdir -p ~/dbs/confi…

華為eNSP:HCIA匯總實驗

本次拓撲實驗需求&#xff1a; 1、內網地址用DHCP 2、VLAN10不能訪問外網 3、使用靜態NAT 實驗用到的技術有DHCP、劃分VLAN、IP配置、VLAN間的通信&#xff1a;單臂路由、VLANIF&#xff0c;靜態NAT、基本ACL DHCP是一種用于自動分配IP地址和其他網絡參數的協議。 劃分VLA…

新型模型架構(參數化狀態空間模型、狀態空間模型變種)

文章目錄 參數化狀態空間模型狀態空間模型變種Transformer 模型自問世以來,在自然語言處理、計算機視覺等多個領域得到了廣泛應用,并展現出卓越的數據表示與建模能力。然而,Transformer 的自注意力機制在計算每個詞元時都需要利用到序列中所有詞元的信息,這導致計算和存儲復…

Butterfly主題添加動畫加載效果

安裝插件 安裝插件,在博客根目錄[Blogroot]下打開終端&#xff0c;運行以下指令&#xff1a; npm install hexo-butterfly-wowjs --save添加配置 添加配置信息&#xff0c;以下為寫法示例 在站點配置文件_config.yml或者主題配置文件_config.butterfly.yml中添加 wowjs:ena…