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 type
                                       	  default, 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: 600

Rate 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.166667

For 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.166667

For 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.166667

Short-time stats, for window of 15 frames:
Average, rms-variance, and percent-fluct: 512.739200 184.254718 35.935368

Per 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.mfbz.cn/a/783966.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

React Hooks:上天在提醒你,别再用Class组件了!

React Hooks&#xff1a;上天在提醒你&#xff0c;别再用Class组件了&#xff01; React Hooks 的出现可以说是前端界的一场革命。它不仅让我们告别了繁琐的 Class 组件&#xff0c;还让代码变得更加简洁、易读、易维护。如果你还在固守 Class 组件的阵地&#xff0c;那么这篇…

vue3项目实战中的接口调用

vue项目组成 一个项目往往由这几个部分组成。&#x1f447;&#x1f447; 其中在src文件夹中的内容如下&#x1f447;&#x1f447; 我们常常将接口文件&#xff0c;新建在文件夹src下&#xff0c;一般命名为api&#xff0c;api内的文件便是接口文件。&#x1f447;&#x1f4…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第一篇 嵌入式Linux入门篇-

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

OpenCV基础(2)

目录 滤波处理 均值滤波 基本原理 函数用法 程序示例 高斯滤波 基本原理 函数用法 程序示例 中值滤波 基本原理 函数用法 程序示例 形态学 腐蚀 膨胀 通用形态学函数 前言&#xff1a;本部分是上一篇文章的延续&#xff0c;前面部分请查看&#xff1a;OpenCV…

MyBatis的底层机制

手写MyBatis底层机制 读取配置文件&#xff0c;得到数据库连接 思路 引入必要的依赖需要写一个自己的config.xml文件&#xff0c;在里面配置一些信息&#xff0c;driver&#xff0c;url &#xff0c;password&#xff0c;username需要编写Configuration类&#xff0c;对 自己…

服务器数据恢复—同品牌不同系列服务器raid5阵列数据恢复方案分析

RAID5磁盘阵列数据恢复案例一&#xff1a; 服务器数据恢复环境&#xff1a; 一台某品牌LH6000系列服务器&#xff0c;通过NetRaid阵列卡将4块硬盘组建为一组RAID5磁盘阵列。操作系统都为Window server&#xff0c;数据库是SQLServer。 服务器故障&#xff1a; LH6000系列服务器…

四、嵌入式技术(考点篇)试题(1)

我选择C&#xff0c;实际答案选B&#xff0c;答案给出的理由是&#xff0c;SoC是片上系统&#xff0c;包含完整系统和嵌入式软件全部内容&#xff0c;B的说法有点片面。 明显选C&#xff0c;嵌入式跟通用性不太沾边。 嵌入式OS特征&#xff1a;裁剪配置安全可靠实时高确定&…

Python基础知识——(001)

文章目录 P4——3. 程序设计语言的分类 1. 程序设计语言 2. 编译与解释 P5——4. Python语言的简介与开发工具 1. Python语言的简介 2. Python语言的发展 3. Python语言的特点 4. Python的应用领域 5. Python的开发工具 P6——5. IPO编程方式 IPO程序编写方法 P7——6. print函…

大模型隐私窃取攻击

前言 对于大模型风险&#xff0c;目前大家更多关注的还是越狱攻击。隐私这一块&#xff0c;可能国内还不如欧美重视&#xff0c;在安全的学术四大会议论文中&#xff0c;有时候甚至AI隐私的论文比AI安全的论文更多。但实际上&#xff0c;除了越狱之外&#xff0c;另外一大风险…

监控电脑软件【2024最新】|6款软件保姆式解析!

在数字化办公日益普及的今天&#xff0c;很多企业为了更好的提升员工的工作效率和保障企业的数据安全&#xff0c;开始给自己的企业布局电脑监控软件。 但市面上的电脑监控软件种类繁多复杂&#xff0c;为了更好的保障企业利用&#xff0c;小编推荐了以下几款电脑监控软件供大…

