IMSC 中的时序
在构建 IMSC 文档时,每个定义的文本片段都必须包含时序信息,以指定它应该何时出现。有多种方法可以描述字幕应该何时开始和停止显示,每种方法都有其优缺点。本文将解释这些不同的方法。
如果您还没有阅读 IMSC 文档中的时序 部分,您应该先阅读,然后再返回这里 - 它包含关于如何描述时序事件的初始概述。
描述时序的不同方式
在 IMSC 文档中描述时间表达式值主要有三种方法。
- 秒.小数:指定简单的秒值。这是最简单的方法;我们之前已经在文章系列中看到过它的使用。
- HH:MM:SS.小数:指定更复杂的时间,格式为
HH:MM:SS
。这类似于只使用秒,是 IMSC 文件中最常见的时序表达式之一。 - 帧:以帧数而不是秒数指定开始和结束时间。这是 IMSC 文件中使用的另一种最常见的时序表达式。这种方法的优势在于帧号直接对应于视频文件中的帧号。
秒.小数
<p begin="1s" end="2s">Hello, I am Mork from Ork</p>
这种描述 IMSC 文档中 begin
和 end
值的方法非常简单 - 您只需包含一个带“s”(秒)后缀的数字即可。它不需要用户声明对应媒体的帧率。这些值必须映射到文本同步的视频帧。小数值将始终向上舍入到最接近的视频帧。
HH:MM:SS.小数
<p begin="00:00:01.00" end="00:00:02.00">Hello, I am Mork from Ork</p>
这种描述 IMSC 文档中 begin 和 end 值的方法本质上与使用秒相同,只是您将这些值表示为小时、分钟和秒。这使您可以轻松设置更长、更精确的时间。
帧
<tt xmlns="http://www.w3.org/ns/ttml"
xml:lang="en"
ttp:frameRate="24"
ttp:frameRateMultiplier="1000 1001">
<body>
<div>
<p begin="24f" end="48f">Hello, I am Mork from Ork</p>
</div>
</body>
</tt>
此方法要求在 IMSC 文档的根元素中声明 frameRate
和 frameRateMultiplier
属性。帧率描述视频一秒钟有多少帧。乘数应用于 frameRate
以声明视频的一秒钟与一实时秒的比较方式。
让我们更详细地解释一下。
frameRateMultiplier
源于与非整数帧率(如 23.98fps(与整数帧率如 24fps 相反))相关的难题。24fps 表示视频的每秒钟有 24 帧,而这秒钟与实时秒相同。23.98fps 表示视频的每秒钟有 24 帧,而这秒钟比实时秒稍长。frameRateMultiplier
定义了每帧的持续时间与实时的比较。
想象一下,您有一个秒表,并计时自己观看电影。如果这部电影以 24fps 的速度播放,那么当您的媒体播放器显示您已经观看了一个小时的电影时,您的秒表会显示 01:00:00.00。现在,如果这部电影以 23.98fps 的速度播放,那么当您的媒体播放器显示您已经观看了一个小时的电影时,您的秒表现在会显示 01:00:03.6(1 小时 × (24/23.98))。
明白了吗?
要描述 23.976fps 的帧率,将使用以下 frameRate
和 frameRateMultiplier
值
<tt xmlns="http://www.w3.org/ns/ttml"
xml:lang="en"
ttp:frameRate="24"
ttp:frameRateMultiplier="1000 1001">
这实际上是在说,24 帧的每秒钟应该以 (24 * (1000/1001)) 或 23.98fps 的速度播放。
现在声明了 23.98 的帧率,您可以用帧或 f 来描述时序表达式。
<p begin="24f" end="48f">Hello, I am Mork from Ork</p>
使用这种方法的优势在于,时序表达式帧号与媒体资产的帧号相同。86400f 的值是视频文件中第 86400 帧。
注意:您可以在 将视频时间码映射到 IMSC 中找到对这些值的更多解释。