跳到主要内容
SubtitleMatrix

VTT 转 SBV

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

这次转换会改变什么

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

  • 样式

    全部样式(粗体、斜体、颜色、描边、阴影)

  • 格式专有内容

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

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

SBV 是 YouTube 早期导出的字幕格式:一行两个时间码、逗号分隔,下面是正文,没有序号也没有文件头。VTT 转 SBV 基本是把 WebVTT 的写法还原成这种最简结构。

两边的时间精度是一致的,都写到毫秒,所以 `00:00:04.126` 出来是 `0:00:04.126`,不取整也不挪位。一条 cue 仍是前后两个时间,中间用逗号;两行的字幕仍是两行,行与行的归属关系保留。行内的 `<i>`、`<b>`、`<u>`、`<font color>` 这类文字级标签会跟着正文进产物,因为它们本来就写在文本里。

丢的是 WebVTT 的文档层:`WEBVTT` 头部、`NOTE`/`STYLE`/`REGION` 块、cue 标识符,以及时间码后面的 `align:start`、`position:10%` 等 setting。SBV 存的是 cue,不是文档,也没有样式表能放全局规则。这些会在有损说明里逐条列出,文件加载后还会告诉你实际丢了几处。

cue 会按开始时间排序,乱序文件会被排好。整季文件一次拖入,串行处理、可随时取消、最后打包成一个 ZIP;转换全程在本机浏览器里完成,文件不上传。

示例

一份典型的 VTT 转成 SBV

输入

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

输出

0:00:01.000,0:00:04.000
Hello there.

0:00:04.500,0:00:08.000
Second line with <i>italics</i>.

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

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

输入

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

输出

0:00:01.000,0:00:02.000
No header, two lines before the timecode.

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

常见问题

VTT 转 SBV 后,cue 的标识符(比如 intro)还在吗?

不在。SBV 的每条字幕只有一行时间码加正文,没有序号行,也没有标识符的写法,所以 `intro`、`sign-1` 这类名字会丢掉。

VTT 转 SBV 时毫秒会被取整吗?

不会。两边都写到毫秒,`00:00:04.126` 变成 `0:00:04.126`,只是少了小时的两位前导零。时长也一样,屏幕上待了 2.9 秒的 cue 还是 2.9 秒。

VTT 的 WEBVTT 头与 NOTE、STYLE、REGION 块转成 SBV 后呢?

都被丢弃。SBV 没有头部、没有块语法,也没有样式表;`WEBVTT` 那一行、注释块、样式块与区域定义都没有落点。cue 本身完整保留。

VTT 转 SBV 后,行内的粗体和斜体标签还在吗?

在。`<i>`、`<b>`、`<u>`、`<font color="…">` 是写在正文里的标签,SBV 不解析也不改写它们,所以原样跟着文本进产物。丢的是文件级声明的样式,不是这些标签。

VTT 时间码后的 align:start、position:10% 在 SBV 里怎么表示?

没有办法表示,会被丢弃。SBV 既没有 cue setting 也没有定位字段,屏幕上的位置完全由播放器决定,所以这些 setting 只会在有损说明里列出。

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

可以。一次拖入多个文件,队列串行处理,可随时取消,结束后打成一个 ZIP 下载。整个过程在浏览器里完成,字幕文件不会上传到任何地方。

相关工具