最新的 TTML 规范位于http://www.w3.org/TR/ttml1/
许多时序语义来自SMIL 2.1。
您的答案分为两部分:首先,您如何计算任何特定内容元素的时间;其次,您如何将这些时间与其他播放时间线联系起来。
计算时间值
时间的计算取决于几件事。首先,我们可以假设您在允许时间计算的 timeBase 和 markerMode 中工作吗?这适用于除一种情况外的所有情况,所以如果你有,timeBase="media"
或者timeBase="clock"
你可以。此外,如果你有timeBase="smpte"
和markerMode="continuous"
。例外情况是,如果您在smpte discontinuous
.
其次,您需要知道timeContainer
父元素上的属性值。默认情况下,par
这意味着时间是相对于父元素的时间计算的。如果是,seq
则相对于他们的兄弟姐妹或第一个孩子的父母计算时间。
在您的示例中,我们假设默认的标准时间容器具有连续的标记模式。然后每个 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 上都加上时间。如果你愿意,你也可以把时间放在身体和跨度上。