字幕格式轉換
SRT、WebVTT、ASS/SSA 三種字幕格式互轉,並可整體平移時間軸修正不同步。全部在瀏覽器裡完成,並直說每種格式帶不過去什麼。
在你的瀏覽器中執行
負值表示字幕提早出現。會被推到零之前的字幕會停在零,不會被丟掉。
沒有帶過去的東西
解析與輸出都在你的瀏覽器裡完成,檔案不會上傳。
三種格式,同樣三件事
常見的字幕格式記的都是同樣的東西——起始時間、結束時間、一段文字。它們在「怎麼寫下來」這件事上 幾乎每個細節都不一樣:
| SRT | WebVTT | ASS/SSA | |
|---|---|---|---|
| 檔頭 | 沒有 | 必須是 WEBVTT | [Script Info] |
| 時間戳 | 00:01:02,500 | 00:01:02.500 | 0: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 根本沒有「位置」這個概念。NOTE、STYLE、REGION 區塊也一樣。
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。