跳至主要內容
SubtitleMatrix

TTML 轉 MicroDVD

格式轉換TTML / DFXP
或者貼上字幕文字

選項

時間以哪個影格率計算。在格式頁面上,這是 MicroDVD 需要的值,因為它把時間存成影格編號。在影格率頁面上,它是檔案當初對應的速率 —— 字幕是照這個版本製作的 —— 而頁面的第二個欄位填你要搭配的影片速率。常見的有 23.976、24、25、29.97、30、50、59.94 和 60。填錯會讓整條時間軸位移;在影格率頁面上,位移是按比例發生,而不是固定的量。

這次轉換會改變什麼

有 4 項會被捨棄或需要你決定

  • 樣式

    全部樣式(粗體、斜體、顏色、外框、陰影)

  • 定位

    螢幕定位(每條字幕都會回到預設位置)

  • 影格率

    此格式以影格編號儲存時間——時間取決於你提供的影格率

  • 格式專屬內容

    來源格式保留在字幕之外的內容(非字幕區塊、檔案標頭文字、單條字幕的設定、被註解掉的事件)——目標格式沒有地方存放它們

這份清單來自這兩種格式的能力矩陣,而不是你載入的這份具體檔案。如果具體檔案用到了格式允許、但矩陣沒有建模的特性,可能會遺失更多。

這一頁把 TTML 寫成 MicroDVD:產物是 `{100}{152}正文` 這樣的影格行,第一行寫 `{1}{1}25` 宣告影格率。MicroDVD 不存時鐘,所以毫秒要先乘上影格率、再四捨五入到影格。

影格率由頁面上的 fps 欄位給(預設 25)。TTML 自己的 `ttp:frameRate` 與 `ttp:frameRateMultiplier` 只在這一頁的讀入階段用來解釋影格寫法;寫出來的 MicroDVD 只認自己那一行宣告。取整會留下半個影格的痕跡:`1.5s` 在 25 fps 下是 37.5 格,寫成 `{38}`;`3.5s` 是 87.5,寫成 `{88}`。

丟的東西最多:樣式、畫面定位、影格率、TTML 的頭部構造都沒有落點。段落內的 `<span>` 強調也保不住——MicroDVD 的樣式能力是 none,`<span>` 裡的文字會留下,顏色與斜體不會。`<br/>` 寫成 `|`,兩行仍在同一條 cue;產物依開始時間升序,UTF-8、LF、無 BOM。

範例

一份典型的 TTML 檔轉成 MicroDVD

輸入

<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling" xml:lang="en">
  <head>
    <styling>
      <style xml:id="s1" tts:color="#FFFF00" tts:fontWeight="bold"/>
    </styling>
    <layout>
      <region xml:id="bottom" tts:origin="10% 80%" tts:extent="80% 20%"/>
    </layout>
  </head>
  <body>
    <div>
      <p begin="00:00:01.000" end="00:00:03.500" region="bottom" style="s1">Hello <span tts:fontStyle="italic">there</span>.</p>
      <p begin="00:00:03.500" end="00:00:06.000" region="bottom">How are you?<br/>Fine, thanks.</p>
    </div>
  </body>
</tt>

輸出

{1}{1}25
{25}{88}Hello there.
{88}{150}How are you?|Fine, thanks.

這個方向丟掉樣式、定位、影格率與頭部構造;影格號按 25 fps 取整。

同一轉換遇到一份格式凌亂的檔案

輸入

<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling"
    xmlns:ttp="http://www.w3.org/ns/ttml#parameter"
    ttp:frameRate="25" xml:lang="en">
  <body>
    <div>
      <p begin="1.5s" dur="2s">Loaded from an offset and a duration.</p>
      <p begin="4s" end="00:00:06.50">A coarser clock spelling.</p>
      <p begin="00:00:07:00" end="00:00:08:12">Frames, at 25fps.</p>
      <p begin="9s"><span tts:color="#FF0000">Half-open</span> and Tom &amp; Jerry.</p>
    </div>
  </body>
</tt>

輸出

{1}{1}25
{38}{88}Loaded from an offset and a duration.
{100}{163}A coarser clock spelling.
{175}{212}Frames, at 25fps.
{225}{275}Half-open and Tom &amp; Jerry.

這一份混用了真實寫法:位移加時長、較粗的時鐘拼法、按影格寫的時間、實體,以及只有開始時間的半開 cue。可以看解析器把哪些寫法折進同一條時間軸。

常見問題

TTML 轉 MicroDVD 用哪一個影格率?

頁面 fps 欄位裡的值,預設 25。TTML 自己宣告的 `ttp:frameRate` 不會自動帶過去;要讓產物按別的影格率寫,就在欄位裡改。填錯的表現是整條時間軸按比例偏。

TTML 的 7 秒 12 格在 MicroDVD 裡為什麼是 `{212}`?

先把影格寫法折算成 8.48 秒(25 fps),再乘上 25 得到 212 格。MicroDVD 第一個大括號裡的就是影格號,不是時間碼。

TTML 轉 MicroDVD 會保留毫秒嗎?

不會。MicroDVD 的精度是一格,25 fps 下約 40 ms;毫秒在換算時被取整到最近的影格,範例裡 1.5 秒寫成第 38 格。

TTML 的樣式與定位在 MicroDVD 產物裡有落點嗎?

沒有。`<styling>`、`<layout>`、`<p>` 上的 `style` / `region` 參照與段落內的 `<span>` 強調都不會進產物,只剩文字與影格號。

TTML 轉 MicroDVD 的兩行字幕怎麼合併?

用直線 `|` 連成一行,這是 MicroDVD 的硬換行寫法。兩行仍然屬於同一條 cue,時間窗只出現一次。

TTML 轉 MicroDVD 後,產物本身有影格率可讀嗎?

有,第一行 `{1}{1}25` 就是宣告,數值等於頁面欄位。它只描述這份產物按幾格寫,不提供反推原始毫秒的能力。

TTML 轉 MicroDVD 時,認不出的文字會怎樣?

文字照留。TTML 的實體與段落內標記先還原成文字,再寫進 MicroDVD;樣式標記不會被翻成 MicroDVD 語法,因為它沒有這種語法。

MicroDVD 再轉回 TTML 會丟掉什麼?

丟掉影格率。TTML 的 cue 只有時鐘,影格號換算過一次就不再保留;MicroDVD 的影格率也不會寫成 `ttp:frameRate`。

TTML 轉 MicroDVD 的產物用什麼編碼?

UTF-8、LF、無 BOM;來源若是 UTF-16 或 Windows 單一位元編碼,會先解碼並在結果面板說明。

相關工具