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.mzph.cn/diannao/42923.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【基础算法总结】分治—归并

分治—归并 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…

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 请求参数 返…

改进Transformer模型其实也不难

声明&#xff1a;文章是从本人公众号中复制而来&#xff0c;因此&#xff0c;想最新最快了解各类智能优化算法及其改进的朋友&#xff0c;可关注我的公众号&#xff1a;强盛机器学习&#xff0c;不定期会有很多免费代码分享~ 目录 原理简介 数据介绍 结果展示 完整代码 之前…

【学术会议征稿】第五届计算机工程与智能控制学术会议(ICCEIC 2024)

第五届计算机工程与智能控制学术会议&#xff08;ICCEIC 2024) 2024 5th International Conference on Computer Engineering and Intelligent Control 第五届计算机工程与智能控制学术会议&#xff08;ICCEIC 2024&#xff09;将于2024年10月18日至22日在广州举办&#xff0…

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 的自注意力机制在计算每个词元时都需要利用到序列中所有词元的信息,这导致计算和存储复…

简单介绍 Dagger2 的入门使用

依赖注入 在介绍 Dagger2 这个之前&#xff0c;必须先解释一下什么是依赖注入&#xff0c;因为这个库就是用来做依赖注入的。所以这里先简单用一句话来介绍一下依赖注入&#xff1a; 依赖注入是一种设计模式&#xff0c;它允许对象在运行时注入其依赖项。而不是在编译时确定&a…

Andorid 11 InputDispatcher FocusedApplication设置过程分析

在Input ANR中&#xff0c;有一类ANR打印的reason 为 “xx does not have a focused window” &#xff0c;表明 输入事件 5s 内&#xff0c;只有FocusedApplication&#xff0c;而没找到focused window。本文分析下FocusedApplication的设置过程。 setFocusedApp 源码路径&am…

用PlantUML可视化显示JSON

概述 PlantUML除了绘制UML中的一些标准图之外&#xff0c;也可以以图形化的方式显示一些其他图形或数据形式的结构&#xff0c;这其中就包括JSON。 它以一种简单且优美的图形形式&#xff0c;表达了JSON的结构。你可以用它来作为设计JSON数据文件的依据&#xff0c;辅助设计或…

day01:项目概述,环境搭建

文章目录 软件开发整体介绍软件开发流程角色分工软件环境 外卖平台项目介绍项目介绍定位功能架构 产品原型技术选型 开发环境搭建整体结构&#xff1a;前后端分离开发前后端混合开发缺点前后端分离开发 前端环境搭建Nginx 后端环境搭建熟悉项目结构使用Git进行版本控制数据库环…

【C++】AVL树(旋转、平衡因子)

&#x1f308;个人主页&#xff1a;秦jh_-CSDN博客&#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/qinjh_/category_12575764.html?spm1001.2014.3001.5482 ​ 目录 前言 AVL树的概念 节点 插入 AVL树的旋转 新节点插入较高左子树的左侧---左左&#xff1a;…

【C++】stack和queue的模拟实现 双端队列deque的介绍

&#x1f525;个人主页&#xff1a; Forcible Bug Maker &#x1f525;专栏&#xff1a; STL || C 目录 &#x1f308;前言&#x1f525;stack的模拟实现&#x1f525;queue的模拟实现&#x1f525;deque&#xff08;双端队列&#xff09;deque的缺陷 &#x1f308;为什么选择…