跳到主要内容
SubtitleMatrix

SMI 转 VTT

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

这次转换会改变什么

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

  • 定位

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

  • 格式专有内容

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

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

SMI 转 VTT 得到 WebVTT:`WEBVTT` 头,每条字幕一个时间行 `00:00:01.000 --> 00:00:03.000`,可以带一个播放器不显示的标识行。VTT 是网页 `<track>` 与多数现代播放器的默认格式。

两边的时间都精确到毫秒,所以 `Start=4126` 就是 `00:00:04.126`;多行字幕保持两行,仍属于同一条 cue,顺序按开始时间重排。

丢的是定位与格式私有内容。SAMI 用 `<P Class=ENCC>` 加 `<STYLE>` CSS 决定文字在屏幕上的位置与外观,VTT 没有等价的段落定位,`<TITLE>` 也不保留;行内强调 VTT 仍能表达,会跟文字一起留下。

输出 UTF-8、LF、无 BOM,输入若是 UTF-16 或 Windows 单字节会先解码。转换在本机浏览器完成,不上传、不注册,批量文件可取消并打成一个 ZIP。

示例

一份典型的 SMI 文件转成 VTT

输入

<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>

输出

WEBVTT

00:00:01.000 --> 00:00:03.000
Hello there.

00:00:03.500 --> 00:00:06.000
How are you?
Fine, 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>

输出

WEBVTT

00:00:02.500 --> 00:00:09.000
Line one
Line two

00:00:09.000 --> 00:00:12.000
Tom &amp; Jerry

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

常见问题

SMI 转 VTT 会丢定位吗?

会。SAMI 用 `<P Class=ENCC>` 加 `<STYLE>` CSS 决定位置,VTT 没有等价的段落定位字段,这部分会丢弃。

SMI 转 VTT 的时间轴精确吗?

精确到毫秒。`Start=4126` 写成 `00:00:04.126`,不四舍五入、不重排。

SMI 的 `<STYLE>` 块在 VTT 里能保留吗?

不能作为文件结构保留;`<TITLE>` 与段落 Class 也不保留。行内强调 VTT 仍能表达,所以会跟文字一起留下。

SMI 的一条两行字幕转成 VTT 是什么样?

同一个 cue 里的两行文字,仍是同一条字幕;VTT 可以给 cue 加标识行,但播放器不显示它。

SMI 转 VTT 后,乱序字幕会怎么处理?

按开始时间升序重排,产物第一条一定是时间最早的那条。

SMI 转 VTT 输出以什么开头?

以 `WEBVTT` 头开始,随后空一行再写第一条 cue;编码 UTF-8、LF、无 BOM。

相关工具