VTT 转 SMI
或者粘贴字幕文本
这次转换会改变什么
有 1 项会被丢弃或需要你决定
- 格式专有内容
源格式保留在字幕条之外的内容(非字幕块、文件头文字、单条字幕的设置、被注释掉的事件)——目标格式没有地方存放它们
这份清单来自这两种格式的能力矩阵,而不是你加载的这份具体文件。如果具体文件用到了格式允许、但矩阵没有建模的特性,可能会丢得更多。
要把 WebVTT 交给只认 SAMI(SMI)的老播放器或旧课件系统,就得换成 `<SYNC>` 那套写法。SAMI 是 HTML 样子的格式:屏幕内容由 `<SYNC Start=毫秒>` 不断替换。
产物里每条字幕是一个 `<SYNC Start=…>` 标签加一个 `<P>`,紧接着再接一个 `<P> `——因为 SYNC 会替换屏幕上原有的内容,需要显式地把屏幕清空,否则上一条会一直挂着。两行的字幕用 `<br>` 连接。时间写到毫秒,`00:00:04.126` 就是 `Start=4126`,不取整。
这一方向的损失只有一类:WebVTT 的文档级结构。`WEBVTT` 头部与注释、`NOTE`/`STYLE`/`REGION` 块、cue 标识符、时间码后的 `align` 与 `position` setting,在 SAMI 里都没有对应写法。SAMI 自己有一个 `<STYLE>` 段放 CSS,产物里会写一份居中的默认样式,但它与 WebVTT 的 `STYLE` 块不是一一对应的翻译。
正文、换行和 cue 顺序原样保留,乱序文件会按开始时间排好。整季文件批量转换、可取消、打包成 ZIP;解析与写出都在浏览器里,文件不上传。
示例
一份典型的 VTT 转成 SMI
输入
WEBVTT
intro
00:00:01.000 --> 00:00:04.000
Hello there.
00:00:04.500 --> 00:00:08.000 align:start position:10%
Second line with <i>italics</i>.
输出
<SAMI>
<HEAD>
<STYLE TYPE="text/css">
<!--
P { text-align: center; font-family: Arial, sans-serif; }
-->
</STYLE>
</HEAD>
<BODY>
<SYNC Start=1000>
<P>Hello there.
<SYNC Start=4000>
<P>
<SYNC Start=4500>
<P>Second line with <i>italics</i>.
<SYNC Start=8000>
<P>
</BODY>
</SAMI>
这份产物丢掉了格式私有内容;其余部分逐行一致。
同一转换遇到一份不规范但可读的输入
输入
a stray comment line
cue-id-1
00:00:01.000 --> 00:00:02.000
No header, two lines before the timecode.
输出
<SAMI>
<HEAD>
<STYLE TYPE="text/css">
<!--
P { text-align: center; font-family: Arial, sans-serif; }
-->
</STYLE>
</HEAD>
<BODY>
<SYNC Start=1000>
<P>No header, two lines before the timecode.
<SYNC Start=2000>
<P>
</BODY>
</SAMI>
真实文件里常见的损坏:混合换行、散落的空白、留空的字段。可以对照上面那份干净样例,看看解析器能容忍到什么程度。
常见问题
VTT 转 SMI 后,每条字幕后面为什么跟着一个 <P> ?
因为 SAMI 的 `<SYNC>` 是整体替换屏幕内容,不是叠加。每条字幕后面补一个空段落,等于显式把屏幕清空;少了它,上一条字幕会一直留到下一次 SYNC 才被换掉。
VTT 转 SMI 的时间写到毫秒还是百分秒?
毫秒。`00:00:04.126` 写成 `Start=4126`,不取整也不挪位;SAMI 的 SYNC 用整数毫秒,两边精度本来就是对得上的。
VTT 里两行的字幕在 SMI 里怎么表示?
用 `<br>` 连接,仍然是同一个 `<P>` 下的两行,也仍然是同一条字幕。归属关系不会丢,播放器会分两行显示。
VTT 的 NOTE、STYLE、REGION 块转成 SMI 后还在吗?
不在。这三类构造在 SAMI 里没有对应写法,`align`、`position` 这类 cue setting 也一样。SAMI 自己的 `<STYLE>` 段是 CSS,产物会写一份默认样式,但这不是从 WebVTT 的块翻译过来的。
VTT 转 SMI 会丢掉哪些东西?
只有格式私有内容:头部、注释、样式块、区域定义、cue 标识符与 cue setting。正文、两行结构与毫秒时间都完整保留,这也是这一页的有损清单比其他方向短的原因。
整季 VTT 一次转成 SMI 可行吗?
可以。多个文件一次拖入,串行处理,中途能取消,结束后打成一个 ZIP 下载;每份产物都带同样的默认 `<STYLE>` 段。全程在浏览器里,文件不上传。