跳到主要内容
SubtitleMatrix

SSA 转 CSV

格式转换SubStation Alpha(SSA)
或者粘贴字幕文本

这次转换会改变什么

有 4 项会被丢弃或需要你决定

  • 样式

    全部样式(粗体、斜体、颜色、描边、阴影)

  • 定位

    屏幕定位(每条字幕条都会回到默认位置)

  • 卡拉 OK

    卡拉OK计时(逐音节高亮)

  • 格式专有内容

    源格式保留在字幕条之外的内容(非字幕块、文件头文字、单条字幕的设置、被注释掉的事件)——目标格式没有地方存放它们

这份清单来自这两种格式的能力矩阵,而不是你加载的这份具体文件。如果具体文件用到了格式允许、但矩阵没有建模的特性,可能会丢得更多。

这一页把 SSA 脚本摊成 CSV 表格。产物只有三列:表头是 start,end,text,之后一行一条字幕;时间写成 00:00:04.130 这种形状,正文里带换行时整个单元格加引号。转换在浏览器里完成,不上传。

丢的是脚本那一层。样式表、屏幕定位、卡拉OK 计时、[Script Info] 的全局设置、Comment: 行、[Fonts] 与 [Graphics] 里内嵌的东西,CSV 都没有地方放。片段的强调还在:粗体、斜体、下划线、颜色会写成 <b>、<i>、<u>、<font color="…"> 标签留在文字里,因为这是 cue 级格式唯一还装得下的样式。

时间轴不丢。SSA 的时间只到百分秒,0:00:04.13 转成 00:00:04.130,既不四舍五入也不平移;一条两行的字幕写成引号包住的两行,读回去仍然是同一条。

产物按起始时间升序,UTF-8、Unix 换行、无 BOM。可以一次拖入整季,串行处理,随时取消,最后打包成一个 ZIP 下载。

示例

一份典型的 SSA 文件转成 CSV

输入

[Script Info]
Title: Example SSA
ScriptType: v4.00
Collisions: Normal

[V4 Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, TertiaryColour, BackColour, Bold, Italic, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, AlphaLevel, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,1,2,2,2,10,10,10,0,1

[Events]
Format: Marked, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: Marked=0,0:00:01.00,0:00:04.00,Default,,0,0,0,,Hello there.
Dialogue: Marked=0,0:00:05.00,0:00:08.00,Default,,0,0,0,,{\i1}Italic{\i0} line.
Dialogue: Marked=0,0:00:09.00,0:00:12.00,Default,,0,0,0,,Two\Nlines

输出

start,end,text
00:00:01.000,00:00:04.000,Hello there.
00:00:05.000,00:00:08.000,<i>Italic</i> line.
00:00:09.000,00:00:12.000,"Two
lines"

这份产物丢掉了样式、定位、卡拉OK 与脚本内容;时间轴与正文逐行一致。

同一转换遇到一份脏文件

输入

[Script Info]
Title: Dirty SSA
ScriptType: v4.00

[V4 Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, TertiaryColour, BackColour, Bold, Italic, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, AlphaLevel, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,1,2,2,2,10,10,10,0,1

[Events]
Format: Marked, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Comment: Marked=0,0:00:00.00,0:00:01.00,Default,,0,0,0,,not a subtitle
Dialogue: Marked=0,0:00:01.00,0:00:04.00,Default,,0,0,0,,{\b1}Bold{\b0} and {\u1}underlined{\u0}.
Dialogue: Marked=0,0:00:05.00,0:00:08.00,Default,,0,0,0,,A soft\nbreak and a {\p1}mystery{\p0} code.

输出

start,end,text
00:00:01.000,00:00:04.000,<b>Bold</b> and <u>underlined</u>.
00:00:05.000,00:00:08.000,"A soft
break and a {\p1}mystery{\p0} code."

真实文件里常见的损坏:混合换行、散落的空白、留空的字段。可以对照上面那份干净样例,看看解析器能容忍到什么程度。

常见问题

SSA 转 CSV 后,样式表里的字体和字号还在吗?

不在。CSV 只有时间与文字两栏,字体、字号、描边、阴影和边距都没有落点;留在文字里的只有片段级的强调标签,例如 <i>、<b>、<u> 与 <font color="…">。

SSA 转 CSV 后,屏幕定位会保留吗?

不会。\pos、\an、\move 这些位置指令在离开 SSA 时就被丢掉,每条字幕回到播放器的默认位置;对多数播放器来说,就是画面底部居中。

SSA 转 CSV 后,卡拉OK 的逐字计时去哪了?

计时没了,字还在。\k、\kf、\ko 标记的是每个音节什么时候亮;CSV 记不了一行内部的时刻,所以标记被去掉,音节作为普通文字进入正文。

SSA 转 CSV 后,时间码会舍到毫秒吗?

不会,也不需要。SSA 的时间只到百分秒,0:00:04.13 写成 00:00:04.130 是补零而不是四舍五入;同一时刻仍然在同一位置,2.9 秒的字幕仍然是 2.9 秒。

SSA 转 CSV 后,一条两行字幕怎么放?

放在同一个 text 单元格里,两行之间是真换行,整个单元格按 CSV 规则加双引号。两行仍然属于同一条字幕,播放器会一起显示。

SSA 转 CSV 会保留 Comment: 行和 [Script Info] 吗?

都不会。只有 Dialogue: 行会变成字幕;[Script Info] 里的设置、样式表、Comment: 行、[Fonts] 与 [Graphics] 全部丢掉。标题也没有地方放,CSV 没有标题字段。

相关工具