当前位置: 首页 > article >正文

av1编码--比特流结构

目录2.2.1 序列头信息2.2.2 帧头信息2.2.4 时间分隔符信息2.2.5 切片组信息AV1 比特流是由一系列名为开放比特流单元OBU的数据单元组成。每个 OBU 由一个可变长度的字节串Byte String组成。具体来讲OBU 包含一个头部信息Header和一个有效载荷Payload。头部信息用于识别 OBU 类型并指定有效载荷的大小。OBU 头部信息包含obu_forbidden_bit、obu_type、obu_extension_flag、obu_has_size_field和obu_reserved_1bit。其中obu_forbidden_bit占用 1 比特其值必须设置为 0obu_type占用 4 比特所以obu_type共有 16 种取值obu_extension_flag、obu_has_size_field和obu_reserved_1bit各占用 1 比特。图 2-2 所示为 AV1 中 OBU 的组成结构。图2-2 AV1中OBU的组成结构在图 2-2 中0 表示obu_forbidden_bite、s 和 r 分别表示obu_extension_flag、obu_has_size_field和obu_reserved_1bittemp_id表示语法元素temporal_id占用 3 比特s_id表示语法元素spatial_id占用 2 比特reserved表示语法元素extension_header_reserved_3bits占用 3 比特obu_size表示以字节为单位指定 OBU 的大小但是不包括obu_header中的字节或obu_size语法元素中的字节它是可选的即 OBU 不需要必须包含obu_sizetrail_bits包括语法元素trailing_one_bit和trailing_zero_bit。OBU 头部信息中的obu_type指定 OBU 有效载荷中包含的数据结构类型。表 2-1 所示为obu_type的取值以及其代表的含义。其中“保留值” 是为将来使用而保留的AV1 解码器应该忽略它们。表 2-1obu_type的取值以及其代表的含义obu_type取值含义obu_type取值含义0保留值6OBU_FRAME1OBU_SEQUENCE_HEADER7OBU_REDUNDANT_FRAME_HEADER2OBU_TEMPORAL_DELIMITER8OBU_TILE_LIST3OBU_FRAME_HEADER9~14保留值4OBU_TILE_GROUP15OBU_PADDING5OBU_METADATA根据obu_type的取值OBU 可以分为序列头部 OBUOBU_SEQUENCE_HEADER、帧头部 OBUOBU_FRAME_HEADER、元数据信息 OBUOBU_METADATA、时间分隔符 OBUOBU_TEMPORAL_DELIMITER和切片组 OBUOBU_TILE_GROUP。OBU 头部信息中的obu_extension_flag用于指明可选的 OBU 扩展头信息OBU Extension Header是否存在。当obu_extension_flag等于 1 时表示存在 OBU 扩展头信息。此时解码器将从 OBU 扩展头信息读取当前 OBU 的时域索引temporal_id和空域索引spatial_id。OBU 的temporal_id指定了 OBU 所包含数据的时域层Temporal Level。OBU 的spatial_id则指定了 OBU 所包含数据的空域层Spatial Level。如果当前 OBU 的temporal_id或spatial_id不存在那么解码器将把其temporal_id或spatial_id设置为 0。如果使用了扩展性编码Scalable Coding则temporal_id和spatial_id都等于 0 的切片组 OBU 称为基础层Base Layer而spatial_id大于 0 或者temporal_id大于 0 的切片组 OBU 称为增强层Enhancement Layer。如果一个编码视频序列包含至少一个增强层那么所有与基础层和增强层数据相关的帧头 OBU 和切片组 OBU 都必须包括 OBU 扩展头信息。也就是说当编码视频序列包含增强层时需要用 OBU 扩展头信息来指明 OBU 的spatial_id和temporal_id。这是因为 AV1 利用压缩视频数据的spatial_id和temporal_id来决定它们之间的参考关系。假设有 2 个压缩视频数据 A 和 B其中 A 的temporal_id和spatial_id分别是 T 和 SB 的temporal_id和spatial_id分别是 T 和 S那么只有当 T≥ T 并且 S≥ S 时A 才能够参考 B。在 AV1 中要解码的空域层或时域层称为操作点Operating PointOP。所有的操作点组成了编码视频序列Coded Video Sequence。如果没有使用扩展性编码则可以视为整个编码视频序列只包含一个操作点。2.2.1 序列头信息序列头部 OBU 的内容是序列头信息Sequence Header。类似于 HEVC 中的序列级参数集Sequence Parameter SetSPS序列头信息包含适用于整个编码序列的参数信息。这些参数在编码视频序列中的每个图像之间不会发生改变。序列头信息中的一些参数提供了编码序列的关键描述这对于系统接口非常有用其他参数则描述了编码工具的使用状态或者提供了编码工具参数这可以提高编码效率。除此之外序列头信息还可以选择性地包含视频可用性信息数据。这些信息虽然不会直接影响解码过程但提供了两类有价值的数据。第一类与解码图片的显示有关比如色度配置Color Config Syntax等信息。第二类包括假设参考解码器Hypothetical Reference DecoderHRD使用的时间信息Timing Info Syntax、解码模型信息Decoder Model Info Syntax以及解码操作参数信息Operating Parameters Info Syntax。比如语法元素still_picture用于指示编码视频序列是否仅由单一编码帧组成。当still_picture设置为 1 时意味着整个编码视频序列仅由单一的编码帧组成这通常用于静态图像或类似于图片的场景。当still_picture设置为 0 时表示编码视频序列由一系列视频帧组成。语法元素operating_points_cnt_minus_1用于指示编码视频序列包含多少个操作点它的数值等于操作点的总数减去 1。所以实际的操作点数量需要在该值的基础上加 1 来得到。例如如果operating_points_cnt_minus_1的值为 3那么视频序列中就有 4 个操作点。语法元素operating_point_idc[i]包含一个位掩码Bit Mask用于指示操作点 i 应该解码哪些空域层和时域层。在这个位掩码中低 8 位索引为 07表示时域层高 4 位索引为 811表示空域层。每一位的值0 或 1决定了对应的层是否应该被解码器处理。具体来讲如果要解码时域层 k则把第 k 位设置为 1其中 k 的范围是 07。如果要解码空域层 j则把第 j8 位设置为 1其中 j 的范围是 03。描述编码序列特性的关键参数也包含在序列头信息中。语法元素seq_profile和seq_level_idx指明编码视频所使用的档次和级别。档次和级别指定了解码比特流所需的能力限制。档次指定了支持的视频位宽和色度下采样格式而级别定义了分辨率和性能特征比如对最大采样率、图片大小和解码图片缓冲区等能力施加限制。在序列头信息中可以设置各种编码工具的启用或禁用选项以及对这些工具的限制。例如如果将序列头中的use_128x128_superblock参数设置为 0那么编码器就不会使用 128×128 像素的超级块进行编码。同样如果将enable_warped_motion参数设置为 0那么在帧间预测时就不会使用畸变运动补偿技术。这样做的结果是编码器无须传输与畸变运动补偿相关的语法元素从而简化了编码过程。2.2.2 帧头信息帧头 OBU 的内容是帧头Frame Header信息。类似于 HEVC 中的帧级参数集Picture Parameter SetPPS帧头信息包含的参数可能在同一编码视频序列中的不同图片之间发生变化。下面介绍几个常用的帧头信息的语法元素。帧头信息中的语法元素show_frame在 AV1 中用于控制解码后的视频帧是否立即显示。当show_frame的值设置为 1 时表示一旦该视频帧完成解码它就应该立即显示相反如果show_frame的值设置为 0则意味着该帧在解码后不会立即显示。此外如果后续接收到的帧头信息中包含语法元素show_existing_frame并且其值被设置为 1那么之前那些解码完成但show_frame为 0 的帧就可能被展示。在视频编码的特定应用场景中这些语法元素可以灵活控制帧的显示时机。基于show_frame和show_existing_frame的视频帧显示机制AV1 解码器在解码顺序与输出顺序不同时可以进行帧重排序以使解码视频帧按照输出顺序显示。帧头信息中的语法元素frame_type用于指明视频图片的帧类型。AV1 定义了 4 种帧类型KEY_FRAME、INTER_FRAME、INTRA_ONLY_FRAME和SWITCH_FRAME。表 2-2 所示为frame_type的取值及帧类型。表 2-2frame_type的取值及帧类型语法元素frame_type的取值帧类型0KEY_FRAME1INTER_FRAME2INTRA_ONLY_FRAME3SWITCH_FRAME语法元素refresh_frame_flags用于指明 DPB 的更新机制。具体来讲当一个视频帧编码结束后编码器根据该帧头信息中refresh_frame_flags的取值来决定把当前视频帧放入 DPB 中的哪个位置。当帧头信息中的frame_typeKEY_FRAME并且show_frame1时refresh_frame_flags被设置为0xFF这个关键帧将占据 DPB 中的所有位置。从这个角度来看AV1 中的KEY_FRAME类似于 HEVC 中的 IDR 帧因为它们都会重新设置 DPB 状态。下面再总结一下不同帧类型之间的区别如果当前帧的语法元素frame_typeKEY_FRAME则当前帧通常被称为关键帧。关键帧中的所有编码块只能使用帧内预测模式并且当关键帧的语法元素show_frame1时关键帧将会重新设置 DPB 状态。所以当关键帧的语法元素show_frame1时任何编码顺序位于此关键帧之后的视频帧都不能把编码顺序位于它之前的视频帧作为参考帧。这样的规则确保了在关键帧之后编码的视频帧仅依赖于关键帧本身而不依赖于在关键帧之前编码的任何视频帧从而保持了关键帧的随机访问特性。如果当前帧的frame_typeINTRA_ONLY_FRAME则当前帧通常又称为普通帧内预测帧。与关键帧类似普通帧内预测帧中的所有编码块也只能使用帧内预测模式。然而与关键帧不同的是普通帧内预测帧不会重新设置 DPB 状态。因此在普通帧内预测帧之后编码的视频帧仍可以把在该普通帧内预测帧之前编码的视频帧作为参考帧。这样的设计允许视频编码过程中的后续帧利用先前帧的信息以优化预测效果并提高编码效率。如果当前帧的语法元素frame_typeINTER_FRAME则当前帧的编码块不但可以使用帧内预测模式还可以使用帧间预测模式。如果当前帧的语法元素frame_typeSWITCH_FRAME则表示当前帧的分辨率将发生变换即当前帧的分辨率不再等于序列头传输的视频帧分辨率。对于语法元素frame_typeSWITCH_FRAME的视频帧其编码块可以使用帧内预测模式也可以帧间预测模式。当编码块使用帧间预测时由于当前帧与参考帧之间的分辨率可能不同因此要使用缩放帧间预测关于缩放帧间预测请参考第 9 章。另外需要注意的是语法元素frame_typeSWITCH_FRAME的视频帧也能够重新设置 DPB 状态。所以frame_typeSWITCH_FRAME的帧具备重新设置 DPB 状态的能力而无须强制进行帧内预测从而使视频编码更加灵活。2.2.3 元数据信息元数据信息 OBU 的作用是传输视频编码过程中的元数据信息。元数据包括色彩空间信息、高动态范围High Dynamic RangeHDR信息、可扩展性编码信息以及时间信息。为了区分元数据中的信息AV1 定义了语法元素metadata_type以指明元数据存储的数据类型。表 2-3 所示为metadata_type的取值及元数据类型。表 2-3metadata_type的取值及元数据类型语法元素metadata_type的取值元数据类型0AOM 保留值1METADATA_TYPE_HDR_CLL2METADATA_TYPE_HDR_MDCV3METADATA_TYPE_SCALABILITY4METADATA_TYPE_ITUT_T355METADATA_TYPE_TIMECODE6 ~ 31未注册用户私有Unregistered User Private大于或等于 32AOM 保留值这里需要注意的是当metadata_type等于 3 时即元数据类型是METADATA_TYPE_SCALABILITY此时元数据 OBU 是可扩展性编码信息。可扩展性编码信息旨在让中间处理模块不需要解码单独帧就能了解视频比特流的结构。为了使这些中间处理模块能够尽早了解视频序列的可扩展性结构可扩展性编码信息应紧跟在序列头之后放置。2.2.4 时间分隔符信息时间分隔符 OBU 用于传输时间分隔符信息。时间分隔符用于指明帧在显示过程中的时间戳。所有在时间分隔符 OBU 之后显示的帧都将使用这个时间戳直到下一个时间分隔符 OBU 到达。这意味着从时间分隔符 OBU 开始所有后续的帧都会根据这个时间戳来同步播放直到遇到下一个时间分隔符 OBU这时可能会开始一个新的时间戳序列。2.2.5 切片组信息在 AV1 编码中一个视频帧可以被分割成多个尺寸更小、更易于处理的切片Tile。每个切片包含视频帧的一部分数据并且可以单独解码。所有切片都完成解码并且经过环路滤波器处理之后会被组合起来形成完整的重构图像。切片组包含了一帧图像中所有切片的数据用于解码和呈现整个帧。比如编码块的帧内预测模式、运动向量和残差数据等信息都属于切片组信息。为了提高效率帧头 OBU 和切片组 OBU 会打包成一个 OBU在这种情况下帧头信息后面紧跟着的是切片组信息。包含帧头信息和切片组信息的 OBU 又称为帧 OBUFrame OBU。

