SRT 转 JSON
或者粘贴字幕文本
这次转换会改变什么
这个方向不会丢失内容 —— 源格式的每一项特性在目标格式里都有地方可去。
这份清单来自这两种格式的能力矩阵,而不是你加载的这份具体文件。如果具体文件用到了格式允许、但矩阵没有建模的特性,可能会丢得更多。
这一页把字幕变成结构化数据:一份 JSON 文档,逐条列出 cue 的起止时间与文本。适合交给脚本、做 diff,或者放进版本库。
schema 是本站自有的,刻意做小:一个版本号加一个 cues 数组,时间用整数毫秒而不是时间码。最细的精度是一毫秒,整数不会因为逗号或点的书写约定被读错。没有格式的行是普通字符串;带斜体、粗体或颜色的行变成对象,文本之外还有一个 tags 数组,每个标签记录类型与覆盖的字符区间。
把这个文件转回去能拿回字幕,所以往返本身就是一次校验。它不依赖第三方库,也没有隐藏元数据;整个方向不丢信息。
多个文件可以一次拖入,队列串行处理、随时可取消,结果打包成 ZIP;转换在浏览器里完成,文件不上传。一条两行字幕仍在同一条 cue 的 lines 数组里,两个元素属于同一条字幕;cue 的 id 按顺序生成,读回时不需要它。输出统一为 UTF-8、Unix 换行、无 BOM。
示例
一份典型的 SRT 文件转成 JSON
输入
1
00:00:01,000 --> 00:00:03,500
Hello there.
2
00:00:03,500 --> 00:00:06,000
<i>Whispering</i> now.
And a second line.
3
00:00:06,000 --> 00:00:09,250
<b>Bold</b> statement.
输出
{
"version": 1,
"cues": [
{
"id": "1",
"start": 1000,
"end": 3500,
"lines": [
"Hello there."
]
},
{
"id": "2",
"start": 3500,
"end": 6000,
"lines": [
{
"text": "Whispering now.",
"tags": [
{
"kind": "italic",
"start": 0,
"end": 10
}
]
},
"And a second line."
]
},
{
"id": "3",
"start": 6000,
"end": 9250,
"lines": [
{
"text": "Bold statement.",
"tags": [
{
"kind": "bold",
"start": 0,
"end": 4
}
]
}
]
}
]
}
这个方向没有丢东西:时间、文本与行内标签都能从 JSON 还原。
同一转换遇到一份脏文件
输入
1
0:00:01,00 --> 0:00:03,500
<B>Bold</B> and <I>italic</I>.
2
00:00:03,500 --> 00:00:06,000
3
00:00:08,000 --> 00:00:09,000
Last one.
输出
{
"version": 1,
"cues": [
{
"id": "1",
"start": 1000,
"end": 3500,
"lines": [
{
"text": "Bold and italic.",
"tags": [
{
"kind": "bold",
"start": 0,
"end": 4
},
{
"kind": "italic",
"start": 9,
"end": 15
}
]
}
]
},
{
"id": "2",
"start": 3500,
"end": 6000,
"lines": []
},
{
"id": "3",
"start": 8000,
"end": 9000,
"lines": [
"Last one."
]
}
]
}
空行、混合换行与多余空白不会改变 schema;可疑条目被修复或记进有损说明,产物仍是合法 JSON。
常见问题
SRT 转 JSON 用的是什么 schema?
本站自有的小 schema:一个版本号加一个 cues 数组,每条 cue 有 id、start、end(整数毫秒)与 lines。不依赖第三方库,也没有隐藏字段。
SRT 转 JSON 为什么用毫秒而不是时间码?
整数毫秒可以直接比较、排序和相加,不需要先解析字符串;逗号或点的书写约定也就不会把时间读错。
SRT 转 JSON 后斜体字怎么表示?
带格式的行变成对象,包含 text 与 tags 数组;每个 tag 记录类型和它在文本里覆盖的起始、结束位置。
SRT 转 JSON 后还能转回字幕吗?
能。把 JSON 转回 SRT 或其它格式时,时间与格式标签都会还原,往返本身可以用来检查文件有没有改坏。
SRT 转 JSON 会保留字幕顺序吗?
会,按起始时间升序。原文件乱序时,产物是排好序的数组。
SRT 转 JSON 的文件能直接交给脚本用吗?
可以。读 cues 数组,把 start 与 end 当数字用,行是字符串或带 text 字段的对象,不需要额外解析器。