Synchronized Accessible Media Interchange
微软 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> <P Class=ENCC>
- 1 · 文件头
样式表:每种语言一个类,带有它的
lang和播放器显示的Name。第一个类是播放器默认使用的语言。 - 2 · 同步点
时刻,以视频开始后的毫秒数表示。
- 3 · 字幕
每种语言一个段落。字幕会一直显示,直到该类的下一个同步点出现;
用于将其清空。
时间
同步点只有开始时间,没有其他内容。字幕会在同一语言的下一条字幕开始,或遇到空白字幕时结束,因此每一段停顿都需要自己的同步点。
结束标签可以省略。 微软自己的示例既不写 <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
- 每条字幕的文字和换行
- 斜体、粗体、下划线、删除线和颜色
- 译文,作为独立的语言保存
- 说话人,以 Source 行的形式保存
- 开始和结束时间,精确到毫秒,并按顺序排列
- 字幕在屏幕上的位置:SAMI 没有画面上的位置
- 字体、字号和边距
- 注音
- 配音、说话人的脸和颜色
保存 .usfx 项目即可保留属于 Subtitld 的内容。
打开 SAMI 文件
Subtitld 可以打开 .smi 和 .sami,并会:
- 像浏览器读取 HTML 那样读取 SAMI:标签大写或小写、有无结束标签、属性是否加引号、同步点顺序错乱、段落外的文字;
- 读取每种语言:第一种作为字幕原文,其他的作为译文;
- 保留斜体、粗体、下划线、删除线和颜色,无论来自标签还是样式表;
- 把 Source 行作为说话人,便于配音;
- 让最后一条字幕在文件
Metrics所指示的视频结束处结束,若没有指示则在四秒后结束; - 解码任意编码,包括 CP949。
导出 SAMI
依次点击 导出,再选择 字幕 和 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 年夏天发布了 SAMI,属于其无障碍工作的一部分:在电脑上提供字幕,服务于聋人和听力障碍者。
微软的规范用不换行空格来清空字幕。FFmpeg 会丢弃包含它的同步点,因此当另一种语言仍在显示时,Subtitld 会写入一个空段落。
许多韩文文件用国家而不是语言来命名类:如 KRCC,而微软的示例则是 ENUSCC。
相关格式
在 Subtitld 中打开它,连同视频一起,在波形上重新打轴。