相关文章:

av1编码--比特流结构

目录 2.2.1 序列头信息 2.2.2 帧头信息 2.2.4 时间分隔符信息 2.2.5 切片组信息 AV1 比特流是由一系列名为开放比特流单元(OBU)的数据单元组成。每个 OBU 由一个可变长度的字节串(Byte String)组成。具体来讲,OBU 包…...

软件测试行业还有未来吗?从业者该何去何从?

前几天某软出现了稍具规模的维权活动,据说当事人是测试同行,感觉当前从业环境越来越恶劣了,然后我把各大招聘平台(如BOSS直聘、拉勾、智联招聘、猎聘等)上“软件测试”相关岗位爬了一遍,并做了深度数据挖掘…...

从排名监控到答案诊断:一个算法工程师眼中的GEO工具技术选型标准

本文从工程师视角,剖析生成式搜索优化中的多模型诊断瓶颈,通过异步调度架构与沙盒隔离策略,实现品牌提及率的精准监控与算力可控消耗,为GEO工具选型提供技术验证依据。 传统监控工具在生成式搜索场景面临三重策略瓶颈:…...

146台储罐+10台喷淋塔,新能源项目为什么认准PPH?

在新能源材料项目的设备选型中,PPH正逐渐变成大多数厂家选择的一种材质。 最近美联新材料的新能源产业化项目,一口气向吉庆订了146台PPH贮罐、10台PPH喷淋塔,今天就借着这个真实项目,来聊一聊,PPH为什么能成成新能源项…...

