Copyright © 2026 World Wide Web Consortium. W3C® liability, trademark and document use rules apply.
本节描述本文档在发布时的状态。 当前 W3C 出版物列表以及本技术报告的最新修订版可在 W3C 标准和草案 索引中找到。
本文档包含一个 注册表节 并定义 注册表, 如 [w3c-process] 中针对 w3c 注册表的要求所定义。 仅更改 注册表的文档更新,可以在不满足推荐标准轨道更新的其他要求的情况下进行, 如 更新注册表中所述; 更新这些注册表的要求在 H. 注册表节中以规范方式指定。
请参阅工作组的 实现报告。
为了使本规范退出 CR 阶段, 本规范定义但尚未出现在 [TTML2] 中的每项特性, 都需要在实现报告中记录至少 2 个独立实现。 工作组不要求实现必须公开可用,但鼓励其公开。
自 最初工作草案以来应用的实质性变更列表见 substantive-changes-summary.txt。
工作组已识别以下 有风险 特性:
对 #113 的可能解决方案。
对 #113 的可能解决方案。
对 #115 的可能解决方案。
对 #117 的可能解决方案。
对 #117 的可能解决方案。
对 #nested-div(原为 #scriptEventGrouping)和 #scriptEventMapping 功能的支持,合起来,在等待实现者反馈期间存在风险。
有风险功能可能会在推进到拟议推荐标准之前被移除。
本文档由 Timed Text 工作组作为 候选推荐草案发布,使用 推荐标准 轨道。
作为 候选推荐标准发布并不表示 W3C 及其成员的认可。候选推荐草案 集成了 工作组打算纳入 后续候选推荐标准快照中的、相对于上一份候选推荐标准的变更。
这是一份草案文档,可能随时被更新、替换或废弃。 除作为正在进行中的工作之外,不应引用本文档。 对此即将发布的推荐标准的未来更新可能会纳入 新功能。
本文档由一个在 W3C 专利 政策下运作的小组制作。 W3C 维护一份 与该小组交付成果相关的任何专利披露的公开列表; 该页面还包括 披露专利的说明。实际知悉某项专利且认为该专利包含 必要权利要求的个人, 必须按照 W3C 专利政策第 6 节披露该信息。
本文档受 2025 年 8 月 18 日 W3C 流程文档管辖。
本规范定义了 Timed Text Markup Language version 2.0 [TTML2] 的一种基于文本的配置文件,旨在支持全球范围内的配音和音频描述工作流, 满足 [DAPT-REQS] 中定义的要求,并允许使用 [TTML2] 及其配置文件中的可视呈现 功能,例如 [ttml-imsc1.3] 中的那些功能。
本节为非规范性内容。
在一般用法中,script 一词的含义之一是 电影、电视节目、戏剧等的书面文本。 脚本既可以是已完成作品的记录, 也称为转录文本, 也可以是尚待创作作品的计划。 在本文档中,我们使用领域专用术语,并更具体地定义如下:
术语 DAPT 脚本泛指 转录文本和 脚本, 并且是符合本规范形式要求的合规点。 DAPT 脚本由定时文本和关联元数据组成, 例如正在说话的角色。
在配音工作流中,会生成 转录文本并将其翻译,以创建脚本。 在音频描述工作流中,转录文本描述视频图像, 然后被直接用作录制音频等效内容的脚本。
DAPT 是一种基于 TTML 的格式,用于在本地化和音频描述 流程中的创作、提词和播放工具之间交换转录文本和脚本 (即 DAPT 脚本)。 DAPT 文档是 DAPT 脚本的一种可序列化形式,设计用于承载 与配音或音频描述相关的信息, 例如 DAPT 脚本的类型、对白、 描述、定时、元数据、原始语言转录文本、翻译文本、语言信息和音频混音指令, 并且可扩展,以允许用户定义注释或未来的附加特性。
本规范定义 DAPT 脚本的数据模型, 以及它作为 [TTML2] 文档的表示(见 4. DAPT 数据模型和 对应的 TTML 语法), 并带有一些约束和限制(见 5. 约束)。
DAPT 脚本预期用于使视听媒体对 无法以其原始形式理解该媒体的用户可访问或本地化, 并且用作满足涉及转录文本的用户需求的解决方案的一部分, 包括 [media-accessibility-reqs] 中描述的无障碍需求, 以及支持需要通过配音将对白翻译成不同语言的用户。
DAPT 脚本内容的每一部分都要求 通过 表示对象属性, 标记出它在相关媒体中表示什么;同样,DAPT 脚本作为一个整体, 要求列出它所表示的所有内容类型, 例如它是否表示音频内容或视觉内容, 如果是视觉内容,则表示文本还是非文本等。 本规范提供了一个分层内容描述符注册表。
配音和音频描述的创作工作流都涉及相似阶段, 这些阶段共享 [DAPT-REQS] 中描述的共同要求。 在这两种情况下,作者都会审阅内容,并写下正在发生的内容, 无论是对白还是视频图像中的内容, 以及它发生的时间。 后续转换过程可以将文本改为不同语言, 并调整措辞以适应精确的定时约束。 然后进入一个阶段,在该阶段生成脚本的音频呈现, 以最终混入节目音频。 该混音可以在分发之前进行, 也可以直接在播放器中进行。
配音过程,即创建配音脚本的过程, 是一个复杂的多步骤过程,涉及:
配音脚本是用于 录制翻译对白的转录文本或脚本 (取决于工作流阶段),这些对白将与节目的非对白音频混合, 以生成该节目另一种语言的本地化版本, 称为配音版本,简称配音。
配音脚本可作为 创建替代语言字幕或隐藏式字幕的起点。 本规范旨在促进在 TTML 的其他配置文件中添加字幕和说明字幕文档, 以及转换为这些文档,例如 [ttml-imsc1.3], 例如通过允许字幕样式语法携带在DAPT 文档中。 或者,可以应用样式,以在配音演员录制脚本对白时提供辅助。
创建音频描述内容也是一个多阶段过程。 音频描述, 也称为视频描述, 或在 [media-accessibility-reqs] 中称为描述型视频, 是一种音频服务, 用于帮助无法完整看见视觉呈现的观众理解内容。 它是将主节目音频与每个 描述的音频呈现混合后的结果, 这些描述被编写为在不与对白冲突的时间点出现, 以交付混合了音频描述的音轨。 主节目音频是指在任何进一步混合之前与节目相关联的音频。 描述是一组词语,用于描述节目呈现的某个方面, 适合通过发声和录制呈现为音频, 或用作文本到语音转换的文本替代源,如 [WCAG22] 中所定义。 关于音频描述是什么以及它如何 工作的更多信息,可见 [BBC-WHP051]。
编写音频描述脚本通常涉及:
音频混合可以在媒体分发之前发生, 也可以在客户端中发生。 如果音频描述脚本被交付给 播放器, 则文本可用于提供替代呈现, 例如在盲文显示器上, 或使用用户配置的屏幕阅读器。
DAPT 脚本在其他工作流和场景中也可能有用。 例如,原始语言转录文本可用作:
文档的顶层结构如下:
http://www.w3.org/ns/ttml 中的 <tt> 根元素
表明这是一个 TTML 文档,
而 ttp:contentProfiles
属性表明它遵循本规范定义的 DAPT 内容配置文件。
daptm:scriptRepresents 属性表明文档内容
在原始节目中替代什么。daptm:scriptType 属性表明转录文本或脚本的类型,
但在这个空示例中,它并不相关,因为这里只展示文档结构。daptm:langSrc 属性
表明默认文本语言来源,
例如内容的原始语言,
而 xml:lang 属性表明此脚本中的默认语言,
在本例中二者相同。
这两个属性都会被继承,并可在文档内容内被覆盖。
该结构适用于所有类型的 DAPT 脚本,无论是配音还是 音频描述。
<tt xmlns="http://www.w3.org/ns/ttml"
xmlns:ttp="http://www.w3.org/ns/ttml#parameter"
xmlns:daptm="http://www.w3.org/ns/ttml/profile/dapt#metadata"
ttp:contentProfiles="http://www.w3.org/ns/ttml/profile/dapt1.0/content"
xml:lang="en"
daptm:langSrc="en"
daptm:scriptRepresents="audio"
daptm:scriptType="originalTranscript">
<head>
<metadata>
<!-- Additional metadata may be placed here -->
<!-- Any characters must be defined here as a set of ttm:agent elements -->
</metadata>
<styling>
<!-- Styling is optional and consists of a set of style elements -->
</styling>
<layout>
<!-- Layout is optional and consists of a set of region elements -->
</layout>
</head>
<body>
<!-- Content goes here and consists of a div for each Script Event -->
<div xml:id="d1" begin="..." end="..." daptm:represents="audio.dialogue">
<p>
<!-- Text blocks are contained in p elements -->
</p>
<p xml:lang="fr" daptm:langSrc="en">
<!-- Translation text is related to the source language for the translation -->
</p>
</div>
</body>
</tt>
以下示例对应于 [DAPT-REQS] 中描述的工作流各阶段产生的定时文本 转录文本和脚本。
第一个示例展示了早期阶段的转录文本,
其中已经识别出用于描述或转录的定时机会,
但尚未写入任何文本;
这里存在于 <body> 元素上的 daptm:represents
属性会被 <div> 元素继承,因为
它们未指定不同的值:
...
<body daptm:represents="...">
<div xml:id="id1" begin="10s" end="13s">
</div>
<div xml:id="id2" begin="18s" end="20s">
</div>
</body>
...
以下示例将演示配音和音频描述工作流中的不同用法。
添加描述后,这会成为录制前脚本。
请注意,在这种情况下,为了反映大多数音频描述内容
转录的是没有固有语言的视频图像,
文本语言来源,由 属性表示,
在文档顶层设为 daptm:langSrczxx,
它是 [bcp47] 定义的语言代码,
用于标识不适用语言分类的内容:
<tt xmlns="http://www.w3.org/ns/ttml"
xmlns:ttp="http://www.w3.org/ns/ttml#parameter"
xmlns:daptm="http://www.w3.org/ns/ttml/profile/dapt#metadata"
xmlns:xml="http://www.w3.org/XML/1998/namespace"
ttp:contentProfiles="http://www.w3.org/ns/ttml/profile/dapt1.0/content"
xml:lang="en"
daptm:langSrc="zxx"
daptm:scriptRepresents="visual.nonText"
daptm:scriptType="preRecording">
<body>
<div begin="10s" end="13s" xml:id="a1" daptm:represents="visual.nonText">
<p>
A woman climbs into a small sailing boat.
</p>
</div>
<div begin="18s" end="20s" xml:id="a2" daptm:represents="visual.nonText">
<p>
The woman pulls the tiller and the boat turns.
</p>
</div>
</body>
</tt>
音频描述内容通常包括视觉图像中存在的文本, 例如图像中包含书面标牌、地点等。 以下示例演示了这种情况: 脚本表示对象被扩展, 以显示脚本内容除非文本视觉信息外, 还表示文本视觉信息。 这里在脚本事件上指定了更精确的 表示对象值, 以反映该文本实际上是一个地点, 这是允许的,因为该更精确的值是 脚本表示对象中新值的一个 子类型。 最后,由于该文本具有固有语言,文本语言 来源被设置为反映该语言。
<tt xmlns="http://www.w3.org/ns/ttml"
xmlns:ttp="http://www.w3.org/ns/ttml#parameter"
xmlns:daptm="http://www.w3.org/ns/ttml/profile/dapt#metadata"
xmlns:xml="http://www.w3.org/XML/1998/namespace"
ttp:contentProfiles="http://www.w3.org/ns/ttml/profile/dapt1.0/content"
xml:lang="en"
daptm:langSrc="zxx"
daptm:scriptRepresents="visual.nonText visual.text"
daptm:scriptType="preRecording">
<body>
<div begin="7s" end="8.5s" xml:id="at1"
daptm:represents="visual.text.location" daptm:langSrc="en">
<p>
The Lake District, England
</p>
</div>
<div begin="10s" end="13s" xml:id="a1"
daptm:represents="visual.nonText">
<p>
A woman climbs into a small sailing boat.
</p>
</div>
<div begin="18s" end="20s" xml:id="a2"
daptm:represents="visual.nonText">
<p>
The woman pulls the tiller and the boat turns.
</p>
</div>
</body>
</tt>
创建音频录制后,如果未使用文本到语音,
可以插入用于播放混音的指令。例如,可以在混入
从 <span> 元素内部播放的音频之前,更改“接收”音频的增益,
使其在进入时平滑地动画化该值,并在退出时恢复该值:
<tt ...
daptm:scriptRepresents="visual.nonText"
daptm:scriptType="asRecorded"
xml:lang="en"
daptm:langSrc="zxx">
...
<div begin="25s" end="28s" xml:id="a3" daptm:represents="visual.nonText">
<p>
<animate begin="0.0s" end="0.3s" tta:gain="1;0.39" fill="freeze"/>
<animate begin="2.7s" end="3s" tta:gain="0.39;1"/>
<span begin="0.3s" end="2.7s">
<audio src="clip3.wav"/>
The sails billow in the wind.</span>
</p>
</div>
...
在文档级别,daptm:scriptRepresents 属性表明
文档表示相关媒体中的视觉文本内容和视觉非文本内容。
可能实际上没有任何脚本事件表示视觉文本,
例如因为视频图像中没有文本。
在上面的示例中,<div> 元素的
begin 属性定义了其子元素的“syncbase”时间,
因此这里 <animate> 和 <span>
元素上的时间相对于 25s。
第一个 <animate> 元素在 0.3s 内将增益从 1
降到 0.39,并在结束后冻结该值,
第二个元素在该描述的
最后 0.3s 内将其升回。然后 <span> 元素被
定时为仅在第一次音频衰减完成后开始。
如果音频录制很长而只需要播放一个片段,
可以使用 clipBegin 和 clipEnd 来实现。
如果我们只想播放文件中从 5s 到
8s 的音频部分,它将如下所示:
...
<span><audio src="long_audio.wav" clipBegin="5s" clipEnd="8s"/>
A woman climbs into a small sailing boat.</span>
...
或者,可以添加音频属性以触发文本被朗读:
...
<div begin="18s" end="20s" xml:id="a2">
<p>
<span tta:speak="normal">
The woman pulls the tiller and the boat turns.</span>
</p>
</div>
...
也可以直接嵌入音频, 使单个文档同时包含脚本和 录制音频:
...
<div begin="25s" end="28s" xml:id="a3">
<p>
<animate begin="0.0s" end="0.3s" tta:gain="1;0.39" fill="freeze"/>
<animate begin="2.7s" end="3s" tta:gain="0.39;1"/>
<span begin="0.3s" end="2.7s">
<audio><source><data type="audio/wave">
[base64-encoded audio data]
</data></source></audio>
The sails billow in the wind.</span>
</p>
</div>
...
从示例 1的基本结构出发,
转录音频会产生一个原始语言配音转录文本,
其可能如下所示。
未定义特定样式或布局,这里重点在于对白的转录。
角色在 <metadata> 元素中标识。
请注意,语言和文本语言来源
分别使用
xml:lang 和 属性定义,
它们具有相同的值,
因为该转录文本未被翻译。
daptm:langSrc
<tt xmlns="http://www.w3.org/ns/ttml"
xmlns:ttm="http://www.w3.org/ns/ttml#metadata"
xmlns:ttp="http://www.w3.org/ns/ttml#parameter"
xmlns:daptm="http://www.w3.org/ns/ttml/profile/dapt#metadata"
ttp:contentProfiles="http://www.w3.org/ns/ttml/profile/dapt1.0/content"
xml:lang="fr"
daptm:langSrc="fr"
daptm:scriptRepresents="audio.dialogue"
daptm:scriptType="originalTranscript">
<head>
<metadata>
<ttm:agent type="character" xml:id="character_1">
<ttm:name type="alias">ASSANE</ttm:name>
</ttm:agent>
</metadata>
</head>
<body>
<div begin="10s" end="13s" xml:id="d1" daptm:represents="audio.dialogue">
<p ttm:agent="character_1">
<span>Et c'est grâce à ça qu'on va devenir riches.</span>
</p>
</div>
</body>
</tt>
翻译文本之后,文档会被修改。它包含译文文本,
在这种情况下原文被保留。主文档的默认
语言被更改,以表明重点在翻译后的语言。
xml:lang 和 属性的组合
用于将文本标记为原文或译文。
在这种情况下,它们同时出现在 daptm:langSrc<tt> 和 <p>
元素上,以使示例更易阅读,但在某些情况下也可以省略
它们,转而使用继承模型:
<tt xmlns="http://www.w3.org/ns/ttml"
xmlns:ttm="http://www.w3.org/ns/ttml#metadata"
xmlns:ttp="http://www.w3.org/ns/ttml#parameter"
xmlns:daptm="http://www.w3.org/ns/ttml/profile/dapt#metadata"
ttp:contentProfiles="http://www.w3.org/ns/ttml/profile/dapt1.0/content"
xml:lang="en"
daptm:langSrc="fr"
daptm:scriptRepresents="audio.dialogue"
daptm:scriptType="translatedTranscript">
<head>
<metadata>
<ttm:agent type="character" xml:id="character_1">
<ttm:name type="alias">ASSANE</ttm:name>
</ttm:agent>
</metadata>
</head>
<body>
<div begin="10s" end="13s" xml:id="d1" ttm:agent="character_1" daptm:represents="audio.dialogue">
<p xml:lang="fr" daptm:langSrc="fr"> <!-- original -->
<span>Et c'est grâce à ça qu'on va devenir riches.</span>
</p>
<p xml:lang="en" daptm:langSrc="fr"> <!-- translated -->
<span>And thanks to that, we're gonna get rich.</span>
</p>
</div>
</body>
</tt>
录制前的改编过程可以调整措辞并/或添加进一步的定时,
以协助录制。
daptm:scriptType 属性也会被修改,如以下示例所示:
<tt xmlns="http://www.w3.org/ns/ttml"
xmlns:ttm="http://www.w3.org/ns/ttml#metadata"
xmlns:ttp="http://www.w3.org/ns/ttml#parameter"
xmlns:daptm="http://www.w3.org/ns/ttml/profile/dapt#metadata"
ttp:contentProfiles="http://www.w3.org/ns/ttml/profile/dapt1.0/content"
xml:lang="en"
daptm:langSrc="fr"
daptm:scriptRepresents="audio.dialogue"
daptm:scriptType="preRecording">
<head>
<metadata>
<ttm:agent type="character" xml:id="character_1">
<ttm:name type="alias">ASSANE</ttm:name>
</ttm:agent>
</metadata>
</head>
<body>
<div begin="10s" end="13s" xml:id="d1" ttm:agent="character_1" daptm:onScreen="ON_OFF" daptm:represents="audio.dialogue">
<p xml:lang="fr" daptm:langSrc="fr">
<span>Et c'est grâce à ça qu'on va devenir riches.</span>
</p>
<p xml:lang="en" daptm:langSrc="fr">
<span begin="0s">And thanks to that,</span><span begin="1.5s"> we're gonna get rich.</span>
</p>
</div>
</body>
</tt>
本文档使用以下约定:
<someElement>。
该实体也会在正文中被描述为元素。
如果本规范中引用的元素名称
未用命名空间限定,则适用 TT 命名空间(见 命名空间)。
attributePrefix:attributeName,
不带前缀的属性样式为 attributeName。
该实体也会在正文中被描述为属性。daptm:foo 的新属性,它是一个具有两个可能值的字符串:
bar 和 baz。
daptm:foo
: "bar"
| "baz"
LocationPath 表示法。
例如,要引用
<tt> 元素的
<head> 子元素的第一个 <metadata> 子元素,
将使用以下路径:
/tt/head/metadata[0]。
注册表节中的内容与其他推荐标准轨道内容相比, 对更新有不同要求, 如 [w3c-process] 中所定义。
本节指定 DAPT 的数据模型及其对应的 TTML 语法。 在该模型中,存在一些对象,它们可以具有属性并与其他对象关联。 在 TTML 语法中,这些对象和属性被表示为元素和属性, 尽管并不总是对象表示为元素、属性表示为属性。
图 1 展示了 DAPT 数据模型,并将每个对象和属性 超链接到本文档中对应的章节。 共享属性以斜体显示。 图中的所有其他约定均遵循 [uml]。
另见 #115 - 如果我们要支持非内联的 嵌入式音频资源,是否应该为它们创建一个对象并将其添加到数据模型中?
DAPT 脚本是一个转录文本或脚本, 对应于在创作工作流中处理或由客户端处理的文档, 并符合本规范的约束。 它具有以下章节中定义的属性和对象: 脚本表示对象、脚本类型、默认语言、文本语言 来源、脚本事件, 以及对于配音脚本,还包括角色。
DAPT 文档是一个 [TTML2] 定时文本内容文档 实例,表示一个DAPT 脚本。 DAPT 文档具有 本节和以下各节中定义的结构和约束。
[TTML2] 定时文本内容文档
实例具有
一个位于 TT 命名空间中的根 <tt> 元素。
脚本 表示对象属性是 DAPT 脚本的强制属性, 它指示文档内容表示相关媒体对象的哪些组成部分。 文档内容可以作为一种机制的一部分使用, 为这些组成部分提供可访问的替代内容。
为表示此属性,daptm:scriptRepresents 属性
必须出现在 <tt> 元素上,
其值符合以下语法:
daptm:scriptRepresents
: <content-descriptor> ( <lwsp>+ <content-descriptor>)*
<lwsp> # as TTML2
默认 语言是 DAPT 脚本的强制属性, 它表示脚本事件的 文本内容的默认语言。 该语言可以是原始语言之一,或是翻译 语言。 当它表示翻译语言时,它可以是正在准备的配音或音频描述 脚本所面向的最终语言, 称为目标录制语言;也可以是工作流中使用的中间语言或枢轴 语言。
xml:lang 属性必须出现在
<tt> 元素上,且其值不得为空。
脚本类型属性是 DAPT 脚本的强制属性, 它描述配音和音频描述工作流中使用的文档类型, 包括以下类型: 原始语言转录文本、 翻译转录文本、 录制前脚本、 已录制脚本。
为表示此属性,daptm:scriptType 属性必须
出现在 <tt> 元素上:
daptm:scriptType
: "originalTranscript"
| "translatedTranscript"
| "preRecording"
| "asRecorded"
文档类型及对应的 daptm:scriptType
属性值定义如下:
当 daptm:scriptType 属性值为 originalTranscript 时,
文档是对白和/或屏幕文本以其固有口语/书面语言进行的文字转录,
或是非对白声音和非语言视觉内容的文字转录。
当 daptm:scriptType 属性值为 translatedTranscript 时,
文档表示原始语言转录文本被翻译成
通用语言后的结果。
当 daptm:scriptType 属性值为 preRecording 时,
文档表示为录制而改编原始语言转录文本或
翻译转录文本的结果,例如
为了在配音工作流中获得更好的唇形同步,
或确保在音频描述工作流中,词语能够适配可用时间。
当 daptm:scriptType 属性值为 asRecorded 时,
文档表示实际音频录制。
以下示例是孤立的——是否移至本节顶部、列举脚本类型之前?
<tt daptm:scriptType="originalTranscript">
...
</tt>
DAPT 脚本可以包含零个或多个角色对象,每个对象描述一个 可被脚本事件引用的角色。
如果存在任何角色对象,则 DAPT 文档必须具有
一个作为 <tt> 元素子元素的 <head> 元素,
并且该 <head> 元素必须具有
至少一个 <metadata> 子元素。
本节主要与配音工作流相关。
节目中的角色可以使用一个角色对象来描述,该对象具有 以下属性:
/tt/head/metadata/ttm:agent 处的
<ttm:agent> 元素表示,并具有以下约束:
type 属性必须设为
character。
xml:id 属性必须出现在
<ttm:agent> 元素上,并设为角色标识符。
<ttm:agent> 元素必须包含一个
<ttm:name> 元素,其 type 属性设为
alias,其内容设为角色
名称。
如果该角色具有演员名称,
它必须包含一个 <ttm:actor> 子元素。
该子元素必须具有一个 agent 属性,
其值设为单独的
<ttm:agent> 元素的 xml:id 属性值,
该元素对应于演员名称,
也就是说,其 type 属性设为 person。
对一个附加 <ttm:agent> 元素的要求,
该元素对应于演员名称,
定义在以下项目列表中。
...
<metadata>
<ttm:agent type="character" xml:id="character_1">
<ttm:name type="alias">DESK CLERK</ttm:name>
</ttm:agent>
</metadata>
...
...
<metadata>
<ttm:agent type="person" xml:id="actor_A">
<ttm:name type="full">Matthias Schoenaerts</ttm:name>
</ttm:agent>
<ttm:agent type="character" xml:id="character_2">
<ttm:name type="alias">BOOKER</ttm:name>
<ttm:actor agent="actor_A"/>
</ttm:agent>
</metadata>
...
<ttm:agent> 元素应当包含在
<head> 元素中的第一个 <metadata> 元素中。
我们应定义自己的合规实现类型类别,以避免使用
通用的“呈现处理器”或“转换处理器”类别。我们可以链接到它们。
目前,我能想到以下类别:
脚本事件对象表示要说出的对白、屏幕文本或音频 描述,并具有以下属性:
没有文本对象的脚本事件可以作为创作初始阶段的一部分创建, 在某些工作流中,划定可能存在某些内容的时间间隔会很有帮助。 例如,可以创建一个具有定时 属性的空脚本事件, 以标识创建音频描述的机会。 另见 [DAPT-REQS] 流程 步骤 1。
脚本事件在 DAPT
文档中表示于路径
/tt/head/body//div,
并具有以下结构和约束:
基于 #216(评论)中的讨论,我认为 我们应该有一个显式信号来指示 div 何时表示脚本事件。
<body> 元素和
与脚本事件对应的
<div> 元素之间的路径中,
可以有任意数量的嵌套 <div> 元素祖先。
不为此类元素定义进一步语义。
<div> 元素对应于脚本事件,
并具有以下约束:
xml:id 属性必须存在,并包含
脚本事件标识符。
有关处理器如何处理没有 xml:id 属性、因此
不被视为脚本事件的
<div> 元素的详细信息,
见6.3
处理 <div> 和
<p> 元素。
begin、end 和 dur 属性分别表示
开始、结束以及持续时间,
它们属于脚本事件。
begin 和 end 属性应该
存在。
dur 属性可以存在。
有关时间属性的附加说明,见4.1.6.1 时间属性。
ttm:agent 属性可以存在;如果存在,
则必须包含对每个表示关联角色的
ttm:agent 属性的引用。
...
<div xml:id="event_1"
begin="9663f" end="9682f"
ttm:agent="character_4">
...
</div>
...
daptm:represents
属性可以存在,
表示表示属性。
...
<div xml:id="event_1"
begin="9663f" end="9682f"
daptm:represents="audio.dialogue">
...
</div>
...
daptm:represents
属性的计算值必须是有效的非空值。
<p> 元素。<metadata> 元素。
<div> 元素子元素。
文本对象包含 通常使用单一语言的文本内容。 该语言可以是原文语言或译文语言。
文本在符合 以下任一情况时被定义为原文:
文本在它是 另一种语言中原文文本对象的表示时,被定义为 译文。
文本可以通过 同时检查其语言及其文本语言来源, 根据文本语言来源中定义的语义, 被识别为原文或译文。
译文文本对象以及在适用情况下 原文文本对象的源语言, 使用文本语言来源属性来指示。
如果文本 对象或其一部分,相对于其父脚本事件,表示的是更具体或不同的内容, 则它可以具有不同的表示属性。
文本 对象及其每一个部分,必须具有有效的表示属性。 该属性本身的存在被视为可选, 因为如果文本对象省略了该 属性,则该属性从父脚本事件继承。
文本对象 可以被样式化。
在文本期间用于修改节目音频的零个或多个 混合指令对象可以存在。
文本对象
在DAPT 文档中由路径
/tt/head/body//div/p 上的
<p> 元素表示,并具有以下约束:
<p> 元素及其所有 <span> 后代
元素的字符内容表示,
在剪除 <metadata> 元素和外来元素之后,
在将 <br> 元素替换为换行符之后,
并在应用 [XML] 中定义的空白处理之后。
<p> 元素应该具有一个 daptm:langSrc 属性,
表示文本对象的文本语言
来源,
即指示文本是原文还是译文,
以及其来源是否具有固有语言。
daptm:langSrc 的计算值
不应该为空字符串或 und。
<p> 元素应该具有一个 xml:lang
属性,
对应于文本对象的语言。
<div xml:id="event_3"
begin="9663f" end="9682f"
ttm:agent="character_3">
<p xml:lang="pt-BR">Você vai ter.</p>
<p xml:lang="fr" daptm:langSrc="pt-BR">Bah, il arrive.</p>
</div>
在某些情况下,单段未翻译对白可以包含多种语言的文本。
与其将一个脚本事件拆分为多个脚本事件来处理这种情况,
一种语言的文本对象也可以包含一些
不同语言的词语。
这在DAPT 文档中通过
在内部 <span> 元素上设置 xml:lang 和
属性来表示。
daptm:langSrc
daptm:represents 属性可以存在于
<p> 元素或其任一后代 <span> 元素上,
表示表示属性。
<audio>
元素。<animate> 元素。
文本 语言来源属性是一种注释,用于指示 文本对象的源语言, 如果适用,或指示源内容没有固有语言:
und 或 zxx,
则文本
是原文。
文本语言来源是一个可继承属性。
文本语言来源属性在DAPT 文档中由一个 daptm:langSrc 属性表示,
具有以下语法、约束和语义:
daptm:langSrc
: <empty-string> | <language-identifier>
<empty-string>
: "" # default
<language-identifier> # well-formed BCP-47 language tag
<p> 和 <span> 元素。<tt>、
<body>、
<div>、
<p> 和
<span>。
daptm:langSrc 属性的继承模型如下:
属性的继承模型
旨在匹配
daptm:langSrcxml:lang 属性的继承模型 [XML]。
屏幕上 属性是一个注释,指示 与脚本事件主体相关的场景中位置, 例如正在说话的角色的位置:
如果省略,则默认值为 "ON"。
表示对象 属性指示 脚本事件或文本(或其一部分)表示 相关媒体对象 的哪个组成部分。
表示对象属性在 DAPT
文档中由
daptm:represents 属性表示,
其值必须是单个
<。
content-descriptor>
属性可以出现在
以下任一元素上:
daptm:represents<tt>、
<body>、
<div>、
<p> 和
<span>。
表示对象属性是可继承的。 如果某个元素上不存在该属性,则其计算值为 其父元素上表示对象属性的计算值; 或者,如果它没有父元素,则为空字符串。 如果某个元素上存在该属性,则其计算值为指定值。
脚本事件描述对象是 一个注释,提供对脚本事件内容某个方面的人类可读描述。 脚本事件描述本身可以使用 描述类型进行分类。
脚本事件描述对象在
DAPT 文档中由
<div> 元素级别的 <ttm:desc> 元素表示。
可以存在零个或多个 <ttm:desc> 元素。
脚本事件描述不应 为空。
<ttm:desc> 元素
可以使用 xml:lang 属性
指定其语言。
...
<body daptm:langSrc="zxx">
<div begin="10s" end="13s" xml:id="a1">
<ttm:desc>Scene 1</ttm:desc>
<p xml:lang="en">
<span>A woman climbs into a small sailing boat.</span>
</p>
<p xml:lang="fr" daptm:langSrc="en">
<span>Une femme monte à bord d'un petit bateau à voile.</span>
</p>
</div>
<div begin="18s" end="20s" xml:id="a2">
<ttm:desc>Scene 1</ttm:desc>
<p xml:lang="en">
<span>The woman pulls the tiller and the boat turns.</span>
</p>
<p xml:lang="fr" daptm:langSrc="en">
<span>La femme tire sur la barre et le bateau tourne.</span>
</p>
</div>
</body>
...
每个脚本事件描述都可以使用 一个或多个描述 类型进行注释, 以进一步分类脚本事件描述的目的。
每个描述类型在 DAPT
文档中由
<ttm:desc> 元素上的 daptm:descType 属性表示。
<ttm:desc> 元素可以具有零个或一个
daptm:descType 属性。
daptm:descType 属性定义如下。
daptm:descType : string
daptm:descType 的允许值要么是
以下注册表中列出的值,
要么可以是用户定义的值:
|
状态 | 描述 | 备注 |
|---|---|---|---|
pronunciationNote |
临时 | 关于如何发音内容的注释。 | |
scene |
临时 | 包含场景标识符 | |
plotSignificance |
临时 | 定义内容对情节重要程度的度量。 | 内容未定义,可以是低、中或高,也可以是数值尺度。 |
注册表条目在
版本控制系统中以 JSON 形式提供,位于
/registries/descType.json。
有效的用户定义值必须以 x- 开头。
...
<body>
<div begin="10s" end="13s" xml:id="a123">
<ttm:desc daptm:descType="pronunciationNote">[oːnʲ]</ttm:desc>
<p>Eóin looks around at the other assembly members.</p>
</div>
</body>
...
在同级的一组 <ttm:desc> 元素中,
对 daptm:descType 属性的唯一性没有约束,
但它可用作区分项,如以下示例所示。
...
<body daptm:langSrc="zxx">
<div begin="10s" end="13s" xml:id="a1">
<ttm:desc daptm:descType="scene">Scene 1</ttm:desc>
<ttm:desc daptm:descType="plotSignificance">High</ttm:desc>
<p xml:lang="en">
<span>A woman climbs into a small sailing boat.</span>
</p>
<p xml:lang="fr" daptm:langSrc="en">
<span>Une femme monte à bord d'un petit bateau à voile.</span>
</p>
</div>
<div begin="18s" end="20s" xml:id="a2">
<ttm:desc daptm:descType="scene">Scene 1</ttm:desc>
<ttm:desc daptm:descType="plotSignificance">Low</ttm:desc>
<p xml:lang="en">
<span>The woman pulls the tiller and the boat turns.</span>
</p>
<p xml:lang="fr" daptm:langSrc="en">
<span>La femme tire sur la barre et le bateau tourne.</span>
</p>
</div>
</body>
...
音频对象用于 指定文本的音频呈现。 音频呈现可以是已录制的音频资源, 作为音频录制对象, 或是通过文本转语音引擎合成文本呈现的指令, 即合成音频对象。 二者都是音频对象的类型。
支持音频的呈现处理器 在相关媒体对象的时间轴上,在指定时间播放或插入音频。
音频录制是引用音频 资源的音频对象。 它具有以下属性:
audio/basic;默认入点时间是音频资源的开头。
默认出点时间是音频资源的结尾。
如果音频资源的时间子段长于 音频录制时间间隔的持续时间, 则播放必须截断,在 音频录制的时间间隔结束时结束。
如果音频资源的时间子段短于 音频录制时间间隔的持续时间, 则音频资源播放一次。
当提供来源列表时, 呈现处理器必须对每个 音频录制播放不超过一个 来源。
实现可以使用类型,以及在存在时
任何相关的附加格式信息,
来决定播放哪个来源。
例如,给定两个来源,一个是 WAV 文件,另一个是 MP3,
只能播放这些格式之一的实现,
或配置为偏好其中之一的实现,
将选择可播放或偏好的版本。
音频录制在 DAPT 文档中由
一个<audio>
元素表示,该元素是与其适用的文本相对应的 <p> 或 <span> 元素的子元素。
以下约束适用于 <audio> 元素:
begin、end 和 dur 属性
分别表示开始、结束和持续时间
属性;clipBegin 和 clipEnd 属性
分别表示入点时间和出点时间属性,
如示例 5所示;src 属性,
以及一个 type 属性,分别表示二者;
如果存在多个来源, 则不能使用此机制。
<audio src="https://example.com/audio.wav" type="audio/wave"/>
<source>子元素,
该子元素带有一个
不是片段标识符的 src 属性
和一个 type 属性,分别表示二者;
<audio>
<source src="https://example.com/audio.wav" type="audio/wave"/>
<source src="https://example.com/audio.aac" type="audio/aac"/>
</audio>
不是片段标识符的 src 属性是一个引用
外部音频资源的 URL,即一个未嵌入在DAPT
脚本内的音频资源。
DAPT 中未指定对该资源是否可定位的验证。
这里是否需要两种机制?
目前不清楚在这种情况下,子 <source> 元素
承载了什么语义优势。
是否考虑将该子 <source> 元素的使用标记为“有风险”?
While working on the specification for adding audio recordings I reminded myself of the various ways in which an audio recording can be embedded and referenced, of which there are at least 5 in total. Requirement R15 of [DAPT](https://www.w3.org/TR/dapt-reqs/#requirements) is clear that both referenced and embedded options need to be available, but should we be syntactically restricting the options for each? Will raise as separate issues.
最初由 @nigelmegitt 发布于 #105 (评论)
TTML2 中存在以下两种用于引用 外部音频资源的选项:
<audio> 元素中的 src 属性。<audio src="https://example.com/audio_recording.wav" type="audio/wave"/>
<audio> 元素的 <source> 子元素。<audio>
<source src="https://example.com/audio_recording.wav" type="audio/wave"/>
</audio>
第二个选项还有一种额外可能性:在 type 不足以表达时指定 format 属性。它还允许
多个<source> 子元素,并且我们规定
在这种情况下实现必须选择不超过一个。
[2023-03-29 编辑,以反映问题提出后增加的“播放不超过一个”约束]
#113 的可能解决方案。
#113 的可能解决方案。
src 属性,
该片段标识符引用
一个<audio> 元素,
其中被引用的元素是
/tt/head/resources 的子元素,
并指定一个 type 属性
和用于引用它的 xml:id 属性;
如果存在多个来源, 则不能使用此机制。
<tt>
<head>
<resources>
<audio type="audio/wave" xml:id="audio1">
<source><data>[base64-encoded WAV audio resource]</data></source>
</audio>
</resources>
</head>
<body>
..
<audio src="#audio1"/>
..
</body>
</tt>
<source>子元素,
该子元素带有一个
作为片段标识符的 src 属性,
该片段标识符引用
一个<data> 元素,
其中被引用的元素是
/tt/head/resources 的子元素,
并指定一个 type 属性
和用于引用它的 xml:id 属性;
<tt>
<head>
<resources>
<data type="audio/wave" xml:id="audio1wav">
[base64-encoded WAV audio resource]
</data>
<data type="audio/mpeg" xml:id="audio1mp3">
[base64-encoded MP3 audio resource]
</data>
</resources>
</head>
<body>
..
<audio>
<source src="#audio1wav"/>
<source src="#audio1mp3"/>
</audio>
..
</body>
</tt>
<source>子元素,
它带有一个
<data> 子元素,
该子元素指定一个 type 属性并包含音频录制数据。
<audio>
<source>
<data type="audio/wave">
[base64-encoded WAV audio resource]
</data>
</source>
</audio>
在上述每种情况下,type 属性表示类型属性。
作为片段标识符的 src 属性是一个指针,
指向嵌入在DAPT
脚本内的音频资源。
如果定义了 <data> 元素,则每个元素必须
包含
#PCDATA 或
<chunk> 子元素,
并且不得包含任何 <source> 子
元素。
<data> 和 <source> 元素可以包含
format 属性,
在选择适当的音频资源时,实现可以将其值与
type 属性值
一起使用。
这里是否需要全部 3 种机制?
是否需要其中任何一种?
嵌入音频数据可能存在用例,
因为它使单个文档成为可移植的(尽管很大的)
实体,可以进行交换和传输,而不必担心资源缺失,
也不需要例如清单文件。
如果我们不需要支持引用式嵌入音频,则只需要最后一个选项,
并且它可能是实现起来最简单的。
引用式嵌入音频的一种理由是,它更容易允许在
不同文档位置重用相同音频,尽管在此用例中这似乎是不太可能的
需求。另一种理由是,这意味着所有嵌入音频都位于
文档中易于定位的部分 tt/head/resources 中,这
可能会带来实现方面的好处?
是否考虑将嵌入式数据特性标记为“有风险”?
While working on the specification for adding audio recordings I reminded myself of the various ways in which an audio recording can be embedded and referenced, of which there are at least 5 in total. Requirement R15 of [DAPT](https://www.w3.org/TR/dapt-reqs/#requirements) is clear that both referenced and embedded options need to be available, but should we be syntactically restricting the options for each? Will raise as separate issues.
最初由 @nigelmegitt 发布于 #105 (评论)
给定一些嵌入式音频资源:
<head>
<resources>
<audio xml:id="audioRecording1" type="audio/wave">
<source>
<data>[base64 encoded audio data]</data>
</source>
</audio>
<data xml:id="audioRecording2" type="audio/wave">
[base64 encoded audio data]
</data>
</resources>
</head>
TTML2 中存在以下两种用于引用 嵌入式音频资源的选项:
<audio> 元素中的 src 属性,引用嵌入的 <audio> 或 <data>:<audio src="#audioRecording1"/>
...
<audio src="#audioRecording2"/>
<audio> 元素的 <source> 子元素。<audio>
<source src="#audioRecording1"/>
</audio>
第二个选项还有一种额外可能性:在 type 不足以表达时指定 format 属性。它还允许
多个<source> 子元素,不过如果指定多个资源,
其预期语义尚不清楚——大概是实现以某种方式选择其中一个。
While working on the specification for adding audio recordings I reminded myself of the various ways in which an audio recording can be embedded and referenced, of which there are at least 5 in total. Requirement R15 of [DAPT](https://www.w3.org/TR/dapt-reqs/#requirements) is clear that both referenced and embedded options need to be available, but should we be syntactically restricting the options for each? Will raise as separate issues.
最初由 @nigelmegitt 发布于 #105 (评论)
如果我们要支持嵌入式音频资源,它们可以定义在
/tt/head/resources 中然后被引用,或者
数据可以以内联方式包含。
这两个选项都需要吗?
嵌入式示例:
<head>
<resources>
<audio xml:id="audioRecording1" type="audio/wave">
<source>
<data>[base64 encoded audio data]</data>
</source>
</audio>
<data xml:id="audioRecording2" type="audio/wave">
[base64 encoded audio data]
</data>
</resources>
</head>
然后可使用类似以下内容在正文内容中引用它(另见 #114):
<audio src="#audioRecording2"/>
内联示例:
<audio type="audio/wave">
<source type="audio/wave">
<data>[base64 encoded audio data]</data>
</source>
</audio>
对 #115 的可能解决方案。
另见 #115 - 如果我们要支持 非内联的嵌入式音频资源,是否应该为它们创建一个对象并将其添加到 数据模型中?
在 TTML2 的 <data> 元素中,可以指定一个 encoding,它可以是
以下之一:
我们是否需要要求处理器支持所有这些编码,还是默认的
base64 就足够?
此外,还可以指定一个 length
属性,它为错误检查提供了一定可行性,因为解码后的数据必须
具有指定的字节长度。要求支持此属性是否总体有益?它会被使用吗?
对 #117 的可能解决方案。
对 #117 的可能解决方案。
xml:lang 属性的计算值必须与
父元素以及任何子 <source> 元素
和任何被引用的嵌入式 <data> 元素的 xml:lang 属性的计算值
相同。合成 音频是一个音频对象,它表示 父文本内容的机器生成音频呈现。 它具有以下属性:
normal、
fast 或
slow;
合成音频在 DAPT 文档中通过
在表示要说出的文本对象的元素上应用
tta:speak
样式属性来表示,
其中该属性的计算值为
normal、fast 或 slow。
该属性也表示速率属性。
如果某个元素的 tta:rate 属性计算值为 none,
则该元素上的 tta:pitch 属性
没有效果。
该元素不被视为具有关联的合成
音频。
混音指令对象是对与包含对象相关的音频进行的静态或动画调整。 它具有以下属性:
freeze)还是还原(remove)。混音指令通过将音频样式
属性应用到与相关对象对应的元素来表示,可以是内联方式、
通过引用 <style> 元素,或在子(内联)
<animate> 元素中:
如果混音指令是动画的,也就是说,
如果调整属性在包含对象的活动时间间隔期间发生变化,
则它由一个或多个子<animate>元素表示。
如果需要多个增益或声像属性,
或者需要任何定时属性,则需要这种表示。
<animate>
元素必须是
与包含对象对应的元素的子元素,
并具有以下约束:
begin、end 和 dur 属性
分别表示开始、结束和持续时间属性;fill 属性表示填充属性;tta:gain
属性表示增益属性,
并使用animation-value-list
语法来表达动画期间要应用的值列表;tta:pan
属性表示声像属性,
并使用animation-value-list
语法来表达动画期间要应用的值列表。另见E. 音频混音。
DAPT 文档必须序列化为一个格式良好的 XML 1.0 [xml] 文档, 并按 [UNICODE] 中规定使用 UTF-8 字符编码进行编码。
所得的 [xml] 文档不得包含以下任何物理结构:
DAPT 文档也可以 用作处理的内存中模型, 在这种情况下,序列化要求不适用。
本节中的要求旨在促进向前和向后兼容性, 具体允许:
符合 规范多个版本的DAPT 文档可以指定对多个 DAPT 内容配置文件的符合性。
无法识别的词汇是指 不与处理器所支持的特性关联的元素和属性集合。
转换处理器必须剪除
既不是属性、也不是
<metadata> 元素后代的无法识别的词汇。
转换处理器应当保留
是属性或
<metadata> 元素后代的无法识别的词汇。
另见5.6.2
ttp:contentProfiles,它禁止发出对
转换处理器不支持的配置文件的
配置文件符合性信号。
之所以将上述约束指定为在属性值计算之后, 是因为实现可能识别并支持仅出现在特定元素上的属性, 例如那些与 DAPT 数据模型对应的属性。 如6.4 使用计算属性值中所述, 处理器实现 在这些属性出现在其他元素上时,不忽略它们非常重要。
外来 词汇是无法识别的词汇的子集, 它由 命名空间不是5.3 命名空间中列出的命名空间之一的元素和属性, 以及其命名空间没有值且未在 DAPT 或 [TTML2] 中另行定义的属性组成。
DAPT 文档可以包含
既未被ttp:contentProfiles 中发出信号的配置文件
明确允许、也未被禁止的外来词汇。
许多配音和音频描述工作流允许使用专有元数据
注释脚本事件或文档。
可以包含本规范或 [TTML2] 中定义的元数据词汇。
也可以包含外来词汇,
可以作为 <metadata> 元素的属性,
或作为 <metadata> 元素的后代元素。
可以使用外来命名空间添加工作流特定的信息。
在以下示例中,使用来自“示例供应商”的虚构命名空间 vendorm
来提供 DAPT 未定义的文档级信息。
...
<metadata xmlns:vendorm="http://www.example-vendor.com/ns/ttml#metadata">
<vendorm:programType>Episode</vendorm:programType>
<vendorm:episodeSeason>5</vendorm:episodeSeason>
<vendorm:episodeNumber>8</vendorm:episodeNumber>
<vendorm:internalId>15734</vendorm:internalId>
<vendorm:information>Some proprietary information</vendorm:information>
</metadata>
...
<metadata> 元素中。
此类数据可能会被 修改文档内容但保留元数据、同时不了解其语义的转换处理器置为无效。
本节是非规范性的。
如果外来词汇包含在
<metadata> 元素以外的位置,
则不支持与该词汇关联的特性的转换处理器将按
5.2.1
无法识别的词汇中的要求
将其剪除。
提供了一种机制,用于防止这种剪除,并为此类外来词汇定义语义,
允许其位于 <metadata> 元素之外而不被剪除,
并指示内容和处理器符合性:
ttp:contentProfiles发出文档符合该配置文件的信号这允许支持该特性的处理器以任何适当方式处理该词汇, 以避免剪除它, 并允许不支持该特性的处理器采取 适当操作,例如警告用户某些功能可能会丢失。
本规范中使用以下命名空间(见 [xml-names]):
| 名称 | 前缀 | 值 | 定义规范 |
|---|---|---|---|
| XML | xml |
http://www.w3.org/XML/1998/namespace |
[xml-names] |
| TT | tt |
http://www.w3.org/ns/ttml |
[TTML2] |
| TT 参数 | ttp |
http://www.w3.org/ns/ttml#parameter |
[TTML2] |
| TT 音频样式 | tta |
http://www.w3.org/ns/ttml#audio |
[TTML2] |
| TT 元数据 | ttm |
http://www.w3.org/ns/ttml#metadata |
[TTML2] |
| TT 特性 | 无 | http://www.w3.org/ns/ttml/feature/ |
[TTML2] |
| DAPT 元数据 | daptm |
http://www.w3.org/ns/ttml/profile/dapt#metadata |
本规范 |
| DAPT 扩展 | 无 | http://www.w3.org/ns/ttml/profile/dapt/extension/ |
本规范 |
| EBU-TT 元数据 | ebuttm |
urn:ebu:tt:metadata |
[EBU-TT-3390] |
上面定义的命名空间前缀值是为方便而提供,DAPT 文档可以使用任何符合 [xml-names] 的前缀值。
本规范定义的命名空间是可变的,如 [namespaceState] 中所述; 这些命名空间中的所有未定义名称都保留给 W3C 将来标准化。
如果DAPT 文档旨在 用作生成 [ttml-imsc1.3] 文档的基础, 则 [ttml-imsc1.3] 的同步规定适用于 与视频相关的情况。
DAPT 文档中的定时内容旨在 从特定音频采样开始和结束来呈现。
在本规范的上下文中,呈现可以是文本的视觉呈现, 例如向演员显示要说出的词语,也可以是音频资源的可听播放, 或者可以是物理或触觉呈现,例如盲文显示器。
在受限应用中,例如实时音频混合和播放, 如果在呈现输出中无法实现与音频采样的精确同步, 则在呈现的定时变化中,创作和播放不准确性的综合影响应该满足 [EBU-R37] 的同步要求, 即音频变化不得早于图像变化 超过 40ms,也不得晚于图像变化超过 60ms。
同样,创作应用程序应该允许作者满足 [EBU-R37] 的要求, 通过以一定精度定义时间, 使音频变化晚于视频图像中任何相关变化的时间少于 15ms, 并早于视频图像中任何相关变化的时间少于 5ms。
综合来看,上述关于整体呈现以及 关于旨在用于实时播放的DAPT 文档的两个约束意味着, 内容处理器应该 完成音频呈现变化的时间 不早于DAPT 文档中指定时间 超过 35ms, 且不晚于指定时间超过 45ms。
此配置文件与以下配置文件指示符关联:
| 配置文件名称 | 配置文件类型 | 配置文件指示符 |
|---|---|---|
| DAPT 1.0 内容 配置文件 | 内容配置文件 | http://www.w3.org/ns/ttml/profile/dapt1.0/content |
| DAPT 1.0 处理器配置文件 | 处理器配置文件 | http://www.w3.org/ns/ttml/profile/dapt1.0/processor |
ttp:contentProfiles
属性
用于声明文档所符合的 [TTML2] 配置文件。
DAPT 文档必须在 <tt> 元素上指定
属性,
其中至少包括一个等于5.6.1 配置文件
指示符中指定的
内容配置文件指示符的值。
可以存在其他值,用于声明符合
[TTML2] 的其他配置文件,
并且可以包括专有命名空间中的配置文件指示符。
ttp:contentProfiles
如果DAPT 文档发出 符合某个其并不符合的 内容配置文件的信号, 则这是错误。
转换处理器不得在
属性中包含与其(处理器)不支持的配置文件关联的值;
按定义,它们无法验证内容对这些配置文件的符合性。
ttp:contentProfiles
ttp:profile 属性
是 [TTML1] 中用于声明
文档实例处理要求的一种机制。
它实际上已在 [TTML2] 中由
取代。
ttp:processorProfiles
DAPT 文档不得在 <tt> 元素上指定
ttp:profile 属性。
ttp:processorProfiles
属性
用于声明文档实例的处理要求。
DAPT 文档可以在 <tt> 元素上指定
属性。
如果存在,则
ttp:processorProfiles
属性必须至少包括一个值,该值等于
5.6.1 配置文件
指示符中指定的
处理器配置文件指示符。
可以存在其他值,用于声明附加处理约束,
并且可以包括专有命名空间中的配置文件指示符。
ttp:processorProfiles
属性可用于发出信号,表明需要支持附加配置文件中的特性和扩展,
才能成功处理文档实例。
例如,本地工作流可能引入特定的元数据要求,
并通过使用附加处理器配置文件指示符来发出处理器需要支持这些要求的信号。ttp:processorProfiles
如果内容作者不需要发出信号表明处理
DAPT 文档
需要超出 DAPT 定义之外的
附加处理器要求,
则
属性预期不会存在。
ttp:processorProfiles
[TTML2] 指定了一种 可用于定义文档实例可使用的、或处理器需要支持的 特性集合的词汇和语义, 这称为配置文件。
除非另有规定,DAPT 不要求处理器支持此配置文件词汇; 但仍允许这种支持。
此配置文件词汇的大部分用于指示处理器如何计算 为成功处理文档实例而需要支持的特性集合。 该词汇本身是根据 TTML2 特性定义的。 这些与配置文件相关的特性在F. 配置文件中列为可选。 处理器可以实现它们, 并且其关联词汇 可以出现在DAPT 文档中。
除非已经安排(使用带外协议)处理器支持这些特性和词汇, 否则不预期出现该词汇。
DAPT 中不要求(但允许)处理器支持的 附加配置文件相关词汇包括:
在 DAPT 脚本中,以下 约束适用于时间属性和时间表达式:
唯一允许的 ttp:timeBase 属性值是 media,
因为F. 配置文件禁止
除#timeBase-media 之外的所有
timeBase 特性。
这意味着文档时间轴的开头, 即时间“零”, 是相关媒体对象的开头。
timeContainer 属性唯一允许的值是默认值
par。
文档应当在所有元素上省略 timeContainer 属性。
文档不得在任何元素上将 timeContainer 属性设置为
par 以外的任何值。
这意味着每个定时元素的 begin 属性值
相对于其父元素的计算开始时间,
或者对于 <body> 元素,相对于时间零。
如果文档包含任何使用 f 度量的时间表达式,
或任何包含帧组成部分的时间表达式,
则 ttp:frameRate 属性必须出现在
<tt> 元素上。
如果文档包含任何使用 t 度量的时间表达式,
则 ttp:tickRate 属性必须出现在
<tt> 元素上。
文档中的所有时间表达式应当使用相同语法,
即 [TTML2] 中定义的
clock-time 或 offset-time,
并应用DAPT
约束。
DAPT
clock-time 具有以下形式之一:
hh:mm:ss.ssshh:mm:ss
其中
hh 为小时,
mm 为分钟,
ss 为秒,且
ss.sss 为带秒的小数部分的秒(任意精度)。
使用帧组成部分的时钟时间表达式 看起来类似“时间码”, 但由于在其他地方观察到使用它们时会造成语义混淆, 尤其是在非整数帧率、“丢帧模式”和子帧率下, 因此被禁止。
offset-time 具有以下形式之一:
nn metricnn.nn metric
其中
nn 是整数,
nn.nn 是带小数部分的数字(任意精度),且
metric 是以下之一:
h 表示小时,m 表示分钟,s 表示秒,ms 表示毫秒,f 表示帧,以及t 表示滴答。当将媒体时间表达式 M 映射到视频的帧 F 时, 例如用于精确定时唇同步, 内容处理器应当将 M 映射到呈现时间 最接近但不小于 M 的帧 F。
媒体时间表达式 00:00:05.1 对应于帧率为
1000 / 1001 × 30 ≈ 29.97 的视频的第
ceiling( 5.1 × ( 1000 / 1001 × 30) ) = 153
帧。
本规范不对 [ttml-imsc1.3] 中定义的布局和呈现特性施加额外约束。
<head>
元素中没有使用 <layout> 元素),也可以通过使用
region 属性显式指定,以引用位于
/tt/head/layout/region 的 <region> 元素。
可以使用样式引用或内联样式,使用
style 属性、
<style> 元素以及
[TTML2] 或 [ttml-imsc1.3] 中定义的内联样式属性的任意组合。
以下元数据元素在 DAPT 中是允许的,并且在 [TTML2]
中被指定为包含
#PCDATA,
即仅包含文本数据而没有元素内容。
在此类元素内的字符内容中需要双向文本时,
可以使用 Unicode 控制字符在任意文本范围内定义基方向。
<ttm:copyright><ttm:desc><ttm:item><ttm:name><ttm:title>关于此机制用法的更多指导可见于HTML 中的内联标记和 双向文本。
<p> 和 <span> 内容元素允许使用
tts:direction 和 tts:unicodeBidi 属性指定文本方向。
文档作者应使用这种更健壮的机制,而不是使用 Unicode 控制字符。
4. DAPT 数据模型及相应的 TTML 语法定义了 DAPT 数据模型的对象和属性如何在 [TTML2] 中表示,即在DAPT 文档中表示。 然而,一个 DAPT 数据模型实例可以 由多个 [TTML2] 文档实例表示。
例如,4. DAPT 数据模型及相应的
TTML 语法并未强制要求表示
脚本事件的
<div> 元素必须是 <body> 元素的直接子元素。
该 <div> 元素可以嵌套在另一个 <div> 元素中。
因此,可以将DAPT 脚本的对象和属性序列化为各种DAPT 文档。
本节定义如何从一个DAPT 文档中可互操作且无歧义地重建一个
DAPT 模型实例。
DAPT 出于可扩展性原因, 没有定义 DAPT 数据模型的完整序列化, 以便在需要时允许未来版本这样做。 此外,DAPT 文档可以包含 未在 DAPT 对象或属性的表示中提及的元素或属性。 这可能是因为它由符合 DAPT 未来某个版本的处理器生成, 或是通过通用 [TTML2] 流程生成, 或者因为它使用了可选特性,例如添加样式或布局。 本节定义如何处理这些元素或属性。
也可以使用通用 [TTML2] 处理器处理DAPT 文档, 这些处理器不一定会将文档映射到 DAPT 数据模型。 例如,通用 TTML2 呈现处理器可以基于 DAPT 文档渲染音频混音, 而不需要对脚本事件本身建模。 在这种情况下,可以忽略本节。
本节是非规范性的。
与本节相关的规范性规定定义于 [TTML2] 中。
由于 DAPT 要求
DAPT 文档在根元素上包含
ttp:contentProfiles 属性,
并且该属性包含一个 DAPT 内容配置文件指示符,
如5.6.2
ttp:contentProfiles中所规定,
因此任何未包含此类属性、
或未包含此类配置文件指示符的 TTML 文档,
都可以被视为不是DAPT 文档;
因此,需要严格遵循 DAPT 的处理器可以停止处理
这样的文档。
如果处理器以一个DAPT 文档作为输入, 该文档包含与其确实支持的特性相关的词汇, 但该文档声称符合的内容配置文件排除了对这些特性的支持, 则在该文档的上下文中,处理器不应实现 这些特性。
[TTML2] 允许
<div> 元素包含任意组合的
<div> 元素和 <p> 元素。
DAPT 数据模型描述了
每个脚本事件如何由
一个包含零个或多个 <p> 元素的 <div> 元素表示。
它还允许在 <body> 元素和这些脚本事件
<div> 元素之间的路径中存在其他中间 <div> 元素。
此外,也允许使用不对应于 DAPT 数据模型中属性的属性。
这会产生如下可能性:
<div> 元素包含不是文本对象的子项,
例如其他 <div> 元素或 <metadata> 元素;<div> 元素不具有脚本事件所需的属性,例如 xml:id;<div> 元素具有不存在于 DAPT 数据模型的脚本事件中的属性,
例如 xml:space;<p> 元素的父 <div> 元素看起来不是
一个脚本事件。以下处理规则解决这些情况。
用于识别脚本事件的规则:
没有 <div> 元素子项、
并包含脚本事件所有
非元数据强制属性的 TTML 表示的 <div> 元素,
必须映射到脚本事件,
例如具有表示脚本事件标识符的有效 xml:id,
即使它还包含额外的无法识别的词汇;
<div> 元素子项的 <div> 元素
不得映射到脚本事件;
处理器反而必须遍历这些 <div>
元素子项
(递归地,以深度优先遍历),并考虑其中每个子项是否满足脚本事件的要求;
<div> 元素不得映射
到脚本事件。用于识别文本对象的规则:
DAPT 的未来版本 可能包含以不同方式使用这些 结构可能性的特性, 因而定义与这里定义的规则 相互排斥的其他处理规则。
某些属性具有用于计算其值的语义,该语义取决于
其他某个元素上该属性的计算值。
例如,如果某个元素上未指定 xml:lang 属性,则其计算
值为该元素父元素上同一属性的计算值。
| 属性 | DAPT 数据模型实体 | 可以指定于 | 对子元素或后代元素的影响 |
|---|---|---|---|
xml:lang |
默认语言、语言 | 任意元素 | 继承,如 [XML] 中定义 |
xml:id |
唯一标识符 | 任意元素 | 无 |
begin |
开始 | <body>、
<div>、
<p>、
<span>、
<audio>、
<animate>
|
为其子元素上的定时属性设置纪元,如 [TTML2] 中定义 |
end |
结束 | <body>、
<div>、
<p>、
<span>、
<audio>、
<animate>
|
约束其后代的计算结束时间,如 [TTML2] 中定义 |
dur |
持续时间 | <body>、
<div>、
<p>、
<span>、
<audio>、
<animate>
|
约束其后代的计算结束时间,如 [TTML2] 中定义 |
daptm:langSrc |
文本语言来源 | <tt>、
<body>、
<div>、
<p>、
<span>
|
继承,如本节中定义 |
daptm:represents |
表示对象 | <tt>、
<body>、
<div>、
<p>、
<span>
|
继承,如本节中定义 |
、
daptm:scriptRepresents 和
daptm:onScreen 属性
仅在指定于特定元素上时才有定义。
daptm:descType
或者,再举一个例子,DAPT 文档中某个元素的计算时间
相对于该元素父元素的开始时间。
如果 <div> 元素指定了 begin 属性,
则其子 <div> 元素的计算时间
相对于该父 <div> 元素的开始时间,
并沿层级依次类推。
即使处理目标是 DAPT 数据模型的
一个实例,且这些“中间”<div> 元素在其中没有直接等价物,
也必须在计算中包含这些元素的时间;
否则脚本事件的开始和结束时间将会错误。
更一般地考虑这种情况, 在 DAPT 文档中,可能存在一些 TTML 元素, 它们不直接对应于 DAPT 数据模型中的对象, 并且这些元素可以指定一些属性, 这些属性会影响适用于那些确实对应于 DAPT 数据模型对象的元素的属性值计算。
在这种情形中,由 [TTML2] 定义的语义,或者对于
本文定义的词汇,由本规范定义的语义,具有优先权。
实现必须基于文档实例的内容计算属性值,然后
再将这些计算值应用于 DAPT 数据模型对象。
例如,支持 TTML2 样式特性的处理器需要
实现 TTML2 关于继承和计算相对值的语义,
例如 tts:fontSize 等属性的语义。
如果实现内部创建 DAPT 数据模型对象, 例如上例所示的脚本事件, 为实现互操作性,重要的是它们使用计算值。
本节是非规范性的。
按照5.2.1
无法识别的词汇,
鼓励 DAPT 处理器的实现者
在DAPT 文档的
<metadata> 元素内保留无法识别的词汇。
在实践中,一个既输入 DAPT 文档
又输出 DAPT 文档的实现
可能会修改输入
文档结构和内容,并在此过程中
实际上从输出文档中剪除了那些具有无法识别的词汇的实体。
与本节相关的规范性规定定义于 [TTML2] 中。
[TTML2] 定义了验证处理器, 这是一类实现,其目的是 评估文档实例并决定其是否有效。 通常,这会在处理工作流中使用, 用于检查文档是否可被后续使用所接受。 真实世界的示例很可能不会仅返回“好”或“坏”, 而还会输出信息性、警告和错误消息, 描述输入文档中异常、意外或有问题的内容。
在为DAPT 文档实现验证处理器时, 可以应用严格的 [TTML2] 验证 处理规则。 这样做涉及检查配置文件中定义的必需或可选特性所关联的 语法和内容是否存在且语义有效, 以及检查是否不存在与被禁止特性关联的语法。
[TTML2] 用于 处理无法识别命名空间中的词汇的机制是 在验证之前剪除它。 可以使用这种方法;此外,对于 已被剪除的那些属性和元素, 实现将其作为信息报告也是合理的。
此处的术语“词汇”指 XML 元素和属性。
当在剪除之后遇到已识别命名空间中的不支持或已弃用 词汇时, 或者当受支持词汇包含意外但并非无效的内容时, 可以发出验证警告, 但在这些情形中不预期出现错误。
当存在被禁止的词汇, 或者在允许的词汇中遇到语义无效的内容时, 预期会出现验证错误。
除标记为非规范性的章节外,本规范中的所有创作指南、图表、示例和注都是非规范性的。 本规范中的其他所有内容都是规范性的。
本文档中的关键词 MAY、MUST、MUST NOT、SHOULD 和 SHOULD NOT 在且仅在它们全部以大写形式出现时, 应按 BCP 14 [RFC2119] [RFC8174] 中描述的方式解释, 如这里所示。
[TTML2] 在 配置子系统中指定了一种用于表达文档和处理器要求的形式语言。 本规范的规范性要求使用上述符合性术语定义, 并且也使用此 TTML2 配置文件机制定义。 凡引用 TTML2 词汇时,适用 [TTML2] 中定义的与该词汇相关的语法和语义要求。
虽然并不要求 DAPT 处理器一般性地实现 TTML2 配置文件处理语义, 但实现者可以使用F. 配置文件中定义的 TTML2 配置文件, 作为验证其实现满足 DAPT 规范性要求的一种手段, 例如作为检查清单。
反之,支持 TTML2 配置文件处理语义的通用 [TTML2] 处理器,可以直接使用 F. 配置文件中定义的 TTML2 配置文件, 来确定其是否能够处理DAPT 文档。
符合的DAPT 文档是 符合本规范规范性规定的 [TTML2] 定时文本内容文档 实例。 这些规定使用 [TTML2] 的 配置文件词汇,在 F. 配置文件中定义的 内容配置文件中表达。
符合的 DAPT 处理器是 符合本规范规范性规定的 [TTML2] 内容处理器。 这些规定使用 [TTML2] 的 配置文件词汇,在 F. 配置文件中定义的 处理器配置文件中表达。
content-descriptor
§4.1.6.2
本节是非规范性的。
除以下内容外,[ttml2] 的隐私考虑事项适用:
<audio> 元素相关的考虑事项。
condition 属性。
DAPT 文档通常包含 相关媒体中出现的角色或人物的名称, 这些人物可以是虚构的,也可以是真实的。 一般而言,此信息会存在于媒体本身中,或通过其他途径公开。 如果其身份包含于其中的 DAPT 文档被可访问这些文档的人知晓 会带来敏感性, 则应通过适当的保密措施管理此类访问。 例如,这些文档可以在封闭的创作环境中可用, 并在分发给更广泛受众之前进行编辑以移除敏感信息。 如果出现这种情形,应在封闭环境中应用良好的信息安全实践, 例如对“静态”文档以及移动过程中的文档进行加密、 通过认证平台控制访问等。
DAPT 文档可以为同一段音频引用一组
替代的外部音频资源,
其中预期处理器会基于格式支持等特性选择其中一个替代项。
如果使用这种模式,处理器对音频资源的选择
若暴露给源,
就可能泄露有关该处理器的信息,例如其偏好的音频格式。
本节是非规范性的。
[ttml2] 的安全考虑事项适用, 因为 DAPT 是 [ttml2] 的配置文件; 每个符合要求的 DAPT 文档都是 TTML 文档实例。
尽管有 [ttml2] 中与 XML 相关的考虑事项,
但强制性的
扩展特性要求
DAPT 文档
避免声明或引用文档类型声明,并避免使用
[xml] 实体扩展机制。
因此,实现可以通过在解析 DAPT
文档时不支持这些 XML 特性,
防范与这些特性相关的潜在拒绝服务攻击或外部内容注入。
#serialization
DAPT 文档允许引用 外部音频资源, 也称为“子资源”。 与此类引用相关的一个潜在威胁是, 源可能返回与创作时预期不同的音频资源。 目前未提供用于验证此类子资源完整性的方案。 如果内容提供者无法确保提供适当的音频资源, 例如链条中的某些部分不受其控制, 可以考虑添加子资源完整性元数据, 例如包含预期子资源哈希值的属性, 并实现客户端检查,使用该元数据验证接收到的子资源 是否为预期资源。
本节是非规范性的。
本节包含有关音频混音的附加信息, 面向实现者。
可以使用 [webaudio] 实现混音指令的应用。 图 2展示了节目音频的流向, 以及当生成音频的元素处于活动状态时, 脚本事件上的声像和增益(如果已设置) 如何被应用, 然后输出被传递给文本, 该文本混入来自任何活动音频录制的音频, 而该音频录制本身也受其自身混音指令约束, 随后在输出被混合到主总线之前, 应用该文本的混音指令。
上述示例至少在两个方面进行了简化:
如果音频录制以可听声音开始或结束, 即入点时间处的第一个采样或 出点 时间处的最后一个采样非零, 则音频换能器可能会在播放开始或结束时 被诱发产生不希望的“爆音”噪声。
存在多种可避免这种爆音效应的潜在策略, 例如:
如果使用上述最后一种方法, 并且没有其他外部控制可以控制 呈现处理器在这方面的行为, 则建议 音频录制在开始或结束处也不要包含 一旦被渲染为不可听就会改变含义的采样。 例如,省略像单词 “cat” 开头的 “c” 这样的爆破性 语音声音,会导致该词听起来像 “at”。
本节通过针对一组特性 和扩展表达处置, 定义一个 [TTML2] 内容配置文件 和一个处理器配置文件。 DAPT 扩展定义于G. 扩展。
[TTML2] 中指定的配置文件语义适用。
TTML 配置文件规范是一个文档, 它列出在“文档实例”(文件)和“处理器”(处理这些文件的事物)中 必需 / 可选 / 禁止的所有 TTML 特性, 以及任何扩展或约束。
符合本文所定义内容配置文件的 定时文本内容文档 实例:
根据定义,定时文本内容文档 实例满足 [TTML2] 第 3.1 节的要求, 因而符合本文所定义配置文件的定时文本内容文档 实例也是符合要求的 TTML2 文档实例。
本规范中使用的必需、允许、可选和禁止处置
按如下方式映射到 [TTML2] <ttp:feature>
和 <ttp:extension> 元素的
value 属性值:
| DAPT 处置 | 或
元素 value 属性值,位于
|
|
|---|---|---|
| 内容配置文件 | 处理器配置文件 | |
| 必需 | required | required |
| 允许 | optional | required |
| 可选 | optional | optional |
| 禁止 | prohibited | optional |
本文档中使用术语呈现处理器 和转换处理器, 并不意味着本身符合 [TTML2] 中定义的任何标准配置文件。 换句话说, 呈现处理器或转换处理器 符合本文档中定义的配置文件, 但并不同时符合 TTML2 呈现配置文件或 TTML2 转换配置文件, 不被认为是错误。
本文档未指定呈现处理器或转换处理器 在处理或转换不符合要求的定时文本内容文档 实例时的行为。
允许和禁止处置并不是指将
或 <ttp:feature> 元素
指定为在 <ttp:extension><ttp:profile> 元素内允许或禁止。
本节列出的特性和扩展表达了对DAPT 文档、 呈现处理器 和转换处理器的最低要求。 DAPT 文档可以另外符合其他配置文件, 并包含未被 DAPT 内容配置文件禁止的语法。 呈现处理器和转换处理器 可以支持与其他配置文件相关的附加语法和语义。
例如,DAPT 脚本可以包含 [TTML2] 的 IMSC([ttml-imsc1.3])文本配置文件所允许的语法, 以增强向录制音频的演员呈现 脚本的效果, 或添加对后续创建字幕或说明字幕很重要的样式。
编辑任务:逐一检查此特性列表,并检查每一项的处置情况。 不应存在 IMSC 中允许但在此被禁止的特性。
DAPT 内容配置文件使用 [TTML2] 的配置文件机制, 表达DAPT 脚本的符合性要求。 支持 DAPT 处理器配置文件的验证处理器 可以使用它来验证DAPT 文档。
不要求在DAPT 文档中包含 DAPT 内容配置文件。
<?xml version="1.0" encoding="utf-8"?>
<!-- This file is the TTML Profile Document representing
the DAPT 1.0 Content Profile defined
by DAPT at https://www.w3.org/TR/dapt/ -->
<profile xmlns="http://www.w3.org/ns/ttml#parameter"
designator="http://www.w3.org/ns/ttml/profile/dapt1.0/content"
combine="mostRestrictive"
type="content">
<features xml:base="http://www.w3.org/ns/ttml/feature/">
<!-- required (mandatory) feature support -->
<feature value="required">#structure</feature>
<feature value="required">#timeBase-media</feature>
<!-- optional (voluntary) feature support -->
<feature value="optional">#animate-fill</feature>
<feature value="optional">#animate-minimal</feature>
<feature value="optional">#audio</feature>
<feature value="optional">#audio-description</feature>
<feature value="optional">#audio-speech</feature>
<feature value="optional">#bidi</feature>
<feature value="optional" extends="#bidi">#bidi-version-2</feature>
<feature value="optional">#chunk</feature>
<feature value="optional">#content</feature>
<feature value="optional">#contentProfiles</feature>
<feature value="optional">#contentProfiles-combined</feature>
<feature value="optional">#core</feature>
<feature value="optional">#data</feature>
<feature value="optional">#direction</feature>
<feature value="optional">#embedded-audio</feature>
<feature value="optional">#embedded-data</feature>
<feature value="optional">#frameRate</feature>
<feature value="optional">#frameRateMultiplier</feature>
<feature value="optional">#gain</feature>
<feature value="optional">#metadata</feature>
<feature value="optional">#metadata-item</feature>
<feature value="optional">#nested-div</feature>
<feature value="optional" extends="#metadata">#metadata-version-2</feature>
<feature value="optional">#pan</feature>
<feature value="optional">#permitFeatureNarrowing</feature>
<feature value="optional">#permitFeatureWidening</feature>
<feature value="optional">#pitch</feature>
<feature value="optional">#presentation-audio</feature>
<feature value="optional">#processorProfiles</feature>
<feature value="optional">#processorProfiles-combined</feature>
<feature value="optional">#resources</feature>
<feature value="optional" extends="#animation">#set</feature>
<feature value="optional">#set-fill</feature>
<feature value="optional">#set-multiple-styles</feature>
<feature value="optional">#source</feature>
<feature value="optional">#speak</feature>
<feature value="optional">#speech</feature>
<feature value="optional">#styling</feature>
<feature value="optional">#styling-chained</feature>
<feature value="optional">#styling-inheritance-content</feature>
<feature value="optional">#styling-inline</feature>
<feature value="optional">#styling-referential</feature>
<feature value="optional">#tickRate</feature>
<feature value="optional">#time-clock</feature>
<feature value="optional">#time-offset</feature>
<feature value="optional">#time-offset-with-frames</feature>
<feature value="optional">#time-offset-with-ticks</feature>
<feature value="optional">#timing</feature>
<feature value="optional">#transformation</feature>
<feature value="optional">#unicodeBidi</feature>
<feature value="optional">#unicodeBidi-isolate</feature>
<feature value="optional" extends="#unicodeBidi">#unicodeBidi-version-2</feature>
<feature value="optional">#xlink</feature>
<!-- prohibited feature support -->
<feature value="prohibited">#animation-out-of-line</feature>
<feature value="prohibited">#clockMode</feature>
<feature value="prohibited">#clockMode-gps</feature>
<feature value="prohibited">#clockMode-local</feature>
<feature value="prohibited">#clockMode-utc</feature>
<feature value="prohibited">#dropMode</feature>
<feature value="prohibited">#dropMode-dropNTSC</feature>
<feature value="prohibited">#dropMode-dropPAL</feature>
<feature value="prohibited">#dropMode-nonDrop</feature>
<feature value="prohibited">#markerMode</feature>
<feature value="prohibited">#markerMode-continuous</feature>
<feature value="prohibited">#markerMode-discontinuous</feature>
<feature value="prohibited">#subFrameRate</feature>
<feature value="prohibited">#time-clock-with-frames</feature>
<feature value="prohibited">#time-wall-clock</feature>
<feature value="prohibited">#timeBase-clock</feature>
<feature value="prohibited">#timeBase-smpte</feature>
<feature value="prohibited">#timeContainer</feature>
</features>
<extensions xml:base="http://www.w3.org/ns/ttml/profile/dapt/extension/">
<!-- required (mandatory) extension support -->
<extension value="required">#contentProfiles-root</extension>
<extension value="required">#represents</extension>
<extension value="required">#scriptRepresents-root</extension>
<extension value="required">#scriptType-root</extension>
<extension value="required">#serialization</extension>
<extension value="required">#xmlLang-root</extension>
<!-- optional (voluntary) extension support -->
<extension value="optional">#agent</extension>
<extension value="optional">#daptOriginTimecode</extension>
<extension value="optional">#descType</extension>
<extension value="optional">#onScreen</extension>
<extension value="optional">#scriptEventMapping</extension>
<extension value="optional">#textLanguageSource</extension>
<!-- prohibited extension support -->
<extension value="prohibited">#profile-root</extension>
<extension value="prohibited">#source-data</extension>
<extension value="prohibited">#xmlLang-audio-nonMatching</extension>
</extensions>
</profile>
DAPT 处理器配置文件使用 [TTML2] 的配置文件机制, 表达DAPT 脚本的处理要求。 支持 DAPT 处理器配置文件的必需特性和扩展的处理器, 最低限度可以处理DAPT 文档内所有允许的特性。
不要求在DAPT 文档中包含 DAPT 处理器配置文件。
<?xml version="1.0" encoding="utf-8"?>
<!-- This file is the TTML Profile Document representing
the DAPT 1.0 Processor Profile defined
by DAPT at https://www.w3.org/TR/dapt/ -->
<profile xmlns="http://www.w3.org/ns/ttml#parameter"
designator="http://www.w3.org/ns/ttml/profile/dapt1.0/processor"
combine="mostRestrictive"
type="processor">
<features xml:base="http://www.w3.org/ns/ttml/feature/">
<!-- required (mandatory) feature support -->
<feature value="required">#animate-fill</feature>
<feature value="required">#animate-minimal</feature>
<feature value="required">#audio</feature>
<feature value="required">#audio-description</feature>
<feature value="required">#audio-speech</feature>
<feature value="required">#bidi</feature>
<feature value="required" extends="#bidi">#bidi-version-2</feature>
<feature value="required">#chunk</feature>
<feature value="required">#content</feature>
<feature value="required">#contentProfiles</feature>
<feature value="required">#core</feature>
<feature value="required">#data</feature>
<feature value="required">#direction</feature>
<feature value="required">#embedded-audio</feature>
<feature value="required">#embedded-data</feature>
<feature value="required">#frameRate</feature>
<feature value="required">#frameRateMultiplier</feature>
<feature value="required">#gain</feature>
<feature value="required">#metadata</feature>
<feature value="required">#metadata-item</feature>
<feature value="required">#nested-div</feature>
<feature value="required" extends="#metadata">#metadata-version-2</feature>
<feature value="required">#pan</feature>
<feature value="required">#pitch</feature>
<feature value="required">#presentation-audio</feature>
<feature value="required">#resources</feature>
<feature value="required" extends="#animation">#set</feature>
<feature value="required">#set-fill</feature>
<feature value="required">#set-multiple-styles</feature>
<feature value="required">#source</feature>
<feature value="required">#speak</feature>
<feature value="required">#speech</feature>
<feature value="required">#structure</feature>
<feature value="required">#styling</feature>
<feature value="required">#styling-chained</feature>
<feature value="required">#styling-inheritance-content</feature>
<feature value="required">#styling-inline</feature>
<feature value="required">#styling-referential</feature>
<feature value="required">#tickRate</feature>
<feature value="required">#time-clock</feature>
<feature value="required">#time-offset</feature>
<feature value="required">#time-offset-with-frames</feature>
<feature value="required">#time-offset-with-ticks</feature>
<feature value="required">#timeBase-media</feature>
<feature value="required">#timing</feature>
<feature value="required">#transformation</feature>
<feature value="required">#unicodeBidi</feature>
<feature value="required">#unicodeBidi-isolate</feature>
<feature value="required" extends="#unicodeBidi">#unicodeBidi-version-2</feature>
<feature value="required">#xlink</feature>
<!-- optional (voluntary) feature support -->
<feature value="optional">#animation-out-of-line</feature>
<feature value="optional">#clockMode</feature>
<feature value="optional">#clockMode-gps</feature>
<feature value="optional">#clockMode-local</feature>
<feature value="optional">#clockMode-utc</feature>
<feature value="optional">#contentProfiles-combined</feature>
<feature value="optional">#dropMode</feature>
<feature value="optional">#dropMode-dropNTSC</feature>
<feature value="optional">#dropMode-dropPAL</feature>
<feature value="optional">#dropMode-nonDrop</feature>
<feature value="optional">#markerMode</feature>
<feature value="optional">#markerMode-continuous</feature>
<feature value="optional">#markerMode-discontinuous</feature>
<feature value="optional">#permitFeatureNarrowing</feature>
<feature value="optional">#permitFeatureWidening</feature>
<feature value="optional">#processorProfiles</feature>
<feature value="optional">#processorProfiles-combined</feature>
<feature value="optional">#subFrameRate</feature>
<feature value="optional">#time-clock-with-frames</feature>
<feature value="optional">#time-wall-clock</feature>
<feature value="optional">#timeBase-clock</feature>
<feature value="optional">#timeBase-smpte</feature>
<feature value="optional">#timeContainer</feature>
</features>
<extensions xml:base="http://www.w3.org/ns/ttml/profile/dapt/extension/">
<!-- required (mandatory) extension support -->
<extension value="required">#agent</extension>
<extension value="required">#contentProfiles-root</extension>
<extension value="required">#daptOriginTimecode</extension>
<extension value="required">#descType</extension>
<extension value="required">#onScreen</extension>
<extension value="required">#represents</extension>
<extension value="required">#scriptRepresents-root</extension>
<extension value="required">#scriptType-root</extension>
<extension value="required">#serialization</extension>
<extension value="required">#textLanguageSource</extension>
<extension value="required">#xmlLang-root</extension>
<!-- optional (voluntary) extension support -->
<extension value="optional">#profile-root</extension>
<extension value="optional">#scriptEventMapping</extension>
<extension value="optional">#source-data</extension>
<extension value="optional">#xmlLang-audio-nonMatching</extension>
</extensions>
</profile>
以下各节定义扩展标识, 表达为相对于 DAPT 扩展命名空间基 URI 的相对 URI(片段标识符)。 这些扩展标识用于F. 配置文件 中,以描述 DAPT 中未由 [TTML2] 配置文件特性表达的规范性规定。
如果转换处理器能够识别并转换
<ttm:agent> 元素上以下
元素和属性的值,
则它支持 #agent 扩展:
xml:id 属性<ttm:name> 元素并且如果它能够识别并转换以下每种值组合:
type="person" 的 <ttm:agent> 元素
以及具有 type="full" 的子 <ttm:name> 元素;type="character" 的 <ttm:agent> 元素
以及具有 type="alias" 的子 <ttm:name> 元素;没有为 #agent 扩展定义任何呈现处理器行为。
如果转换处理器能够识别并转换
<tt> 元素上的
属性的值,则它支持
ttp:contentProfiles#contentProfiles-root 扩展。
如果呈现处理器实现了
<tt> 元素上的
属性的呈现语义支持,
则它支持 ttp:contentProfiles#contentProfiles-root 扩展。
#contentProfiles-root 扩展是
特性的语法和语义子集。
#contentProfiles
如果转换处理器能够识别并转换
<daptm:daptOriginTimecode>
元素的值,
则它支持 #daptOriginTimecode 扩展。
没有为 #daptOriginTimecode 扩展定义任何呈现处理器行为。
如果转换处理器能够识别并转换
<ttm:desc> 元素上的
属性
的值,
则它支持 daptm:descType#descType 扩展。
没有为 #descType 扩展定义任何呈现处理器行为。
如果转换处理器能够识别并转换
<div> 元素上的
属性的值,
则它支持 daptm:onScreen#onScreen 扩展。
没有为 #onScreen 扩展定义任何呈现处理器行为。
如果转换处理器能够识别并转换
<tt> 元素上的
属性的值,
则它支持 ttp:profile#profile-root 扩展。
如果呈现处理器实现了
<tt> 元素上的
属性的
呈现语义支持,
则它支持 ttp:profile#profile-root 扩展。
#profile-root 扩展是
特性的语法和语义子集。
#profile
如果转换处理器能够识别并转换
属性的值,
则它支持 daptm:represents#represents 扩展。
没有为 #represents 扩展定义任何呈现处理器行为。
如果转换处理器在将DAPT 文档映射到
DAPT 数据模型的内部表示时,
实现了6.3 处理
<div> 和
<p> 元素中指定的处理要求,
则它支持 #scriptEventMapping 扩展。
没有为 #scriptEventMapping 扩展定义任何呈现处理器行为。
如果转换处理器能够识别并转换
<tt> 元素上的
属性的值,
则它支持 daptm:scriptRepresents#scriptRepresents-root 扩展。
没有为 #scriptRepresents-root 扩展定义任何呈现处理器行为。
没有为 #scriptRepresents-root 扩展定义任何呈现处理器行为。
如果转换处理器能够识别并转换
<tt> 元素上的
属性的值,
则它支持 daptm:scriptType#scriptType-root 扩展。
没有为 #scriptType-root 扩展定义任何呈现处理器行为。
相对于
#serialization
扩展有效的序列化文档,
是一个使用 [UNICODE] 中指定的
UTF-8 字符编码进行编码的
XML 1.0 [xml] 文档,
其中不包含字节顺序标记(BOM)、
不包含文档类型声明、
不包含实体
声明,并且
除预定义实体之外,
不包含任何实体
引用。
如果转换处理器或呈现处理器
能够读取如上定义的序列化文档,
则它支持 #serialization 扩展。
如果写入文档的转换处理器
能够写入如上定义的序列化文档,
则它支持 #serialization 扩展。
如果转换处理器能够识别并转换
作为
<data> 元素子元素的
<source> 元素的值,
则它支持 #source-data 扩展。
如果呈现处理器实现了
作为
<data> 元素子元素的
<source> 元素的
呈现语义支持,
则它支持 #source-data 扩展。
如果转换处理器能够识别并转换
属性的值,
则它支持 daptm:langSrc#textLanguageSource 扩展。
没有为 #textLanguageSource 扩展定义任何呈现处理器行为。
如果转换处理器能够识别并转换
<audio> 元素上的 xml:lang 属性值,
该值不同于其父元素或任何后代元素或引用的
<source> 或 <data> 元素上同一属性的计算值,
这种值称为不匹配值,
则它支持 #xmlLang-audio-nonMatching 扩展。
如果呈现处理器实现了此类不匹配
xml:lang 属性值的呈现语义支持,
则它支持 #xmlLang-audio-nonMatching 扩展。
如果转换处理器能够识别并转换
<tt> 元素上的
xml:lang 属性值
以及4.1.2 默认语言中指定的附加语义,
则它支持 #xmlLang-root 扩展。
如果呈现处理器实现了
<tt> 元素上的
xml:lang 属性
以及4.1.2 默认语言中指定的附加语义的呈现语义支持,
则它支持 #xmlLang-root 扩展。
本节指定注册表定义,它由 本文档中定义的注册表表的托管、变更流程和 核心要求组成。
此 W3C 注册表的托管者是 定时文本工作组(TTWG)。 如果 TTWG 无法履行托管者角色, 例如它已关闭, 则替代托管者是 W3C 团队。
对此 W3C 注册表的变更必须使用以下任一选项提出请求(即变更请求):
变更请求必须包含 足够信息,使托管者 能够识别以下全部内容:
provisional 注册表条目,如有;变更提议者可以在版本控制系统上 开启一个包含拟议变更的拉取请求(或等价请求)。 如果开启了拉取请求,则也必须开启对应的 issue, 并且该拉取请求必须链接到该 issue。
如果托管者是 W3C 团队, 则团队在根据收到的回复评估 受访者之间是否存在共识之前, 必须就该变更请求征求广泛审查, 并提供至少 4 周的审查期。
团队可以要求在版本控制系统上开启一个拉取请求, 作为审查基础。
如果存在此类共识, 团队必须作出拟议变更。
本节定义对本文档中定义的注册表表的约束。 每个注册表表由一组 注册表条目组成。 每个注册表表都有一个关联的注册表表定义,位于H.2 注册表表定义中, 其中列出了每个注册表条目中存在的字段。
每个注册表条目都有一个状态、一个唯一的键,并且 在适当情况下还有其他字段,例如任何备注、 描述,或对其他 定义实体的引用。
注册表条目状态字段反映该条目的 成熟度。 允许的值为:
Provisional
Final
Deprecated
不允许其他值。
注册表条目如果状态为 Provisional,则可以被变更或删除。
其状态可以变更为 或
Final。
Deprecated
后来被删除的 条目中的注册表条目键
可以被重用。
Provisional
新创建的注册表条目应当具有状态 。Provisional
注册表条目如果状态为 Final,则不得被删除或变更。
其状态可以变更为 。Deprecated
注册表条目如果状态为 Deprecated,则不得被删除或变更。
其状态可以变更为 ,
除非这会导致状态为 Final 或 Provisional
的条目集合内出现重复键。
Final
之前为 Provisional 且从未为
的 Final 条目中的注册表条目键
可以被重用。
Deprecated
之前为 的
Final 条目中的注册表条目键不得被重用。
Deprecated
新创建的注册表条目不得具有状态 。Deprecated
daptm:descType 的注册表表
定义了一组可在 daptm:descType 属性中使用的值。
键是
“daptm:descType”字段。
“description”字段描述每个值的预期用途。
此注册表表的注册表条目位于4.8 脚本事件 描述中。
<content-descriptor> 的注册表表
定义了一组可在 daptm:represents 属性中使用的值。
键是
“<content-descriptor>”字段。
“Description”字段描述每个值所表示的媒体内容类型。
“Example usage”字段描述通常可找到所描述内容类型的脚本类型。
本节是非规范性的。
本规范旨在与 [ttml-imsc1.3] 以及 [ttml2] 的其他配置文件兼容。 具体而言,通过选择本规范中定义的特性和 扩展的一个子集, 可以创建一个符合 [ttml-imsc1.3], 并且也是DAPT 文档的文档。
一个DAPT 文档也可以是 IMSC 文本配置文件 文档,方法是同时满足二者的符合性要求。
DAPT #serialization 特性
实际上是
IMSC 文档编码
约束的超集,因此符合要求的DAPT 文档满足 IMSC 的
编码约束。
IMSC 文本配置文件和 DAPT 都允许
其他配置文件定义的词汇
(例如元数据)出现在文档实例中,
因此 IMSC 中定义的词汇可以用于
DAPT 文档中,尽管并非旨在
同时处理两个配置文件的处理器可能会剪除出现在 metadata 元素之外的
无法识别的词汇。
IMSC 对 #resources 施加约束, 禁止在文档实例中嵌入音频。 因此,使用此特性的DAPT 文档 不能成为符合要求的 IMSC 文本配置文件文档。
同时符合本规范和 [ttml-imsc1.3]
的文档通过在 ttp:contentProfiles 属性中
同时包含DAPT 1.0
内容配置文件
和
IMSC 文本配置文件的指示符,
以及该文档符合的任何其他配置文件的指示符,
来标示其对二者的符合性。
以 DAPT 转录阶段 以及可选翻译阶段开始的字幕和说明字幕创作工作流, 可以使用 DAPT 元数据来指导 IMSC 文本配置文件文档的制作或呈现。 例如:
编辑感谢定时文本工作组的现任和前任成员、 其他 W3C 工作组的成员、 音频描述社区组的成员, 以及其他论坛中直接或间接为本文档的流程或内容作出贡献的行业专家。
编辑特别感谢以下成员的贡献: Glenn Adams,Skynav; Pierre-Anthony Lemieux,MovieLabs; Hewson Maxwell,Ericsson; Chris Needham,British Broadcasting Corporation; Atsushi Shimono,W3C; Matt Simpson,受邀专家; Andreas Tai,受邀专家。
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in: