将视频时间码映射到 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 帧。实际上,以 23.976fps 播放 24 帧需要 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 的关联。

必须包含以使用帧方法的两个属性是frameRateframeRateMultiplier。帧速率描述一秒钟有多少帧,并且乘数应用于frameRate以描述实时秒中的实际帧速率。要描述 23.976fps 的帧速率,将使用以下值

xml
<tt ttp:frameRate="24" ttp:frameRateMultiplier="1000 1001"></tt>

这意味着每秒有 24 帧,并且这些帧以 23.976 帧/实时秒的速度播放(24 * (1000 / 1001))。

通过描述此实际帧速率,您现在能够以帧或 f 为单位描述时间表达式。这是事件开始和结束的实际帧号。以下与上述相同的示例,其中事件从 01:00:00:00 开始,并在 1 秒后结束。