如何在3分钟内为Word添加专业APA第7版引用格式:终极指南

如何在3分钟内为Word添加专业APA第7版引用格式:终极指南 【免费下载链接】APA-7th-Edition Microsoft Word XSD for generating APA 7th edition references 项目地址: https://gitcode.com/gh_mirrors/ap/APA-7th-Edition 学术写作中,引用格式的…...

2026年AI编程助手功能对比:主流工具横评

2026年AI编程助手功能对比:主流工具横评在2026年Q2的AI编程助手功能实测中,Trae以98%的代码生成准确率和全链路开发能力,成为功能覆盖最全面的国产工具。下面从核心功能、场景适配、价格等维度,横向对比6款主流AI编程助手&#xf…...

赛场制胜参考 CTF 全套 50 个经典解题思路

CTF选手必藏的50个实战解题思路!一篇够用! CTF竞赛的核心逻辑 • 核心目标:快速拆解问题(Flag导向)、工具链协作、模式化思维。• 关键原则:先广度后深度(优先收集信息)、分治策略&…...

大龄大专转行网安实录 8 条干货经验少走弯路

网络安全行业 “人才缺口 300 万 、平均年薪超 25 万” 的红利,让无数职场人动了转行心思。尤其是学历普通(如大专)的群体,既面临原有岗位的天花板,又渴望通过技术转型实现薪资跃迁。但网安行业看似门槛低,…...

