最新的 TTML 规范位于http://www.w3.org/TR/ttml1/ http://www.w3.org/TR/ttml1/许多时序语义来自SMIL 2.1 http://www.w3.org/TR/2005/REC-SMIL2-20051213/.
您的答案分为两个部分:首先,如何计算任何特定内容元素的时间;其次,如何将这些时间与其他播放时间线联系起来。
计算时间值
时间的计算取决于几个因素。首先,我们可以假设您正在使用允许时间计算的 timeBase 和 MarkerMode 吗?这适用于除一种情况之外的所有情况,因此如果您有timeBase="media"
or timeBase="clock"
然后你可以。另外如果你有timeBase="smpte"
and markerMode="continuous"
。例外情况是如果您在smpte discontinuous
.
其次,你需要知道它的价值timeContainer
父元素上的属性。默认情况下是par
这意味着时间是相对于父元素的时间计算的。如果是seq
然后时间是相对于他们的兄弟姐妹或第一个孩子的父母来计算的。
在您的示例中,我们假设默认情况下具有连续标记模式的 par timeContainer。然后,每个 p 的计算时间是其时间添加到父 div 的开始时间并由父 div 的结束时间剪裁的时间,给出:
<div begin="00:00:22.0 end ="00:00:30.0">
<p begin="0s" end="1s">Hi,</p> <-- 00:00:22 -> 00:00:23
<p begin="3s" end="5s">Hello</p> <-- 00:00:25 -> 00:00:27
<p begin="5s" end="10s">there?</p> <-- 00:00:27 -> 00:00:30 (cut off by parent)
</div>
将时间与播放关联起来
这里查看的规范中最好的部分可能是附录 N。计算出的时间值的解释取决于ttp:timeBase
:
-
clock
意味着它们与某个地方的某个真实时钟相关,例如UTC 或 GPS 时钟。
-
media
意味着它们与视频文件等其他媒体中的时间相关。时间 0 通常与媒体的开始相关,如果您需要映射到帧值,那么您需要知道帧速率等。
-
smpte
意味着它们与某些其他媒体中的时间码相关。如果你有一个discontinuous
ttp:markerMode
那么所有时间都只是事件标记:在这种情况下,当您在媒体中看到时间代码值时,您可以根据需要开始或结束内容元素。
其他的东西
我没有提到评估时间表达式本身 - 有几种可用的语法,包括滴答率、帧率、小时分钟和分钟分数等。
当地时间也是允许的。
在 seq timeContainers 中,兄弟姐妹在时间上不能重叠;在 seq timeContainers 中他们可以。
在给定的示例中,不需要在 div 和 p 上都添加时间。如果你愿意的话,你也可以在身体和跨度上加上时间。