阶段三:项目开发---大数据开发运行环境搭建:任务4:安装配置Spark集群

任务描述 知识点&#xff1a;安装配置Spark 重 点&#xff1a; 安装配置Spark 难 点&#xff1a;无 内 容&#xff1a; Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop …

Python自动化测试系列[v1.0.0][高效自动化设计]

Python多线程应用于自动化测试 将多线程在测试巧妙地应用&#xff0c;确实会带来很多好处&#xff0c;并且这是充分利用机器资源执行高效率测试很好的方式 # -*- coding: utf-8 -*- import threading from time import ctime import time from selenium import webdriverdef …

【c语言】玩转文件操作

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;C语言 目录 引言 一、文件的打开和关闭 1.流 2.标准流 3.文本文件和二进制文件 4.控制文件打开与关闭的函数 二、文件的顺序读写 三、文件的随机读写 1…

7月学术会议:7月可投的EI国际会议

随着科技的迅猛发展&#xff0c;学术交流与研讨成为了推动科研进步的重要途径。进入7月&#xff0c;众多高质量的EI国际会议纷纷拉开帷幕&#xff0c;为全球的科研工作者提供了一个展示研究成果、交流学术思想的平台。以下&#xff0c;我们将详细介绍一些在7月可投的EI国际会议…

Java集合升序降序、转Set的方法

Collections.sort(list,Comparator.comparing(OcApplySquareVo::getApplyName).reversed()); 集合转set /** 集合转set */Set<String> pkCodeSet rows.stream().map(RailwayWeighBookResult.RailwayWeighBook::getPkCode).collect(Collectors.toSet());

猫咪浮毛太多怎么处理?6年铲屎官最值得买的猫毛空气净化器分享

作为一位拥有6年铲屎经验的铲屎官&#xff0c;家中既有宝宝又有毛孩子的铲屎官家庭来说&#xff0c;空气中的宠物异味和猫毛不仅影响生活质量&#xff0c;更关乎家人的健康。普通空气净化器虽然能够提供基本的空气净化&#xff0c;但对于养猫家庭的特定需求&#xff0c;如去除宠…

Pytest单元测试系列[v1.0.0][Pytest基础]

Pytest安装与配置 和Unittest一样&#xff0c;Pytest是另一个Python语言的单元测试框架&#xff0c;与Unittest相比它的测试用例更加容易编写、运行方式更加灵活、报错信息更加清晰、断言写法更简洁并且它可以运行有unittest和nose编写的测试用例。 Pytest 安装 启动命令行&…

A股本周在3000点以下继续筑底,本周依然继续探底?

夜已深&#xff0c;市场传来了3个浓烈的消息&#xff0c;炸锅了&#xff0c;恐有大事发生&#xff0c;马上告诉所有人&#xff1a; 消息面&#xff1a; 1、中国经济周刊首席评论员钮文新称&#xff1a;不要等中小投资者都彻底希望&#xff0c;销户离场了&#xff0c;才发现该…

新恒汇过会一年多注册仍遥遥无期,实控人大额负债入股资金靠借款

《港湾商业观察》施子夫 自2022年6月递表深交所创业板获受理&#xff0c;新恒汇电子股份有限公司 &#xff08;以下简称&#xff0c;新恒汇&#xff09;的上市之路无疑颇显诸多坎坷。2022年7月&#xff0c;深交所下发第一轮审核问询函&#xff1b;同年11月&#xff0c;深交所下…

Bugly的底层是怎么实现的

Bugly 入门 首先&#xff0c;简要介绍什么是 Bugly 以及它的主要功能&#xff1a; Bugly 是什么&#xff1a; Bugly 是腾讯提供的一款移动应用质量监控工具&#xff0c;主要用于捕捉应用的崩溃、ANR&#xff08;应用无响应&#xff09;、卡顿和错误日志。 主要功能&#xff1…