跳至主要內容
SubtitleMatrix

VTT 轉 SSA

格式轉換WebVTT(VTT)
或者貼上字幕文字

這次轉換會改變什麼

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

  • 精確度

    時間精確度——輸出的時間刻度較粗,因此每個時間戳記都會四捨五入到最接近的 10 毫秒

  • 格式專屬內容

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

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

這一頁把 VTT 轉成 SSA。拖入檔案或貼上文字,就會拿回 SSA 版本;轉換全程在瀏覽器裡完成,不上傳、不需要帳號。

兩種格式存的東西不同,而且差別不是外觀:精度與格式私有內容在 SSA 裡沒有落點。清單來自兩種格式各自能表達什麼,而不是你的檔案,所以載入之前答案就一樣。SSA 以百分秒存時間,00:00:04.126 會取整成 0:00:04.13,每條最多移動 5 毫秒;正文與換行保留,兩行會用 \N 連在同一個 Dialogue 事件裡。

一個檔案可以,整季也行:佇列依序處理,結果一起打包成單一 ZIP。SSA 需要樣式表而 WebVTT 沒有對應概念,所以會補一份 Default 樣式;NOTE/STYLE/REGION 區塊、標頭與 cue 設定則如實列為遺失。

範例

一份典型的 VTT 檔案轉成 SSA

輸入

WEBVTT

intro
00:00:01.000 --> 00:00:04.000
Hello there.

00:00:04.500 --> 00:00:08.000 align:start position:10%
Second line with <i>italics</i>.

輸出

[Script Info]
ScriptType: v4.00

[V4 Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, TertiaryColour, BackColour, Bold, Italic, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, AlphaLevel, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,1,2,2,2,10,10,10,0,1

[Events]
Format: Marked, 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:04.50,0:00:08.00,Default,,0,0,0,,Second line with {\i1}italics{\i0}.

這份產物遺失了精度與格式私有內容;其餘部分逐列一致。

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

輸入

a stray comment line
cue-id-1
00:00:01.000 --> 00:00:02.000
No header, two lines before the timecode.

輸出

[Script Info]
ScriptType: v4.00

[V4 Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, TertiaryColour, BackColour, Bold, Italic, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, AlphaLevel, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,1,2,2,2,10,10,10,0,1

[Events]
Format: Marked, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:01.00,0:00:02.00,Default,,0,0,0,,No header, two lines before the timecode.

真實檔案常見的損壞:混合換行、散落空白、留空欄位。對照上面的乾淨範例,可以看出解析器容忍到什麼程度。

常見問題

VTT 轉 SSA 時時間碼為什麼被取整?

SSA 以百分秒記錄時間,WebVTT 以毫秒:00:00:04.126 會變成 0:00:04.13,每個時間碼最多移動 5 毫秒。沒有任何字幕被拉伸或重排,但若要和其他檔案對齊,這裡就是唯一不再精確的地方。

VTT 的 NOTE、STYLE 與 REGION 區塊轉成 SSA 後去哪了?

被丟棄。WebVTT 可以帶標頭、註解、樣式區塊、區域定義與每條字幕的 align 或 position 設定,SSA 沒有地方放——它存的是 cue,不是整份檔案;cue 本身、文字與時間則完整通過。

VTT 轉 SSA 後產物長什麼樣子?

像 SSA:沒有字幕編號,每條字幕都是 [Events] 段裡的一列 Dialogue,原本放編號的位置是一個 Marked 欄位。每條 VTT 字幕會變成一條 SSA 字幕,順序與文字都相同。

VTT 轉 SSA 時一條兩行字幕會怎麼輸出?

變成兩行,中間用 \N 連接,這是 SSA 表示硬換行的方式;兩行仍屬於同一個 Dialogue 事件。

VTT 轉 SSA 後字幕順序會保留嗎?

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

SSA 轉回 VTT 會丟掉什麼?

反方向有自己的清單:SSA 轉 VTT 會丟掉樣式、定位、卡拉 OK 與格式私有內容;那份清單和上方不同,因為兩種格式各自保留的東西不一樣。

VTT 轉 SSA 後會保留來源檔案的編碼嗎?

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

相關工具