跳到主要内容
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 计时、残留的特效块与定位。出来的是朴素的定时文本——文字、cue 时间与文件自己的结构,行落在它命名样式安排的位置上。

ASS 是能说得最多的格式,而它能说的东西大多写成一行文字内部的覆写码。有些是工具建模过的样式——`{\i1}`、`{\b1}`、`{\c&H...&}`、`{\k50}`——有些是它没建模的特效:淡入淡出、移动、缩放、模糊,写成同样形状的块。读入文件时这些未建模的块被刻意留在文字里,因为吃掉读不懂的标记就是在丢数据。这一页负责把它们扫掉。

定位也在这里清,而且是这一页唯一不只是“删标记”的部分:一行在屏幕上的位置是整个事件的属性而不是文字区间,所以定位过的行会回到命名样式安排的默认位置。这才让产物真正朴素。命名样式表本身不动——那条 cue 的样式是粗体,之后看起来还是粗体。

有一个码留着,页面主动告诉你而不是让你自己发现:九宫格对齐,例如 `{\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: 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} 这种九宫格对齐标签会被保留?

因为工具无法精确表示它。`\an8` 指九格中的一格,同时编码横向与纵向位置,而工具自己的对齐只有左、中、右。存下横向、丢掉另一半会让文件往返出错,所以整个标签原样保留;定位码会被清,对齐码不会,页面把这件事写明。

什么是覆写块,它为什么在文字里?

是写在一行文字内部花括号里的一组指令,告诉播放器对这一行做什么:改样式、做动画、淡入淡出、移动。工具建模了常见的样式子集并读进自己的结构,其余的原样留在原处——淡出、移动、模糊这类都被完整保留,因为丢弃读不懂的标记是在悄悄丢数据。

清除覆写码会改动时间码或文字吗?

不会。文字逐字节回来,每条 cue 的起止保持毫秒值,顺序也是文件自己的;cue 内部的换行属于 cue 而不是样式,仍在原位。改变的是文字周围的指令,有些情况下还有这一行在屏幕上的位置。

命名样式表会被一起清掉吗?

不会,样式表与每条 cue 指向的样式原样保留。这一页处理的是写在一行文字内部的码,命名样式为粗体的 cue 之后仍然看起来是粗体,因为粗来自样式而不是来自这一行自己的文字。

SRT 或 WebVTT 文件也能用这一页吗?

可以丢进来。在这两种格式上,前半段仍然工作——样式区间被删——而扫花括号的那一半什么也找不到,因为这些格式里没有覆写块。既没有样式也没有花括号的文件逐字节返回,这是“没事可做”的诚实结果。

清除后播放会更不可靠吗?

恰好相反。播放器读不懂的覆写码轻则忽略、重则误解析,不同播放器对特效码的解释尤其不一致;朴素定时文本没有这种歧义。唯一要留意的是原先靠定位压在画面某处的那行会回到样式安排的位置。

相关工具