VTT 转 TTML
或者粘贴字幕文本
这次转换会改变什么
有 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 解析器。