跳到主要内容
SubtitleMatrix

SBV 转 JSON

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

这次转换会改变什么

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

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

这一页把 SBV 转成本站的 JSON schema:给脚本和流水线读的字幕表示,时间不做成时间码字符串,而是整数毫秒。

结构是 `version` 加一个 `cues` 数组。每条 cue 有 `start`、`end`(整数毫秒)和 `lines` 数组;SBV 的 `0:00:04.126` 读进来是 `4126`。两行的字幕在 `lines` 里就是两项,不会被拼成一段。schema 里有一个 `id` 字段,用来放有标识符的格式(比如 WebVTT 的 `intro`);SBV 没有标识符语法,所以这里的条目不会凭空多出 id。

这一方向没有损失:SBV 能表达的东西——时间、文本、行——schema 都装得下,所以有损说明是空的。反方向则不是:JSON 转 SBV 会丢掉样式、定位与卡拉OK,因为 SBV 只存 cue。也就是说,这份产物本身不丢东西,代价只在你转回去的时候出现。

脏输入照样能读:CRLF、时间码前带制表符、结尾没有换行,都不会报错。整季文件批量转换、可随时取消、最后打成一个 ZIP;解析和写出都在浏览器里,文件不上传。

示例

一份典型的 SBV 文件转成 JSON

输入

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.

输出

{
  "version": 1,
  "cues": [
    {
      "start": 1000,
      "end": 3500,
      "lines": [
        "The quick brown fox."
      ]
    },
    {
      "start": 4000,
      "end": 6250,
      "lines": [
        "Jumps over the lazy dog."
      ]
    },
    {
      "start": 7000,
      "end": 9000,
      "lines": [
        "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.

输出

{
  "version": 1,
  "cues": [
    {
      "start": 2000,
      "end": 4000,
      "lines": [
        "Carriage-return line endings."
      ]
    },
    {
      "start": 6000,
      "end": 8000,
      "lines": [
        "Indented timecode, no final newline."
      ]
    }
  ]
}

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

常见问题

SBV 转 JSON 为什么是无损的?

SBV 只有 cue:两个时间和一段文本。这个 schema 的每条 cue 恰好有 `start`、`end` 与 `lines`,能完整接住这三样,所以没有东西会消失,有损说明是空的。

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

是 `4126`,整数毫秒。全站统一用整数毫秒做时间单位,所以产物里没有时间码字符串,也不需要取整——两边本来都到毫秒。

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

放在同一条 cue 的 `lines` 数组里,占两项。归属关系保留,下游脚本能分辨“同一条里的两行”和“两条不同的字幕”。

SBV 转 JSON 后 cue 里有 id 吗?

没有。schema 确实有 `id` 字段,但它用来放源格式自带的标识符——SBV 没有这种写法,所以条目里只有 `start`、`end` 和 `lines`。WebVTT 转 JSON 时那个字段才会出现。

SBV 转 JSON 的产物结构是什么?

一个 `version`(当前是 1)加一个 `cues` 数组,每条 cue 是一个对象,字段是整数毫秒与字符串数组。产物是纯 JSON,没有注释也没有尾逗号,可以直接交给脚本。

整季 SBV 能一次转成 JSON 吗?

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

相关工具