跳至主要內容
SubtitleMatrix

SMI 轉 TTML

格式轉換SAMI(SMI)
或者貼上字幕文字

這次轉換會改變什麼

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

  • 格式專屬內容

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

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

這一頁把 SMI 轉成 TTML:拖曳檔案進來,或直接貼上文字,就會拿回一份 XML 字幕文件。轉換完全在瀏覽器裡執行,不會上傳。

這兩種格式存的東西不同,而且差別不是外觀問題:格式私有內容在 TTML 裡沒有落點。TTML 能接住時間軸、換行與文字,但 SAMI 的 `<STYLE>` CSS、`<TITLE>` 與 `Class=ENCC` 沒有對應結構。時間軸不受影響:`Start=4126` 寫成 `00:00:04.126`。上方清單是從兩種格式各自能表達什麼算出來的。

單一檔案可以,整季影集也可以:佇列會依序處理,結果一起打包成一個 ZIP 下載。

範例

一份典型的 SMI 檔案轉成 TTML

輸入

<SAMI>
<HEAD>
<STYLE TYPE="text/css">
<!--
P { text-align: center; font-family: Arial; }
.ENCC { Name: English; lang: en-US; }
-->
</STYLE>
</HEAD>
<BODY>
<SYNC Start=1000>
<P Class=ENCC>Hello there.
<SYNC Start=3000>
<P Class=ENCC>&nbsp;
<SYNC Start=3500>
<P Class=ENCC>How are you?<br>Fine, thanks.
<SYNC Start=6000>
<P Class=ENCC>&nbsp;
</BODY>
</SAMI>

輸出

<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling">
  <body>
<p begin="00:00:01.000" end="00:00:03.000">Hello there.</p>
<p begin="00:00:03.500" end="00:00:06.000">How are you?<br/>Fine, thanks.</p>  </body>
</tt>

這份產物丟掉了 STYLE、TITLE 與 Class;毫秒時間與多行分組都保留。

同一轉換遇到格式紊亂的輸入

輸入

<SAMI>
<HEAD>
<TITLE>Episode 1</TITLE>
<STYLE TYPE="text/css">
<!--
.ENCC { Name: English; }
-->
</STYLE>
</HEAD>
<BODY>
<sync start="00:00:02,500">
<P Class=ENCC>Line one<br>Line two
<sync start=9000>
<P Class=ENCC>Tom &amp; Jerry
<SYNC Start=12000>
<P Class=ENCC>&nbsp;
</BODY>
</SAMI>

輸出

<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling">
  <body>
<p begin="00:00:02.500" end="00:00:09.000">Line one<br/>Line two</p>
<p begin="00:00:09.000" end="00:00:12.000">Tom &amp; Jerry</p>  </body>
</tt>

真實檔案常見的損壞就是這樣——混合換行、散落的空白、壞掉的 SYNC 區塊。拿它和上面那份乾淨樣本對照,就能看出解析器容忍到什麼程度。

常見問題

SMI 的 <STYLE> 區塊與 Class 屬性在 TTML 裡會怎樣?

都會被丟棄。TTML 存的是字幕段落而不是 HTML 文件,`<STYLE>` 的 CSS、`<TITLE>` 與 `Class=ENCC` 都沒有地方放;寫在段落文字裡的強調則不受影響。

SMI 轉 TTML 後,時間軸精度會改變嗎?

不會。兩邊都能到毫秒,`Start=4126` 寫成 `begin` 為 `00:00:04.126`,不經過舍入。

SMI 轉 TTML 後,兩行的字幕用什麼標籤換行?

用 `<br/>`,仍在同一個 `<p>` 裡,也就是同一段字幕。

SMI 轉 TTML 的產物為什麼有 XML 宣告?

因為 TTML 是 XML 文件;產物以 XML 宣告開頭,時間放在 `<p>` 的 `begin` 與 `end` 屬性裡。

SMI 轉 TTML 時,清屏區塊會變成空的 <p> 嗎?

不會。`<P>&nbsp;` 沒有文字,讀取時當成清屏處理,不生成 `<p>` 元素。

SMI 轉 TTML 時,亂序的字幕會怎麼處理?

TTML 會依開始時間升序排列;原始檔案若亂序,產物會替你排好。

SMI 轉 TTML 的產物使用什麼編碼?

UTF-8 XML、Unix 換行、無 BOM;輸入若是 UTF-16 或 Windows 單一位元組編碼,讀入時會先解碼。

相關工具