2026年想在成都装中央空调?哪家安装质保好这里有答案!

家人们,2026年了,在成都想要装中央空调的小伙伴看过来!我作为一个在中央空调领域摸爬滚打多年的真实体验者,深知大家在选择空调时的纠结和痛点。就拿成都的气候来说,夏天闷热,空调得使劲儿制冷;…...

2026年TOP5运营多年口碑平稳的金价查询app有哪些

前几天跟闺蜜约饭,她一坐下来就疯狂吐槽:前一周特意蹲了网上说的金价合适的时段,攒了好久的钱想去买那条种草了半年的金项链,结果到了线下门店才知道,当天大盘价已经涨了21块钱,比她查的那个三天没更新的小…...

在 Node.js 后端服务中配置 Taotoken 作为大模型调用网关

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在 Node.js 后端服务中配置 Taotoken 作为大模型调用网关 将大模型能力集成到后端服务是现代应用开发的常见需求。通过 Taotoken 平…...

终极AMD Ryzen调试指南:5个核心功能彻底释放处理器性能

终极AMD Ryzen调试指南:5个核心功能彻底释放处理器性能 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://g…...

5月21日-23日微相携多款产品亮相2026世界无人机大会暨UASE无人机展以先进无人机侦测反制技术产品赋能城市低空安全防护

