SBV 转 TTML
或者粘贴字幕文本
这次转换会改变什么
这个方向不会丢失内容 —— 源格式的每一项特性在目标格式里都有地方可去。
这份清单来自这两种格式的能力矩阵,而不是你加载的这份具体文件。如果具体文件用到了格式允许、但矩阵没有建模的特性,可能会丢得更多。
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 文档。全程在浏览器里,文件不上传。