带辅助轨道扩展的 MP4 (MP4-AT) 文件格式 0.9

MP4-AT 文件格式支持在 ISOBMFF/MP4 结构中将有助于拍摄后编辑和合成的辅助轨道(例如深度图视频轨道)以及可播放的媒体数据一起存储。

此格式的目标是存储辅助轨道,以便将这些轨道隐藏起来,不向未实现此规范的客户端显示。这样可以防止客户端将辅助轨道解读为可播放的数据。

依赖项

以下是本规范所依据的规范性参考资料:

简介

本文档按照 RFC2119 中定义的 IETF 标准使用“必须”“不得”“必需”“应”“不应”“建议”“可以”和“可选”字样。

MP4-AT 文件格式

MP4-AT 文件格式由主要轨道和辅助轨道组成,可执行各种编辑操作。主轨道(例如,应用了虚化效果的视频轨道)会照常写入 MP4 文件中,而辅助轨道会写入辅助轨道 MP4 中。辅助轨道 MP4 是另一种符合 MP4 标准的容器,位于 axte(辅助轨道扩展)框中。建议将 axte 盒子作为文件中的最后一个盒子,这样便于通过截断文件来移除辅助数据。

此格式向后兼容:不支持此格式其余部分的播放器在加载文件时会读取并播放主要视频轨道。

线图:展示 MP4-AT 文件中元素的排列

该文件包含一个带有 mdta 处理程序的 moov.meta 框,其中包含以下元数据。元数据可按任意顺序显示。

元数据键

类型指示器

auxiliary.tracks.offset

78(大端 64 位无符号整数)

axte 框的文件偏移量(以字节为单位)

auxiliary.tracks.length

78(大端 64 位无符号整数)

axte 框的长度(以字节为单位)

辅助轨道扩展 (axte) 框

语法

axte 盒使用 ISO/IEC 14496-12:2022: 4.2 中定义的盒的语义进行描述

aligned(8) class AuxiliaryTracksExtensionBox extends Box('axte') {
  bit(8) data[];
}

其中,data 字段包含辅助轨道 MP4

负载

axte 框的载荷是辅助轨道 MP4辅助轨道 MP4 采用常规的 MP4 结构。

线图:演示辅助轨道 MP4 中元素的排列方式

辅助轨道 MP4 包含所有辅助轨道的选段元数据。所有辅助轨道选段载荷都必须存储在辅助轨道 MP4mdat 盒中,或外部 MP4 的 mdat 盒中(但不能同时存储在两个位置)。

在前一种情况下,auxiliary.tracks.interleaved 必须设置为 0(请参阅下文中的“静态元数据”),并且 axte.moov 框中的采样偏移量相对于辅助轨道 MP4 的开头。这使得辅助轨道 MP4 是自包含的,这意味着辅助轨道 MP4 可以独立读取,而无需引用外部 MP4。

在后一种情况下,auxiliary.tracks.interleaved 必须设置为 1(请参阅下文中的“静态元数据”),axte.moov 框中的采样偏移量相对于文件的开头,并且主要轨道和辅助轨道的采样载荷可以交错。在这种情况下,axte.mdat 框可以不存在。

静态元数据

辅助轨道 MP4 包含一个包含 mdta 处理程序的 moov.meta 框,其中包含以下元数据。元数据可按任意顺序显示。

元数据键

类型指示器

(可选)auxiliary.tracks.interleaved

75(8 位无符号整数)

0:表示采样点未交错,且位于 axte.mdat 框中

1:表示采样点交错地位于主视频轨道的 mdat 框中

所有其他值均已预订,不得使用。

如果没有此元数据,则默认值为 0。

auxiliary.tracks.map

0(预留)

二进制格式:

  • 1 字节版本 = 1
  • 1 字节曲目数 = n
  • n 个字节,表示以下集合中的轨道类型
    • 0 = 视频清晰
    • 1 = 深度视频(线性)
    • 2 = 深度视频(反向)
    • 3 = 时间深度元数据
    • 4 = 半透明视频
    • 5-127 = 预留以供日后使用
    • 128-255 = 自定义轨道类型

auxiliary.tracks.map 中轨道类型的顺序表示这些轨道在辅助轨道 MP4 载荷中的顺序。

辅助轨道类型

辅助轨道 MP4 可能包含以下对编辑有用的视频和元数据轨道。

锐化视频轨道

未应用可编辑特效的完整分辨率视频。视频轨道的存储分辨率可能与主视频轨道不同。清晰视频轨道可以使用任何常见的视频编解码器,并且可以是标准动态范围或高动态范围。

深度视频轨道

深度视频轨道提供编码为标准灰度视频的深度信息。这样做是为了允许在没有任何深度专用解码或编码支持的设备上解码和编码深度轨道。深度视频轨道可以使用 H.264/AVCH.265/HEVCVP9AV1 或任何其他常见的视频编解码器。深度视频轨道可以是 8 位或 10 位,并且采用线性或反向编码(请参阅动态深度 1.0 规范)。

时间戳深度元数据轨道

同步深度元数据轨道包含用于计算深度的归一化值,以及可用于计算散景效果的模糊半径的焦点表。

MIME 类型示例

application/x-depth-metadata

语法示例

二进制格式(所有整数均采用小端字节序):

  • 近距离(16 位浮点数)
  • 远距离(16 位浮点数)
  • 焦点表条目数(16 位整数)
  • 焦点表条目
    • 进入距离(16 位浮点数)
    • 条目半径(16 位浮点数)
半透明视频轨道

用于存储相应帧中每个像素的 Alpha 值(透明度)的视频轨道。最小值表示完全透明,而最大值表示完全不透明。介于两者之间的值表示线性刻度上的不同半透明度级别,而合成使用非预乘色值的正常混合模式。与深度视频轨道类似,此轨道也应编码为标准灰度视频。

用例示例

  • 在主要轨道中存储可播放的渲染的虚化视频,辅助视频轨道用于存储原始(模糊处理前)锐利的颜色数据和深度图,辅助同步元数据轨道包含反映每个帧焦点的深度元数据。然后,您可以在视频编辑器中使用辅助轨道来修改焦点正文并重新渲染高质量的虚化视频轨道。

  • 在主视频轨道中存储预渲染的半透明“贴纸”视频(例如,白色背景上的动画表情符号视频),辅助视频轨道包含 Alpha 映射。然后,合成器可以使用辅助轨道的半透明度信息将贴纸与背景混合。