跳至主要內容
SubtitleMatrix

清除 ASS 覆寫標籤

文字樣式移除標記與標籤
或者貼上字幕文字

選項

一個欄位,七個選項,每個選項都有自己的頁面。斜體、粗體、底線和顏色只去掉對應的那一種區間,行內其他樣式不動。全部 會去掉工具建模的所有區間 —— 那四種加上卡拉 OK 計時 —— 文字裡的其他內容保持原樣。HTML 做同樣的事,並額外清掉解析時因為不被建模而留在文字裡的角括號標記,例如 VTT 的 <v Bob> 說話者標籤和 <c.className>。ASS 則改為清掉覆寫區塊,即解析時未能辨識的 {...} 代碼,例如 {\fad(500,500)}。這一頁會把欄位填成標題裡點名的選項,並且不列出其他選項。

時間以哪個影格率計算。在格式頁面上,這是 MicroDVD 需要的值,因為它把時間存成影格編號。在影格率頁面上,它是檔案當初對應的速率 —— 字幕是照這個版本製作的 —— 而頁面的第二個欄位填你要搭配的影片速率。常見的有 23.976、24、25、29.97、30、50、59.94 和 60。填錯會讓整條時間軸位移;在影格率頁面上,位移是按比例發生,而不是固定的量。

這一頁清掉 ASS 或 SSA 檔裡的覆寫碼:樣式範圍、卡拉OK計時、殘留的效果區塊與定位。回來的是單純的定時文字——文字、字幕時間與檔案自己的結構,每一行停在它具名樣式安排的位置上。

ASS 是最能表達的格式,而它能表達的大部分東西,都寫成一行文字裡的覆寫碼。有些是工具建模過的樣式——`{\i1}`、`{\b1}`、`{\c&H...&}`、`{\k50}`——有些是它沒有建模的效果:淡入淡出、移動、縮放、模糊,全都用同一個形狀的區塊寫成。讀檔時,那些未建模的區塊會刻意留在文字裡,因為吃掉工具讀不懂的標記就等於丟資料。這一頁就是把它們掃掉的那一頁。

定位在這裡也會被清掉,而這是這一頁唯一不只是移除標記的動作:一行在畫面上的位置屬於整條事件,而不是文字上的範圍,所以設定過位置的字幕會回到它具名樣式安排的地方。這正是產物真的稱得上單純的原因。具名樣式表本身不動——樣式是粗體的字幕跑完看起來還是粗體,因為粗體屬於樣式,不屬於文字。

有一個碼會留著,而頁面明白講出來,不讓你自己發現:像 `{\an8}` 這樣的九宮格對齊碼會照原樣保留。它同時編碼垂直與水平位置,而工具自己的對齊只涵蓋左、中、右,另一半沒有地方放。只懂一半會讓檔案往返出錯。不上傳;沒有東西可移除的檔案會逐位元組回來。

範例

樣式與殘留的效果區塊

輸入

[Script Info]
Title: fade

[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,0,0,0,0,100,100,0,0,1,1,1,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:02.00,Default,,0,0,0,,{\fad(500,500)}{\i1}hello{\i0}

輸出

[Script Info]
Title: fade

[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,0,0,0,0,100,100,0,0,1,1,1,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:02.00,Default,,0,0,0,,hello

`{\fad(500,500)}` 要求播放器把這一行各用半秒淡入、淡出。工具從來沒有建模過它,所以它就坐在文字裡,直到這一輪把它掃掉——旁邊那對斜體也一起走,留下這一行本身。產物裡沒有任何東西記著那個淡入淡出曾經存在。

設定過位置的一行

輸入

[Script Info]
Title: position

[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,0,0,0,0,100,100,0,0,1,1,1,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:02.00,Default,,0,0,0,,{\pos(100,200)}hello there

輸出

[Script Info]
Title: position

[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,0,0,0,0,100,100,0,0,1,1,1,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:02.00,Default,,0,0,0,,hello there

這一行不再被告知要坐在哪裡,於是回到事件上具名樣式安排的位置。這是整輪裡唯一不只是移除標記的部分,也是為什麼一份必須變成單純、而不只是去掉強調的檔案,該用這一頁。

會留著的九宮格對齊碼

輸入

[Script Info]
Title: alignment

[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,0,0,0,0,100,100,0,0,1,1,1,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:02.00,Default,,0,0,0,,{\an8}hello there

輸出

[Script Info]
Title: alignment

[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,0,0,0,0,100,100,0,0,1,1,1,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:02.00,Default,,0,0,0,,{\an8}hello there

這一個原封不動回來,而那不是漏掉。`{\an8}` 同時說上方與置中,而工具的對齊只涵蓋左、中、右——垂直的那一半沒有地方放,所以標記整組保留,而不是只懂一半。定位碼會被清掉,這一個不會。

常見問題

為什麼九宮格對齊碼在這一頁會活下來?

因為工具沒有辦法精確表示它。像 `{\an8}` 這樣的對齊碼指的是九個格子之一,同時編碼水平與垂直位置,而工具自己的對齊只有左、中、右。只存水平那一半、丟掉另一半,會讓檔案往返出錯,所以標記逐字保留。定位碼會清掉,對齊碼不會,而頁面明白告訴你這件事,不讓你自己發現。

什麼是覆寫區塊,為什麼它會在文字裡?

那是一組寫在一行文字裡、夾在大括號之間的指令,告訴播放器對這一行做某件事:改樣式、做動畫、淡入淡出、移動。工具建模了常見的樣式子集,並把它們讀進自己的結構,其餘的原封不動留在發現的地方——淡入淡出、移動、模糊之類的東西逐字保留而不是丟棄,因為丟掉讀不懂的標記會悄悄失去資料。這一頁就是它們最後被清掉的地方。

清掉覆寫碼會改變時間或文字嗎?

不會。文字逐位元組回來,每條字幕的起止精確到毫秒都保留,字幕順序也是檔案自己的。字幕內部的換行屬於字幕本身,不屬於它的樣式,所以留在檔案放的位置。變的是文字周圍的指令,有些情況下還有一行在畫面上的位置。

覆寫碼清掉之後,產物還能正常播放嗎?

可以,而且比原本更可預測。播放器讀不懂的覆寫碼,最好的情況是被忽略,最壞的情況是被錯誤解析,而不同播放器對效果碼的看法尤其不一致。單純的定時文字沒有這種歧義。如果檔案原本靠定位把字幕壓在鏡頭裡某個特定東西上,那個位置已經不見了,這一行會停在樣式安排的地方。

這一頁會連樣式表裡的具名樣式一起移除嗎?

不會——樣式表與每條字幕指向的樣式都原封不動。這一頁動的是寫在一行文字裡的碼,而樣式是粗體的字幕跑完看起來還是粗體,因為粗體來自樣式,不是來自那一行自己的文字。清理樣式表是另一件工作,目前也還沒有對應的頁面。

這一頁只能用在 ASS 與 SSA,還是也能用在 SRT?

本站讀得的格式都可以拖進來。在 SRT 或 WebVTT 檔上,前半段照樣做事——樣式範圍會走——而掃除找不到東西,因為那些格式裡不會出現大括號區塊。既沒有樣式也沒有大括號區塊的檔案會逐位元組回來,這是沒有事可做的執行最誠實的結果。

相關工具