将视频时间码映射到 IMSC
将视频轨道或视频编辑器时间轴中看到的时间或时间码值映射到 IMSC 文档可能有点棘手。有几个不同的问题需要您注意,我们将在本文中介绍。
考虑时间码开始时间
为了简单起见,我们将假设我们的视频素材中的时间码轨道从 00:00:00:00 开始。默认情况下,IMSC 文档中的值从 0 开始并自动递增。
如果视频轨道中的时间码不是从 00:00:00:00 开始,您将不得不取视频轨道中的第一个时间戳,并对该值和所有后续值执行计算,以便初始值为 00:00:00:00。例如,如果视频轨道中的第一个时间码值为 00:59:50:00,那么您必须从视频轨道中的所有时间码值中减去 00:59:50:00,以便将其与 IMSC 文档同步。
帧速率
当您使用整数帧速率(例如 24fps、25fps 和 30fps)时,将 IMSC 文档映射到视频素材非常直接。您时间轴中的值将与 IMSC 文档中的值相同。然而,当您使用小数帧速率(例如 23.976fps 或 29.97fps)时,情况会变得更复杂一些。
帧速率实际上描述了每秒的帧数和这些帧的速度
- 25fps 表示每秒有 25 帧(0-24),并且这些帧的播放速度与实时时钟相同。
- 24fps 表示每秒有 24 帧(0-23),并且这些帧的播放速度与实时时钟相同。
- 23.976fps 是事情变得奇怪的地方。与 24fps 类似,它表示每秒有 24 帧(0-23)。然而,与 24fps 不同的是,这 24 帧的播放速度比实时时钟稍慢。正如帧速率数字(23.976fps)所暗示的那样,在一秒的实际时间内,您几乎可以看到 24 帧。24 帧以 23.976fps 播放实际上需要 1.001 秒才能显示。
在一秒钟内,这不成问题。然而,当您扩展到几分钟时,24fps 和 23.976fps 之间已经会有几帧的差异。当您扩展到一个小时时,它们将相差 3.6 秒。以下是一些数学计算来说明这一点
01:00:00:00 @ 24fps
3600 (1 小时的秒数) * 1.000 (速度) = 3600 实际秒数
01:00:00:00 @ 23.976fps
3600 (1 小时的秒数) * 1.001 (速度) = 3603.6 实际秒数
这一点对于理解 IMSC 文件尤其重要,因为文档中的所有时序都代表实际时间值。例如,如果您想描述一个与 23.976fps 视频同步的事件,该视频在视频中从 01:00:00:00 时间码开始,并在 1 秒后结束,它看起来会是这样的
<p begin="3603.6s" end="3604.6s">你好,我是来自奥克星的摩克</p>
这其中重要的启示是,如果您正在将具有小数帧速率的视频与 IMSC 文档同步,则时序将不匹配。IMSC 文档中的时序将与视频时序越来越远。
减轻此问题
也就是说,在 IMSC 文件中描述时间表达式值实际上有一种不同的方法,可以解决这个问题。如IMSC 中的时序指南中所述,使用帧的时间表达式语法将在 IMSC 文件中的帧号和媒体素材中的帧号之间提供 1:1 的对应关系。
使用帧方法必须包含的两个属性是 frameRate 和 frameRateMultiplier。帧速率描述了每秒有多少帧,而乘数应用于 frameRate 来描述实际帧速率(以实际秒为单位)。要描述 23.976fps 的帧速率,将使用以下值
<tt ttp:frameRate="24" ttp:frameRateMultiplier="1000 1001">
…
</tt>
这意味着每秒有 24 帧,并且这些帧的播放速度为每实际秒 23.976 帧(24 * (1000 / 1001))。
通过描述此实际帧速率,您现在可以以帧(或 f)为单位描述时间表达式。这是事件开始和结束的实际帧号。这是与上面相同的示例,其中事件在 01:00:00:00 开始,并在 1 秒后结束。