跳至主要內容
SubtitleMatrix

SRT 轉 TTML

格式轉換SubRip(SRT)
或者貼上字幕文字

這次轉換會改變什麼

這個方向不會遺失內容 —— 來源格式的每一項特性在目標格式裡都有地方可去。

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

這一頁把 SRT 轉成 TTML。TTML 是 XML 系的字幕格式,廣播、串流與系統間交換字幕時常用;對 SRT 來說,它是一層新的外殼。產物是一份 XML:宣告加 <tt> 根元素,裡面是 <body>,每條字幕是一個帶 begin 與 end 的 <p>。

時間寫成 00:00:04.126,毫秒原樣保留;一條兩行的字幕在同一個 <p> 裡用 <br/> 分行。這個方向不丟東西:時間軸、換行、文字與行內格式都能在 TTML 裡表達,產物只是同一批字幕的另一種寫法;有損的是反方向,TTML 轉 SRT 會丟掉樣式、定位與格式私有內容。

多個檔案可以一次處理,佇列依序執行、隨時可取消,結果打包成一個 ZIP;轉換在瀏覽器裡完成,字幕不上傳。輸出是 UTF-8、Unix 換行、無 BOM,來源若是 UTF-16 或 Windows 單字元編碼,讀入時會先解碼。

範例

一份典型的 SRT 檔案轉成 TTML

輸入

1
00:00:01,000 --> 00:00:03,500
Hello there.

2
00:00:03,500 --> 00:00:06,000
<i>Whispering</i> now.
And a second line.

3
00:00:06,000 --> 00:00:09,250
<b>Bold</b> statement.

輸出

<?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">Hello there.</p>
<p begin="00:00:03.500" end="00:00:06.000"><span tts:fontStyle="italic">Whispering</span> now.<br/>And a second line.</p>
<p begin="00:00:06.000" end="00:00:09.250"><span tts:fontWeight="bold">Bold</span> statement.</p>  </body>
</tt>

這個方向沒有遺失東西:時間、換行與文字都能在 TTML 裡還原。

同一轉換遇到一份格式不規則的輸入

輸入

1
0:00:01,00 --> 0:00:03,500
<B>Bold</B> and <I>italic</I>.


2
00:00:03,500 --> 00:00:06,000


3
00:00:08,000 --> 00:00:09,000
Last 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"><span tts:fontWeight="bold">Bold</span> and <span tts:fontStyle="italic">italic</span>.</p>
<p begin="00:00:03.500" end="00:00:06.000"></p>
<p begin="00:00:08.000" end="00:00:09.000">Last one.</p>  </body>
</tt>

空條目與壞掉的時間碼不會讓 XML 無法產生;讀得懂的條目照常寫成 p 元素,讀不了的記進有損說明。

常見問題

SRT 轉 TTML 後產物長什麼樣子?

像 TTML:沒有字幕編號,每條字幕是一個帶 begin 與 end 屬性的 <p>,嵌在 <body>(通常還有 <div>)裡,整份檔案上方有 XML 宣告。每條 SRT 字幕會變成一條 TTML 字幕,順序與文字都相同。

SRT 轉 TTML 後時間還精確到毫秒嗎?

是,精確到毫秒,這也是兩種格式共同的極限。SRT 寫成 00:00:04,126,TTML 寫成 00:00:04.126;兩者之間沒有捨入或位移。

SRT 轉 TTML 時一條兩行字幕會怎麼表示?

一個 <p> 裡用 <br/> 分成兩行,這是 TTML 表示硬換行的方式,兩行仍屬於同一條字幕。

SRT 轉 TTML 後字幕順序會保留嗎?

會,而且過程中會依開始時間排序,最早的在前。若原始 SRT 是亂序的,TTML 產物會把它排回順序;這改的是檔案結構而不是內容。

TTML 轉回 SRT 會有什麼代價?

反方向才是有損的:樣式、定位與格式私有內容在 SRT 裡沒有落點。SRT 轉 TTML 這個方向不丟東西,所以那份代價只在你轉回去時才會出現。

SRT 轉 TTML 後會保留來源檔案的編碼嗎?

不會,產物固定是 UTF-8、Unix 換行、無 BOM。UTF-16 或 Windows 單字元編碼的來源會在讀入時解碼(結果面板會說明),輸出永遠是同一種 UTF-8 TTML。

相關工具