SMI 字幕格式
这种格式能表达什么
- 文本样式
- 粗体与斜体
- 屏幕定位
- 是
- 卡拉 OK 计时
- 否
- 字幕条内换行
- 是
- 时间轴
- 每条字幕都有开始与结束时间
- 时间精度
- 1 毫秒
- 时间以帧号存储
- 否
- 从右到左的文字
- 是
示例
一份典型的 SAMI 文件,以及从中读出的内容
文件
<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>
<SYNC Start=3500>
<P Class=ENCC>How are you?<br>Fine, thanks.
<SYNC Start=6000>
<P Class=ENCC>
</BODY>
</SAMI>
从中读出了什么
2 cues, 3 lines of text
Start=1000 = 00:00:01.000 → 00:00:03.000
Hello there.
[Class=ENCC]
Start=3500 = 00:00:03.500 → 00:00:06.000
How are you?
Fine, thanks.
[Class=ENCC]
Outside the cues:
head a <STYLE> block with CSS for the paragraphs, kept as it came in
cue ends the next <SYNC> tag — a SAMI file writes no end time of its own
clearing a <P> block blanks the screen; the two here are kept as clearing blocks, not turned into cues右侧不是转换产物,而是本站从左栏文件里读出的内容,也是这个文件任何一次转换的起点。
一份别扭的 SAMI 文件,仍然能读出什么
文件
<SAMI>
<BODY>
<SYNC Start=abc>
<P Class=ENCC>this block's start cannot be read
<SYNC Start=2000>
<SYNC Start=4000>
<P>no attributes here<br>second line
<SYNC Start="6000">
some loose text before any P
</BODY>
</SAMI>从中读出了什么
3 cues, 3 lines of text
Start=2000 = 00:00:02.000 → 00:00:04.000
(no text)
Start=4000 = 00:00:04.000 → 00:00:06.000
no attributes here
second line
Start=6000 = 00:00:06.000 → 00:00:08.000
some loose text before any P
Outside the cues:
head no <STYLE> block and no <TITLE> — just the <SAMI> and <BODY> tags
cue ends the next <SYNC> tag; the last cue has none after it, so its end time was given a default
loose text text between two <SYNC> tags that belongs to no <P> is kept and attached to the cue open at that point
Reported while reading — repaired or skipped, never silently:
1 × SYNC blocks whose start time could not be read (they were skipped)
1 × the last cue has no following timestamp, so its end time was generated真实文件会带 BOM、Windows 换行、读不出开始时间的 SYNC、没有 start 的块;这些都不会抛错,读不出的部分会被报告,而不是静默丢弃。
把 SAMI (SMI) 转成其他格式
每一个都完全在你的浏览器里运行。标签标明了那个方向要付出什么代价,打开之前就能看到。
转换为此格式
- SubRip (SRT) → SAMI (SMI)
- WebVTT (VTT) → SAMI (SMI)
- Advanced SubStation Alpha (ASS) → SAMI (SMI)
- SubStation Alpha (SSA) → SAMI (SMI)
- YouTube SBV → SAMI (SMI)
- LRC Lyrics → SAMI (SMI)
- MicroDVD → SAMI (SMI)
- TTML (Timed Text) → SAMI (SMI)
- SubtitleMatrix JSON → SAMI (SMI)
- Plain Text (TXT) → SAMI (SMI)
- CSV Spreadsheet → SAMI (SMI)
SMI(SAMI,Microsoft Synchronized Accessible Media Interchange)是 RealPlayer 与 Windows Media Player 时代的字幕格式。它把字幕写成一段 HTML:每个 `<SYNC Start=1000>` 标签代表一个时刻,后面的 `<P Class=ENCC>` 块就是从那一刻起显示在屏幕上的文字。时间戳以毫秒为单位,`Start=4126` 就是 4.126 秒。
这一页是这个格式的说明书,不是转换器。上面的能力表把 SMI 能表达和不能表达的东西逐行列出:它能写行内粗体、斜体、下划线和颜色,也能在 `<STYLE>` 块里给段落写 CSS;但字号、描边、边距与卡拉OK逐字计时都不在文件里,而由播放器决定。表里写“否”的那一行,就是转成 SMI 时会丢掉的东西。
SMI 的结束时间不是显式字段:一条字幕的终点就是下一个 `<SYNC>` 的开始。`<P> ` 这样的空段落常被用来清屏,读取时会认成清屏块,而不会当成一条有文字的字幕。语言轨靠 Class 名区分,常见的是 ENCC(英语)与 KRCC(韩语)。
下面 11 个方向每个都有自己的有损清单:SMI 转 SRT 丢样式与定位,转 ASS 或 SSA 还会丢毫秒精度,转 LRC 连结束时间一起丢,转 TXT 则连时间轴都不留。先看清单再选目标,比先选格式再发现丢了东西要好。
所有转换都在浏览器里完成,文件不上传、不需要注册;一次拖入整季文件会逐条串行处理,可以中途取消,最后打包成一个 ZIP 下载。
常见问题
SMI 文件里的 `<SYNC Start=…>` 和 `<P Class=…>` 分别表示什么?
SYNC 标记一个时刻,后面的段落从那一刻起显示到下一个 SYNC 出现;P 是那一刻的文字块,Class 指向 head 里的一条 CSS 规则,常见的是 ENCC(英语)或 KRCC(韩语)。
SMI 的结束时间是文件里写好的吗?
不是。SAMI 没有结束字段,一条字幕的终点就是下一个 `<SYNC>` 的开始;`<P> ` 这样的空段落常被用来提前清屏。
SMI 能保存哪些样式?
行内的 `<b>`、`<i>`、`<u>`、`<font color="…">` 属于文字本身,能保存;字号、描边、边距与卡拉OK计时不在文件里,由播放器决定,head 的 `<STYLE>` 块只能提供 CSS。
SMI 的时间精度是多少?
毫秒。`Start=4126` 就是 4.126 秒,数值精确,不会像 ASS 那样只到百分秒。
SMI 转成哪种格式损失最小?
转 JSON 或 TTML 只丢格式私有内容;转 SRT、CSV、SBV 还会丢样式与定位;转 LRC 连结束时间一起丢。每一页自己的有损清单写了具体项。