SBV 轉 TTML
或者貼上字幕文字
這次轉換會改變什麼
這個方向不會遺失內容 —— 來源格式的每一項特性在目標格式裡都有地方可去。
這份清單來自這兩種格式的能力矩陣,而不是你載入的這份具體檔案。如果具體檔案用到了格式允許、但矩陣沒有建模的特性,可能會遺失更多。
這一頁把 SBV 轉成 TTML:拖曳檔案進來,或直接貼上文字,就會拿回一份 XML 字幕文件。轉換完全在瀏覽器裡執行,不會上傳。
這個方向不會遺失任何東西。產物是一份結構規整的 XML 文件:XML 宣告、`<tt>` 根元素、`<body>`,每段字幕是一個帶 `begin` 與 `end` 的 `<p>`。SBV 的 `0:00:04.126` 寫成 `begin="00:00:04.126"`,到毫秒,不取整也不挪位;兩行用 `<br/>` 連接,仍屬於同一段字幕。
單一檔案可以,整季影集也可以:佇列會依序處理,結果一起打包成一個 ZIP 下載。
範例
一份典型的 SBV 檔案轉成 TTML
輸入
0:00:01.000,0:00:03.500
The quick brown fox.
0:00:04.000,0:00:06.250
Jumps over the lazy dog.
0:00:07.000,0:00:09.000
Two lines here.
And a second one.
輸出
<?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.500">The quick brown fox.</p>
<p begin="00:00:04.000" end="00:00:06.250">Jumps over the lazy dog.</p>
<p begin="00:00:07.000" end="00:00:09.000">Two lines here.<br/>And a second one.</p> </body>
</tt>
這個方向沒有丟掉任何東西:左右兩欄逐行對照就知道了。
同一轉換遇到格式紊亂的輸入
輸入
0:00:02.000,0:00:04.000
Carriage-return line endings.
0:00:06.000,0:00:08.000
Indented timecode, no final newline.輸出
<?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.000" end="00:00:04.000">Carriage-return line endings.</p>
<p begin="00:00:06.000" end="00:00:08.000">Indented timecode, no final newline.</p> </body>
</tt>
真實檔案常見的損壞就是這樣——混合換行、散落的空白、留空的欄位。拿它和上面那份乾淨樣本對照,就能看出解析器容忍到什麼程度。
常見問題
SBV 轉 TTML 後,時間寫在哪裡?
寫在 `<p>` 的 `begin` 與 `end` 屬性裡,例如 `begin` 為 `00:00:04.126`;補上小時的兩位前導零,毫秒不變。
SBV 轉 TTML 會有任何損失嗎?
沒有。SBV 只有時間、文字與換行,TTML 的 `<p>` 用 `begin`、`end` 與正文就能完整裝下,所以有損說明是空的。
SBV 轉 TTML 後,兩行的字幕用什麼標籤換行?
用 `<br/>`,仍在同一個 `<p>` 裡,也就是同一段字幕。
SBV 轉 TTML 的產物是完整的 XML 文件嗎?
是。產物以 XML 宣告開頭,根元素是帶命名空間的 `<tt>`,下面嵌 `<body>` 與逐段的 `<p>`,可以直接交給 XML 解析器。
SBV 轉 TTML 時,亂序的字幕會怎麼處理?
TTML 會依開始時間排序,最早的在前;原始檔案若亂序,產物會替你排好。
SBV 轉 TTML 的產物可以用什麼工具讀取?
任何 XML 解析器或支援 TTML 的播放器都可以;產物是合法 XML,時間寫在 `<p>` 的 `begin` 與 `end` 屬性上。