跳到主要内容
SubtitleMatrix

SBV 转 VTT

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

这次转换会改变什么

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

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

SBV 转 VTT 是把 YouTube 那种最简写法升格成网页字幕:补上 `WEBVTT` 头部,时间码改成 `00:00:04.126 --> 00:00:08.000` 的箭头写法,可以交给 HTML5 的 `<track>` 直接加载。

这一方向没有损失。SBV 存的是 cue——两个时间加文本——VTT 能把它们连同换行一起装下,所以时间、文本、行序全都不变。毫秒也不打折:`0:00:04.126` 变成 `00:00:04.126`,一个字符都不差。VTT 允许在每条 cue 上方写一行自由形式的标识符,播放器不显示它;这个位置是可选的,产物不会平白给你编一个。

反过来就要付代价了:VTT 转回 SBV 会丢掉样式与格式私有内容——`WEBVTT` 头、`NOTE`/`STYLE`/`REGION` 块、cue 标识符、时间码后的 `align`、`position` 这类 setting,SBV 都没有落点。这份产物本身不丢东西,代价只在你转回去的时候出现。

cue 会按开始时间排序,乱序文件会被排好。整季文件批量转换、可取消、打成一个 ZIP;输出 UTF-8、Unix 换行、无 BOM;文件不上传。

示例

一份典型的 SBV 文件转成 VTT

输入

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.

输出

WEBVTT

00:00:01.000 --> 00:00:03.500
The quick brown fox.

00:00:04.000 --> 00:00:06.250
Jumps over the lazy dog.

00:00:07.000 --> 00:00:09.000
Two lines here.
And a second one.

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

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

输入

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.

输出

WEBVTT

00:00:02.000 --> 00:00:04.000
Carriage-return line endings.

00:00:06.000 --> 00:00:08.000
Indented timecode, no final newline.

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

常见问题

SBV 转 VTT 有损失吗?

没有。SBV 只有时间、文本与换行,WebVTT 能完整装下它们,还多出一个可选的 cue 标识符位置,所以正文与毫秒时间原样保留,有损说明是空的。

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

是 `00:00:04.126`,箭头前面的那一条时间。补上小时的两位前导零,时刻本身不变,不取整也不挪位。

SBV 转 VTT 后,每条 cue 上方那行是什么?

那是 WebVTT 的可选标识符,播放器不会显示。SBV 没有标识符语法,所以这次转换不往里填任何名字——位置留着,需要的话你事后自己写。

SBV 里两行的字幕在 VTT 里怎么写?

仍然是两行,一上一下,在同一个 cue 里。归属关系保留,播放器会分两行显示;WebVTT 允许一条 cue 有多行文本。

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

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

SBV 转 VTT 的产物能直接放进网页吗?

能。补上了 `WEBVTT` 头部,时间码是 `-->` 写法,交给 HTML5 的 `<track>` 就能加载;产物固定 UTF-8、Unix 换行、不带 BOM,适合直接上线。

相关工具