跳到主要内容
SubtitleMatrix

SMI 转 SSA

格式转换SAMI(SMI)
或者粘贴字幕文本

这次转换会改变什么

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

  • 精度

    时间精度——输出的时间刻度更粗,因此每个时间戳都会四舍五入到最接近的 10 毫秒

  • 格式专有内容

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

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

SMI 转 SSA 与转 ASS 同源:每条 SYNC 块变成 `[Events]` 里的一行 `Dialogue:`,正文中的 `<br>` 变成 `\N`,行内强调映射成 SSA 覆盖码。SSA 是 ASS 的前身,样式表结构略有不同。

SSA 的时间只写到百分秒(`0:00:04.13`),SMI 写到毫秒,因此每个时间码四舍五入到 10 毫秒,单条最多移动 5 毫秒;不拉伸、不重排。这是这一对唯一影响时间轴的地方。

`<STYLE>` 块、`<TITLE>` 和 `Class=ENCC` 这类段落标记会被丢弃,因为 SSA 存的是 cue 而不是一份文档。样式表本身使用播放器默认值,转换不会把 SAMI 的 CSS 翻译过去。

输出是 UTF-8、LF、无 BOM;批量任务串行处理、支持取消并打包 ZIP。文件全程在浏览器里,任何内容都不会上传。

示例

一份典型的 SMI 文件转成 SSA

输入

<SAMI>
<HEAD>
<STYLE TYPE="text/css">
<!--
P { text-align: center; font-family: Arial; }
.ENCC { Name: English; lang: en-US; }
-->
</STYLE>
</HEAD>
<BODY>
<SYNC Start=1000>
<P Class=ENCC>Hello there.
<SYNC Start=3000>
<P Class=ENCC>&nbsp;
<SYNC Start=3500>
<P Class=ENCC>How are you?<br>Fine, thanks.
<SYNC Start=6000>
<P Class=ENCC>&nbsp;
</BODY>
</SAMI>

输出

[Script Info]
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
Dialogue: 0,0:00:01.00,0:00:03.00,Default,,0,0,0,,Hello there.
Dialogue: 0,0:00:03.50,0:00:06.00,Default,,0,0,0,,How are you?\NFine, thanks.

产物丢了毫秒精度与格式私有内容;行内强调与文字逐行保留。

同一转换遇到一份脏文件

输入

<SAMI>
<HEAD>
<TITLE>Episode 1</TITLE>
<STYLE TYPE="text/css">
<!--
.ENCC { Name: English; }
-->
</STYLE>
</HEAD>
<BODY>
<sync start="00:00:02,500">
<P Class=ENCC>Line one<br>Line two
<sync start=9000>
<P Class=ENCC>Tom &amp; Jerry
<SYNC Start=12000>
<P Class=ENCC>&nbsp;
</BODY>
</SAMI>

输出

[Script Info]
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
Dialogue: 0,0:00:02.50,0:00:09.00,Default,,0,0,0,,Line one\NLine two
Dialogue: 0,0:00:09.00,0:00:12.00,Default,,0,0,0,,Tom &amp; Jerry

真实文件常见的损坏:BOM、混合换行、无效的 Start、散落的文本。解析器不抛异常,读不出的部分记进有损说明。

常见问题

SMI 转 SSA 与转 ASS 的损失一样吗?

这一对同样是毫秒精度与格式私有内容:SSA 时间写到百分秒,`Start=4126` 四舍五入成 `0:00:04.13`,CSS 与 `<TITLE>` 丢弃。

SMI 转 SSA 后,行内粗体还在吗?

在。`<P>` 里的粗体、斜体、下划线与颜色会映射成 SSA 覆盖码;丢的是文件级样式表。

SMI 转 SSA 的 `Marked` 字段填什么?

SSA 的 `Dialogue:` 行用 `Marked` 字段代替 SRT 的编号,转换时按输出顺序填写,与 SMI 的 SYNC 顺序对应。

SMI 的一条两行字幕在 SSA 里怎么放?

放在同一条 cue 里,用 `\N` 连接两行,播放器一起显示。

SMI 转 SSA 会保留 `<STYLE>` 里的 CSS 吗?

不会。SSA 有自己的样式表,但转换不会把 SAMI 的 CSS 翻译过去;产物使用默认样式,原 CSS 作为格式私有内容丢弃。

SMI 转 SSA 支持批量吗?

支持。多个文件串行处理,可中途取消,结果打成一个 ZIP;整个过程在浏览器里完成,文件不上传。

相关工具