跳到主要内容
SubtitleMatrix

SBV 转 TTML

格式转换YouTube SBV
或者粘贴字幕文本

这次转换会改变什么

这个方向不会丢失内容 —— 源格式的每一项特性在目标格式里都有地方可去。

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

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

时间写进属性:SBV 的 `0:00:04.126` 变成 `begin="00:00:04.126"`,到毫秒,不取整也不挪位。两行的字幕用 `<br/>` 连接,仍然是一条字幕。整个产物是合法 XML,可以直接交给解析器或播放器。

为什么无损:SBV 存的是 cue——时间、文本、行——而 TTML 恰好能完整表达这三样。SBV 本身没有样式、定位、头部或块,所以没有东西会在转换中消失。反方向就要付代价了:TTML 转回 SBV 会丢掉样式、定位与格式私有内容,因为 SBV 只有 cue。

cue 会按开始时间排序,乱序文件会被排好。整季文件一次拖入,串行、可随时取消、结果打成一个 ZIP;输出 UTF-8、Unix 换行、无 BOM;解析和写出都在浏览器里,文件不上传。

示例

一份典型的 SBV 文件转成 TTML

输入

0:00:01.000,0:00:03.500
The quick brown fox.

0:00:04.000,0:00:06.250
Jumps over the lazy dog.

0:00:07.000,0:00:09.000
Two lines here.
And a second one.

输出

<?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:03.500">The quick brown fox.</p>
<p begin="00:00:04.000" end="00:00:06.250">Jumps over the lazy dog.</p>
<p begin="00:00:07.000" end="00:00:09.000">Two lines here.<br/>And a second one.</p>  </body>
</tt>

这一方向没有丢任何东西:左右两边逐行对照即可。

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

输入

0:00:02.000,0:00:04.000
Carriage-return line endings.

	0:00:06.000,0:00:08.000
Indented timecode, no final newline.

输出

<?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:02.000" end="00:00:04.000">Carriage-return line endings.</p>
<p begin="00:00:06.000" end="00:00:08.000">Indented timecode, no final newline.</p>  </body>
</tt>

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

常见问题

SBV 转 TTML 会有损失吗?

没有。SBV 只有时间、文本与换行,TTML 的 `<p>` 用 `begin`、`end` 与正文能把它们完整装下,所以有损说明是空的。

SBV 的 0:00:04.126 在 TTML 里是什么?

是 `begin="00:00:04.126"`。补上小时的两位前导零,写到毫秒;不取整、不挪位,一条 cue 的时长也保持不变。

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

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

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

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

SBV 转 TTML 后 cue 的顺序会变吗?

会按开始时间排序,最早的在前。原始文件如果乱序,产物会替你排好;这改的是文件结构而不是内容,是有意为之。

整季 SBV 一次转成 TTML 可以吗?

可以。多个文件一次拖入,队列串行处理,中途可以取消,结束后打成一个 ZIP 下载;每份产物都是独立的 XML 文档。全程在浏览器里,文件不上传。

相关工具