toolfree

字幕格式轉換

SRT、WebVTT、ASS/SSA 三種字幕格式互轉,並可整體平移時間軸修正不同步。全部在瀏覽器裡完成,並直說每種格式帶不過去什麼。

在你的瀏覽器中執行

負值表示字幕提早出現。會被推到零之前的字幕會停在零,不會被丟掉。

偵測到
0
字幕條數
最後一條結束於

解析與輸出都在你的瀏覽器裡完成,檔案不會上傳。

三種格式,同樣三件事

常見的字幕格式記的都是同樣的東西——起始時間、結束時間、一段文字。它們在「怎麼寫下來」這件事上 幾乎每個細節都不一樣:

SRTWebVTTASS/SSA
檔頭沒有必須是 WEBVTT[Script Info]
時間戳00:01:02,50000:01:02.5000:01:02.50
精度毫秒毫秒百分秒
編號每條都有沒有沒有
換行直接換行直接換行\N
樣式<i><b><i>、CSS自成一套樣式引擎

把檔案貼到上面,格式會自動辨識。沒有東西被上傳——解析和輸出都在這個分頁裡完成。

修正字幕不同步

這才是大多數人打開字幕轉換器的真正理由,而它只是一個數字。輸入差多少秒,全部字幕就一起移動。

會被推到零之前的字幕會停在零,而不是被丟掉。會推到負數的平移量通常本來就填錯了,而悄悄少掉前 三句話只會讓你更晚發現。

固定平移只能修固定的偏差。 如果字幕是「愈到後面差愈多」,那是影格率不合——通常是 23.976 對 25——再怎麼平移都對不上。那需要改變速率,這個工具不做。

每一種轉換會失去什麼

頁面會針對你實際貼上的檔案列出來,而不是讓你事後才發現。

ASS 轉 SRT 或 WebVTT,會失去 ASS 之所以是 ASS 的一切。 字型、顏色、位置、卡拉 OK 逐字、 跟著鏡頭移動的招牌特效——全部都在樣式引擎裡,沒有任何對應。{\an8}{\pos(…)} 這類覆寫標籤 會被移除而不是留成文字,\N 會變成真正的換行。

WebVTT 轉任何東西會失去 cue 設定。 align:start position:10% 是 WebVTT 定位一行字的方式, 而 SRT 根本沒有「位置」這個概念。NOTESTYLEREGION 區塊也一樣。

SRT 和 WebVTT 互轉不會失去任何東西,除了 cue 識別碼,而那個東西沒有別的格式會讀。<i><b> 在兩邊寫法完全相同。

任何格式轉成 ASS 都會把時間四捨五入到百分秒,因為 ASS 的時間戳就只有這個精度。十毫秒在任何 影格率下都不到一格,肉眼看不出來——但它是真的,繞一圈回來不會位元完全相同。

WebVTT 真的需要那個檔頭

一個 .vtt 檔如果開頭不是 WEBVTT 這個字,它就不是 WebVTT 檔,瀏覽器會拒絕它——而且通常是無聲 無息地拒絕,<track> 就是什麼都不顯示。把 .srt 改名成 .vtt 不會有用,原因就在這裡。

另一半是那個逗號:SRT 寫 00:00:01,000,WebVTT 寫 00:00:01.000。這兩種錯誤做出來的檔案在 文字編輯器裡看起來都很正常,在播放器裡什麼都不會發生。

相關

要把字幕掛到 HTML <video> 上,見 SRT 轉 WebVTT;要讓字幕組的檔案在 沒聽過 ASS 的硬體上播得出來,見 ASS 轉 SRT