微相亮相2026世界无人机大会暨UASE无人机展...

微信红包背后的技术博弈:一个Android辅助服务的实战剖析

微信红包背后的技术博弈:一个Android辅助服务的实战剖析 【免费下载链接】WeChatLuckyMoney :money_with_wings: WeChats lucky money helper (微信抢红包插件) by Zhongyi Tong. An Android app that helps you snatch red packets in WeChat groups. 项目地址:…...

ncmdumpGUI:Windows平台免费NCM文件转换终极指南

ncmdumpGUI:Windows平台免费NCM文件转换终极指南 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 您是否在网易云音乐下载了喜爱的歌曲,…...

HS2-HF_Patch:终极Honey Select 2汉化与优化完整指南

HS2-HF_Patch:终极Honey Select 2汉化与优化完整指南 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch HS2-HF_Patch是专为Honey Select 2游戏设计的终…...

如何永久保存微信聊天记录?5分钟掌握免费开源工具WeChatMsg

如何永久保存微信聊天记录?5分钟掌握免费开源工具WeChatMsg 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/…...

从 2.5 亿到 30 亿!2026AI搜索行业爆发,API接口+优质资源双驱动,GEO媒介资源平台选型指南

2026年,生成式引擎优化(GEO)行业已迈入关键发展期,API接口规模化落地与优质资源竞争成为行业核心焦点。当前,AI搜索流量占比已突破52%,企业对GEO服务商的需求不再局限于简单的内容优化,而是升级…...

星火动漫 × 火山引擎:用Seedance重构创作链路加速释放AI漫剧生产力

20 天能做什么?在传统动漫制作的管线里,这点时间或许只够画完一套分镜稿。但就是在这短短 20 天内,一部名为《西游:五指山上贴瓷砖》的漫剧不仅完成了全流程制作,更一路杀出重围,连续多日霸榜。若按常规路径…...

2026年6月护腰带:专业制造商怎么选?

2026年6月,护腰带源头厂家推荐衡水凤宇医疗器械有限公司早上八点,刚坐上工位的李哥下意识地揉了揉后腰——又是一个硬板凳撑满八小时的日常。自从去年查出腰肌劳损,他试过理疗贴膏,试过网购几十块的护腰,结果要么闷汗起…...

告别“感觉能用”:基于 Ragas 构建 RAG 自动化回归测试流水线的方法论

