跳到主要内容
SubtitleMatrix

VTT 转 TTML

格式转换WebVTT(VTT)
或者粘贴字幕文本

这次转换会改变什么

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

  • 格式专有内容

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

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

TTML 是广播与流媒体常用的 XML 字幕格式。把 WebVTT 转成 TTML,产物是一份结构规整的 XML 文档:XML 声明、`<tt>` 根元素、`<body>`,每条字幕是一个带 `begin` 和 `end` 的 `<p>`。

时间精度两边都到毫秒,`00:00:04.126` 原样写成 `begin="00:00:04.126"`,不取整也不挪位。两条时间都跟着字幕走,所以一条 cue 多长,产物里还是多长。两行的字幕用 `<br/>` 连接;行内斜体写成 `<span tts:fontStyle="italic">`。整份产物是合法 XML,可以直接喂给解析器。

丢掉的是 WebVTT 的文档级结构:`WEBVTT` 头部与注释、`NOTE`/`STYLE`/`REGION` 块,以及时间码后的 `align:start`、`position:10%` 等 setting。TTML 当然有能力表达样式与区域,但它用的是另一套模型(样式属性、`region`、`ttp:` 时间表达),这次转换不做猜测式的映射,而是在有损说明里如实列出。

cue 按开始时间排序。整季文件可一次拖入,队列串行、可中途取消、结果打成一个 ZIP;解析与写出都在浏览器里,源码不上传。

示例

一份典型的 VTT 转成 TTML

输入

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

输出

<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling">
  <body>
<p begin="00:00:01.000" end="00:00:04.000">Hello there.</p>
<p begin="00:00:04.500" end="00:00:08.000">Second line with <span tts:fontStyle="italic">italics</span>.</p>  </body>
</tt>

这份产物丢掉了格式私有内容;其余部分逐行一致。

同一转换遇到一份不规范但可读的输入

输入

a stray comment line
cue-id-1
00:00:01.000 --> 00:00:02.000
No header, two lines before the timecode.

输出

<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling">
  <body>
<p begin="00:00:01.000" end="00:00:02.000">No header, two lines before the timecode.</p>  </body>
</tt>

真实文件里常见的损坏:混合换行、散落的空白、留空的字段。可以对照上面那份干净样例,看看解析器能容忍到什么程度。

常见问题

VTT 转 TTML 的时间精度会变吗?

不会。两边都写到毫秒,`00:00:04.126` 原样写进 `begin` 与 `end` 属性,不取整、不挪位,一条 cue 的时长也保持不变。

VTT 里两行的字幕在 TTML 里怎么表示?

用 `<br/>` 连接,仍然在同一个 `<p>` 里,也就是同一条字幕。归属关系保留,播放器会分两行显示;这是 TTML 写硬换行的标准写法。

VTT 里的 <i> 斜体在 TTML 产物里是什么样子?

写成 `<span tts:fontStyle="italic">斜体</span>`,`tts` 是 TTML 的样式命名空间。文字本身不变,强调从行内标签换成了样式属性。

VTT 的 NOTE、STYLE、REGION 块转成 TTML 后还在吗?

不在。TTML 有自己的样式与区域模型,但没有与 WebVTT 的 `STYLE`、`REGION` 一一对应的写法,这次转换不做猜测式映射,所以这些块连同 `align`、`position` setting 一起记为丢失。

VTT 转 TTML 会丢掉哪些内容?

只有格式私有内容:头部、注释、样式块、区域定义、cue 标识符与 cue setting。正文、换行结构与毫秒时间全部保留,这也是这一页的损失清单比其他方向短的原因。

VTT 转 TTML 的产物是完整的 XML 文档吗?

是。产物以 `<?xml version="1.0" encoding="UTF-8"?>` 开头,根元素是带命名空间的 `<tt>`,下面嵌 `<body>` 与逐条的 `<p>`,可以直接交给 XML 解析器。

相关工具