TTML 轉 MicroDVD
或者貼上字幕文字
選項
時間以哪個影格率計算。在格式頁面上,這是 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 & 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 & 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 單一位元編碼,會先解碼並在結果面板說明。