很多团队把 RAG 系统做到能演示、能回答、能接知识库之后,心里都会出现一种熟悉又危险的判断:看起来差不多能用了。 但只要系统真的进入业务场景,这种“差不多”很快就会露出问题。今天回答还算靠谱,明天换一批文档就开始飘;演示集表现很好,真实用户一多就出现答非所问;…...

Taotoken API密钥的精细化权限管理与审计日志价值

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken API密钥的精细化权限管理与审计日志价值 在将大模型能力集成到实际业务的过程中,API密钥的管理往往从一个简单…...

函数递归调用原理

1. 什么是递归 2. 递归的举例 3. 递归与迭代1. 什么是递归递归就是一种解决方法&#xff0c;在C语言中&#xff0c;递归就是函数调用自己。下面是一个简单的递归C语言程序&#xff1a;#include <stdio .h>int main(){printf("hello world\n");main();//main函数…...

AI智能切片不是‘一键分割’就完事:批量口播视频的工程化切片陷阱与工具选型

Hook你是否试过把一小时口播音频丢进某款‘AI切片工具’&#xff0c;结果导出37条视频——其中12条开头卡在‘呃…’上&#xff0c;8条结尾截断在半句话里&#xff0c;还有5条字幕和画面完全不同步&#xff1f;更糟的是&#xff0c;换一批素材&#xff0c;模型表现又不稳定。这…...

AI 自动剪辑不是‘一键成片’:90% 的技术团队踩在逻辑断层与工程适配陷阱里

当团队首次将「AI 自动剪辑」纳入短视频生产管线时&#xff0c;最典型的误判是把它当作一个黑盒触发器&#xff1a;导入原始素材 → 点击「智能剪辑」→ 导出成品。这种认知忽略了背后三重断裂——语音转写与气口检测的精度断层、镜头语义理解与叙事逻辑的错位、以及单机操作与…...

ChatGPT高质量输出的隐藏开关:基于IEEE写作标准的11项自动校验清单(附可运行Python验证脚本)

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;ChatGPT高质量输出的底层逻辑与认知前提 ChatGPT生成高质量响应并非依赖“魔法”&#xff0c;而是建立在三个核心支柱之上&#xff1a;大规模语言建模的统计涌现能力、人类反馈强化学习&#xff08;RLHF&#…...

智能戒指制造商Oura秘密提交IPO申请,累计融资15亿美元,付费会员有望破500万

5月22日消息&#xff0c;据《华尔街日报》报道&#xff0c;智能戒指制造商Oura已秘密提交首次公开募股&#xff08;IPO&#xff09;申请。该产品获多位名人称赞&#xff0c;销量可观&#xff0c;此次IPO表现值得关注。产品功能与背景Oura智能戒指能追踪心率、皮肤温度等指标&am…...

Spring框架30道高频面试题(详细答案版)

本套面试题涵盖Spring核心基础、IoC容器、Bean生命周期、AOP、事务管理、依赖注入、Spring循环依赖、Spring配置、底层原理等高频核心考点&#xff0c;答案精简专业、适配面试作答&#xff0c;适合Java后端求职复习。一、Spring基础核心&#xff08;1-6题&#xff09;1. 什么是…...

NotebookLM时间线创建全解析,手把手教你用AI自动生成可交互知识图谱

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM时间线创建的核心价值与适用场景 NotebookLM 的时间线&#xff08;Timeline&#xff09;功能并非简单的时间戳罗列&#xff0c;而是将文档片段、引用来源与用户思考按真实发生顺序动态编织成…...

Java 高级特性高频面试题 30 道(含答案)【简洁版】

覆盖泛型、反射、注解、Lambda/Stream、函数式接口、动态代理、JDK8 新特性、线程池、JVM、IO/NIO、序列化等核心高频考点&#xff0c;适合中高级 Java 工程师面试。一、泛型&#xff08;3 题&#xff09;什么是 Java 泛型&#xff1f;泛型的作用是什么&#xff1f;答案&#…...