跳至主要內容
SubtitleMatrix

ASS 轉 TTML

格式轉換Advanced SubStation Alpha(ASS)
或者貼上字幕文字

這次轉換會改變什麼

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

  • 卡拉 OK

    卡拉 OK 計時(逐音節高亮)

  • 格式專屬內容

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

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

這一頁把 ASS 轉成 TTML。拖曳檔案進來,或貼上文字,就會取回 TTML 版本;轉換在瀏覽器裡完成,不上傳、不需要帳號。

兩個格式存的東西不一樣,而且差別不是外觀問題:卡拉OK 與格式私有內容在 TTML 裡沒有落點。上方清單是從兩個格式各自能表達什麼算出來的,不是讀你的檔案。TTML 是 XML 系的字幕格式,每條字幕是一個帶 begin 與 end 的 <p>,片段級的粗體、斜體、下劃線與顏色會寫成內聯樣式,螢幕定位也能跟著過去。

一份檔案可以,整季也可以:佇列依序處理,結果一起下載成一個 ZIP。

範例

一份典型的 ASS 檔案轉成 TTML

輸入

[Script Info]
Title: Example
ScriptType: v4.00+
WrapStyle: 0

[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,2,2,10,10,10,1
Style: Title,Arial,36,&H0000FFFF,&H000000FF,&H00000000,&H00000000,-1,0,0,0,100,100,0,0,1,2,2,2,10,10,10,1

[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:01.00,0:00:04.00,Default,,0,0,0,,Hello there.
Dialogue: 0,0:00:05.00,0:00:08.50,Default,,0,0,0,,{\i1}Italic{\i0} and {\b1}bold{\b0} text.
Dialogue: 0,0:00:09.00,0:00:12.00,Title,,0,0,0,,{\pos(320,240)}Positioned
Dialogue: 0,0:00:13.00,0:00:16.00,Default,,0,0,0,,{\k50}ka{\k30}ra{\k20}o{\k10}ke
Dialogue: 0,0:00:17.00,0:00:20.00,Default,,0,0,0,,Line one\NLine two
Dialogue: 1,0:00:21.00,0:00:24.00,Default,,0,0,0,,{\an7}Top left

輸出

<?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:04.000">Hello there.</p>
<p begin="00:00:05.000" end="00:00:08.500"><span tts:fontStyle="italic">Italic</span> and <span tts:fontWeight="bold">bold</span> text.</p>
<p begin="00:00:09.000" end="00:00:12.000">Positioned</p>
<p begin="00:00:13.000" end="00:00:16.000">karaoke</p>
<p begin="00:00:17.000" end="00:00:20.000">Line one<br/>Line two</p>
<p begin="00:00:21.000" end="00:00:24.000">Top left</p>  </body>
</tt>

這份產物丟掉卡拉OK 與格式私有內容;樣式、定位、文字與時間軸都保留。

同一轉換遇到一份髒檔案

輸入

[Script Info]
; 一份真实的脏文件:BOM + CRLF + 认不出的覆写码 + Comment + 坏时间码
Title: Dirty sample
ScriptType: v4.00+

[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,1,0,0,0,100,100,0,0,1,2,2,2,10,10,10,1

[Fonts]
fontname: Arial
!!!!!!!!!!!!!!!!!!!!!!!!!!!!

[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Comment: 0,0:00:00.00,0:00:01.00,Default,,0,0,0,,这是一条注释,不该变成字幕
Dialogue: 0,0:00:01.00,0:00:04.00,Default,,0,0,0,,Hello, world
Dialogue: 0,0:00:05.00,0:00:08.00,Default,,0,0,0,,{\fad(300,300)}Unmodelled override
Dialogue: 0,0:00:09.00,0:00:12.00,Default,,0,0,0,,{\an7\pos(320,240)}Both, wrong order
Dialogue: 0,0:00:13.00,0:00:16.5,Default,,0,0,0,,One decimal centisecond
Dialogue: 0,0:00:17.00,0:00:20.00,Default,,0,0,0,,Soft\nbreak
Dialogue: 0,0:00:xx.00,0:00:24.00,Default,,0,0,0,,Broken timecode

輸出

<?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:04.000">Hello, world</p>
<p begin="00:00:05.000" end="00:00:08.000">{\fad(300,300)}Unmodelled override</p>
<p begin="00:00:09.000" end="00:00:12.000">Both, wrong order</p>
<p begin="00:00:13.000" end="00:00:16.500">One decimal centisecond</p>
<p begin="00:00:17.000" end="00:00:20.000">Soft<br/>break</p>  </body>
</tt>

真實檔案的混合換行與散落空白不影響 XML 輸出;讀不懂的覆寫碼原樣留在文字裡。

常見問題

ASS 轉 TTML 時,卡拉OK 逐字計時能保留嗎?

不能。\k、\kf、\ko 的時長在 TTML 裡沒有對應寫法,音節文字保留,依序點亮的效果消失。

ASS 轉 TTML 後,[Script Info] 與內嵌字型會怎樣?

丟棄。只有 Dialogue: 行會成為 <p>;[Script Info](含標題)、Comment: 行與 [Fonts]/[Graphics] 都沒有輸出。

ASS 轉 TTML 的產物長什麼樣子?

一份 XML:<tt> 根元素裡是 <body>,每條字幕是一個帶 begin 與 end 的 <p>;沒有字幕段落編號,檔案最上方有 XML 宣告。

ASS 轉 TTML 後,0:00:04.13 寫成什麼?

begin/end 屬性裡寫 00:00:04.130。ASS 只到百分秒,TTML 記到毫秒,百分秒乘十即可,不四捨五入;反方向才可能差 5 毫秒。

ASS 轉 TTML 時,一條兩行字幕怎麼放?

同一個 <p> 裡用 <br/> 分行,這是 TTML 的硬換行寫法;兩行仍屬於同一條字幕,播放器會一起顯示。

ASS 轉 TTML 後,字幕順序會重排嗎?

會依開始時間升序寫入。原始腳本若亂序,TTML 會排回正軌,這是結構整理而非內容改動。

把 TTML 轉回 ASS 會丟掉什麼?

精度與格式私有內容。TTML 的毫秒寫回 ASS 只能到百分秒(單點最多差 5 毫秒);檔案層級的結構在腳本裡也沒有對應段落。

ASS 轉 TTML 會保留來源編碼嗎?

不會。產物固定 UTF-8、無 BOM,使用 Unix 換行;來源若是 UTF-16 或 Windows 單一位元組編碼,讀入時解碼並在結果面板說明。

相關工具