下載字幕檔的時候常會看到 .srt、.vtt、.ass
三種副檔名。它們裝的都是「幾秒到幾秒要顯示什麼字」,但能表達的東西差很多,
能用的地方也不一樣。這篇把差異講清楚,並說明什麼情況該選哪一種。
| 格式 | 全名 | 樣式能力 | 典型用途 |
|---|---|---|---|
| SRT | SubRip Subtitle | 幾乎沒有(僅少數播放器支援粗體、斜體等基本標籤) | 最通用的交換格式,桌面播放器與多數平台都吃 |
| VTT | WebVTT | 可搭配 CSS 設定位置、對齊與外觀 | 網頁播放器,HTML5 <track> 唯一原生支援的格式 |
| ASS / SSA | Advanced SubStation Alpha | 完整:字型、顏色、描邊、陰影、逐格定位、動畫特效 | 動畫字幕組、卡拉 OK 特效、需要精準排版的場合 |
結構最單純:序號、時間碼、一到多行文字,用空行分隔每一段。
時間碼是 時:分:秒,毫秒,注意毫秒用逗號分隔。
1
00:00:01,200 --> 00:00:04,500
你是認真的嗎?
2
00:00:04,800 --> 00:00:08,100
我現在不是在開玩笑。
結構與 SRT 很接近,但有三個必須注意的差別:檔案開頭一定要有
WEBVTT 這一行、時間碼的毫秒改用句點、
序號可有可無。時間碼未滿一小時可以省略小時位。
WEBVTT
00:01.200 --> 00:04.500
你是認真的嗎?
00:04.800 --> 00:08.100 line:90% align:center
我現在不是在開玩笑。
第二段時間碼後面的 line:90% align:center 是 cue setting,
用來控制字幕出現的位置——這是 SRT 做不到的部分。
ASS 是三者中唯一有「樣式表」概念的格式。檔案分成幾個區段:
[Script Info] 放解析度等全域設定,[V4+ Styles]
定義具名樣式(字型、大小、顏色、描邊粗細、邊界),
[Events] 才是實際的字幕行,每行指定要套用哪個樣式。
[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, OutlineColour, Bold, Outline, Alignment, MarginV
Style: Default,Noto Sans TC,48,&H00FFFFFF,&H00000000,0,2,2,30
[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:01.20,0:00:04.50,Default,,0,0,0,,你是認真的嗎?
注意 ASS 的時間碼是 0:00:01.20——小時不補零、
而且末尾是百分之一秒(兩位),不是毫秒。
顏色寫成 &H00BBGGRR,是 BGR 順序加上透明度,
跟網頁的 #RRGGBB 相反,手改的時候很容易弄錯。
<track> 元素只認得 WebVTT,
丟 SRT 進去瀏覽器不會顯示。
ASS 轉 SRT 一定會丟失所有樣式與定位,只留下純文字與時間碼,這是格式能力的 差距造成的,沒有工具能避免。反過來 SRT 轉 ASS 不會憑空生出樣式, 只會套上預設值。SRT 與 VTT 之間互轉則幾乎無損,因為兩者的資料模型很接近。
中文字幕最常見的問題不是格式而是編碼。SRT 沒有在檔案裡宣告編碼的欄位, 播放器只能用猜的。如果字幕開起來是亂碼,通常是檔案存成 Big5 或 GBK 而播放器當成 UTF-8 讀(或反過來)。
實務上的解法是統一存成 UTF-8。部分舊播放器需要 UTF-8 BOM 才能正確判斷,所以有些工具輸出 SRT 時會刻意加上 BOM。 VTT 規格則明確要求 UTF-8,沒有這個模糊地帶。
如果你手上的影片根本還沒有字幕檔,字幕醬 可以直接從影片的語音辨識出內容並翻成繁體中文,編輯後可直接下載 VTT、ASS、FCPXML 與 SRT;ASS 還能帶自訂樣式,不必再手動轉檔。
延伸閱讀:字幕時間軸跑掉怎麼校正、 怎麼把字幕壓進影片。