IMSC 中的計時

構建 IMSC 文件時,每個定義的文字片段都必須包含計時資訊,以指定其顯示時間。有多種方法可以描述字幕的開始和停止顯示時間,每種方法都有其優缺點。本文將解釋這些不同的方法。

如果您還沒有閱讀 IMSC 基礎知識文章中的 IMSC 文件的計時部分,現在應該閱讀它,然後再返回此處 — 它包含有關如何描述計時事件的初步概述。

描述計時資訊的方式

在 IMSC 文件中,有三種主要方式可以描述時間表達式的值。

  • 秒.小數:指定簡單的秒值。這是最簡單的方法;我們在文章系列的早期已經見過它的用法。
  • 時:分:秒.小數:以 HH:MM:SS 格式指定更復雜的時間。這與僅使用秒數類似,並且是 IMSC 檔案中最常見的計時錶達式之一。
  • :以幀數而不是秒數來指定開始和結束時間。這是 IMSC 檔案中使用的另一種最常見的計時錶達式。這種方法的優點是幀號直接對應於影片檔案中的幀號。

秒.小數

xml
<p begin="1s" end="2s">Hello, I am Mork from Ork</p>

這種描述 IMSC 文件中 beginend 值的方法非常簡單 — 只需在數字後附加“s”(秒)。它不需要使用者宣告相應媒體的幀率。這些值必須對映到文字所同步的影片幀。小數部分總是向上舍入到最接近的影片幀。

時:分:秒.小數

xml
<p begin="00:00:01.00" end="00:00:02.00">Hello, I am Mork from Ork</p>

這種描述 IMSC 文件中 begin 和 end 值的方法與使用秒數本質上是相同的,只是您將這些值表示為小時、分鐘和秒。這使您可以輕鬆設定更長、更精確的時間。

xml
<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 文件的根元素中宣告 frameRateframeRateMultiplier 屬性。幀率描述一秒鐘影片中有多少幀。乘數應用於 frameRate,以宣告一秒影片與一即時秒的比較方式。

讓我們稍微詳細地解釋一下。

frameRateMultiplier 源於非整數幀率(如 23.98fps,與整數幀率 24fps 相反)相關的問題。24fps 意味著影片的每一秒都有 24 幀,並且這一秒與即時秒相同。23.98fps 意味著影片的每一秒有 24 幀,並且這一秒比即時秒稍長。frameRateMultiplier 定義了與即時相比的每一幀的持續時間。

想象一下您有一個秒錶,並在觀看電影時計時。如果電影以 24fps 的速度播放,一旦您的媒體播放器顯示您已觀看滿 1 小時,您的秒錶將顯示 01:00:00.00。現在,如果電影以 23.98fps 的速度播放,一旦您的媒體播放器顯示您已觀看滿 1 小時,您的秒錶將顯示 01:00:03.6(1 小時 × (24/23.98))。

明白了嗎?

要描述 23.976fps 的幀率,將使用以下 frameRateframeRateMultiplier

xml
<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)來描述時間表達式了。

xml
<p begin="24f" end="48f">Hello, I am Mork from Ork</p>

使用此方法的優點是,時間表達式的幀號與媒體素材的幀號相同。86400f 的值對應於影片檔案中的第 86400 幀。

注意:您可以在 將影片時間碼對映到 IMSC 中找到這些值的額外解釋。