Synchronized Accessible Media Interchange

打开保存HTML多语言

微软 1998 年为 Windows Media Player 推出的字幕格式:基于 HTML,每条字幕前有一个同步点,样式表中的类对应语言,因此一个文件可以容纳多种语言。它在其他地方很少见,但在韩国仍是常用的字幕文件。

概览

扩展名.smi
媒体类型未注册
规范微软,Understanding SAMI 1.0(2001 年,2003 年更新)。公开,无授权费用。
时间精度毫秒
文本编码未声明。较旧的韩文文件多为 CP949,较新的为 UTF-8;Subtitld 两者都能检测。
样式HTML 的行内标签和 CSS:斜体、粗体、下划线、删除线、颜色、字体
位置画面上没有位置:字幕显示在它们自己的区域中
说话人一行 Source(ID=Source),显示在字幕上方
语言一个文件可包含多种语言,每种语言对应一个 CSS 类
在容器中不支持。与视频同名、放在视频旁边的独立文件。

文件的结构

这是一份 HTML 文档:先是列出各语言的样式表,然后是字幕每次变化时的同步点(sync)。

<SAMI><HEAD><STYLE><!--
.KRCC {lang:ko-KR;}
.ENCC {lang:en-US;}
--></STYLE></HEAD><BODY>
<SYNC Start=23000>
<P Class=KRCC>넌 정말 못됐어.
<P Class=ENCC>You're a jerk.
<SYNC Start=24500>
<P Class=KRCC>&nbsp;
<P Class=ENCC>&nbsp;
  1. 1 · 文件头

    样式表:每种语言一个类,带有它的 lang 和播放器显示的 Name。第一个类是播放器默认使用的语言。

  2. 2 · 同步点

    时刻,以视频开始后的毫秒数表示。

  3. 3 · 字幕

    每种语言一个段落。字幕会一直显示,直到该类的下一个同步点出现;&nbsp; 用于将其清空。

时间

同步点只有开始时间,没有其他内容。字幕会在同一语言的下一条字幕开始,或遇到空白字幕时结束,因此每一段停顿都需要自己的同步点。

结束标签可以省略。 微软自己的示例既不写 <P> 的结束标签,也不写 <SYNC> 的结束标签,播放器两种都能读取。Windows Media Player 可能要求标签使用大写,示例中就是这样写的。

样式

SAMI 的文字是 HTML,样式表是 CSS。一条字幕依次应用 P 的样式、所属类的样式、它自己的 style 属性,最后是其中的标签。

写法 效果 在 Subtitld 中
<I>、<EM> 斜体 保留
<B>、<STRONG> 粗体 保留
<U>、<S>、<STRIKE> 下划线、删除线 保留
<FONT color="#FFD700"> 文字颜色 保留
color、font-style、font-weight、text-decoration 相同效果,来自样式表或 style 属性 保留
<BR> 换行 保留
<FONT face>、font-size、margin 字体、字号、间距 不保留
<RUBY>…<RT> 文字上方的注音 保留文字,不保留注音

语言

每个类代表一种语言。播放器会用它们的 Name 提供选择,默认显示第一个定义的语言,除非用户另行选择;没有类的段落则无论选择哪种语言都会显示。一个韩文文件可以同时包含英文和韩文,由观众自行选择。

Subtitld 打开含有多种语言的文件时,第一种语言作为字幕的原文,其他语言则作为其译文,对应到与之重叠最多的那条字幕上。导出原文和译文时,会把它们写成两种语言,译文只出现在它有对应字幕的地方。

说话人

<SYNC Start=23000>
<P Class=ENCC ID=Source>Celia
<P Class=ENCC>You're a jerk.

带有 ID=Source 的段落不是字幕。它会在字幕上方的一行中标明谁在说话,并一直显示,直到被另一个 Source 段落替换。Subtitld 会把它读取为其上方每条字幕的说话人,需要时也会以这种方式写入说话人。

各播放器的处理不同。 FFmpeg 及基于它的播放器会把 Source 行以斜体显示在字幕上方;MPlayer 则把它并入字幕的第一行。把名字放在文字前面(Celia:…)则在所有播放器上都一样。

Subtitld 中的 SAMI

保存在 .smi 中
  • 每条字幕的文字和换行
  • 斜体、粗体、下划线、删除线和颜色
  • 译文,作为独立的语言保存
  • 说话人,以 Source 行的形式保存
  • 开始和结束时间,精确到毫秒,并按顺序排列
无处可存
  • 字幕在屏幕上的位置:SAMI 没有画面上的位置
  • 字体、字号和边距
  • 注音
  • 配音、说话人的脸和颜色

保存 .usfx 项目即可保留属于 Subtitld 的内容。

打开 SAMI 文件

Subtitld 可以打开 .smi 和 .sami,并会:

  • 像浏览器读取 HTML 那样读取 SAMI:标签大写或小写、有无结束标签、属性是否加引号、同步点顺序错乱、段落外的文字;
  • 读取每种语言:第一种作为字幕原文,其他的作为译文;
  • 保留斜体、粗体、下划线、删除线和颜色,无论来自标签还是样式表;
  • 把 Source 行作为说话人,便于配音;
  • 让最后一条字幕在文件 Metrics 所指示的视频结束处结束,若没有指示则在四秒后结束;
  • 解码任意编码,包括 CP949。

导出 SAMI

Subtitld 的导出对话框,已选择 SAMI,原文和译文作为两种语言,说话人以 Source 行的形式写入,编码为 CP949

依次点击 导出,再选择 字幕 和 SAMI,可以设置以下选项:

  • 文本原文、译文,或两者都作为两种语言。
  • 说话人名字不写出;放在文字前(Thom:…);或作为 Source 行,这是 SAMI 自己的方式。
  • 格式保留,或删除。
  • 偏移时间把所有字幕整体提前或推后相同的时长。
  • 编码UTF-8(带或不带字节序标记)、UTF-16、Windows-1252,或适用于老版韩文播放器的 CP949。
  • 换行符Linux 和 macOS 用的 LF,或 Windows 用的 CRLF。

文件遵循微软示例的 SAMI 1.0 写法,标签大写:每种语言一个类,字幕开始处为一个同步点,结束处为一个空白同步点;格式写作 <I>、<B>、<U>、<S> 和 <FONT color>。

让文件与视频同名:tears-of-steel.smi 与 tears-of-steel.mp4 放在一起。Windows Media Player 能这样找到 .smi(找不到 .sami),大多数播放器也是如此。

趣闻

1998

微软于 1998 年夏天发布了 SAMI,属于其无障碍工作的一部分:在电脑上提供字幕,服务于聋人和听力障碍者。

&nbsp;

微软的规范用不换行空格来清空字幕。FFmpeg 会丢弃包含它的同步点,因此当另一种语言仍在显示时,Subtitld 会写入一个空段落。

KRCC

许多韩文文件用国家而不是语言来命名类:如 KRCC,而微软的示例则是 ENUSCC。

相关格式

有 .smi 需要修正吗?

在 Subtitld 中打开它,连同视频一起,在波形上重新打轴。

下载 Subtitld