JSON 转 LRC
或者粘贴字幕文本
这次转换会改变什么
有 5 项会被丢弃或需要你决定
- 时间
字幕条的结束时间(输出格式只记录字幕条何时开始)
- 样式
全部样式(粗体、斜体、颜色、描边、阴影)
- 定位
屏幕定位(每条字幕条都会回到默认位置)
- 卡拉 OK
卡拉OK计时(逐音节高亮)
- 精度
时间精度——输出的时间刻度更粗,因此每个时间戳都会四舍五入到最接近的 10 毫秒
这份清单来自这两种格式的能力矩阵,而不是你加载的这份具体文件。如果具体文件用到了格式允许、但矩阵没有建模的特性,可能会丢得更多。
JSON 转 LRC 把字幕变成歌词行:每条 cue 的起始时间写成 `[mm:ss.cc]`,正文跟在方括号后面。LRC 只记“这一行什么时候开始”,没有结束时间字段,所以每条 cue 的 end 都在这一步被丢掉,由下一行的开始时间接管。
时间精度从毫秒降到百分秒:4126 写成 `[00:04.13]`,舍入到最近的 10 毫秒,单条最多偏 5 毫秒。产物按起始时间升序排列;一条两行的 cue 会写成两行时间戳相同的歌词,表示它们属于同一句。
样式、屏幕定位和卡拉OK都没有落点:`styles` 表、行内标签、坐标与音节计时全部去掉,音节文字保留为普通文本。JSON 文档的 title 会写成 `[ti:…]` 元数据行,这是 JSON 在 LRC 里少数还能保留的额外信息。
批量队列与本机处理照旧:文件不离开浏览器,多个结果一起打包下载。
示例
一份典型的 JSON 文件转成 LRC
输入
{
"version": 1,
"title": "Fixture: typical",
"fps": 25,
"styles": {
"Default": {
"name": "Default",
"fontFamily": "Arial",
"fontSize": 20,
"primaryColor": "#FFFFFF",
"bold": false,
"italic": false
}
},
"generator": "subtitlematrix fixtures",
"cues": [
{
"id": "1",
"start": 0,
"end": 2000,
"lines": [
"Hello world.",
"Second line."
],
"style": "Default",
"position": {
"x": 100,
"y": 200,
"align": "center"
}
},
{
"id": "2",
"start": 2500,
"end": 4000,
"lines": [
"Plain line.",
{
"text": "Styled line.",
"tags": [
{
"kind": "italic",
"start": 0,
"end": 6
}
]
}
]
},
{
"id": "3",
"start": 4500,
"end": 6000,
"lines": [
"Roger: I am here."
],
"speaker": "Roger"
}
]
}
输出
[ti:Fixture: typical]
[00:00.00]Hello world.
[00:00.00]Second line.
[00:02.50]Plain line.
[00:02.50]Styled line.
[00:04.50]Roger: I am here.
这份产物丢掉了结束时间、样式、定位、卡拉OK和毫秒精度;标题写成了 `[ti:]` 元数据。
同一转换遇到结构松散的 JSON
输入
[
{ "start": 0, "end": 1000, "lines": ["First."] },
{ "start": 1000, "end": 2000, "text": "Second." },
"not an object",
{ "start": 2000, "end": 3000, "lines": ["Third."], "class": "top" }
]
输出
[00:00.00]First.
[00:01.00]Second.
[00:02.00]Third.
真实文件常有混合换行、多余空白、空字段,也会混入非 cue 的数组元素。可以对照上面那份干净样例,看看解析器能容忍到什么程度。
常见问题
JSON 转 LRC 后,每条字幕的结束时间去哪了?
被丢掉了。LRC 只记录一行开始的时间,播放器会让这一行一直显示到下一行开始,所以结束时间是推导出来的,不需要写进文件。每条 JSON cue 的 start 原样保留。
JSON 转 LRC 的时间戳会被舍入吗?
会。LRC 只到百分秒,4126 毫秒写成 `[00:04.13]`,舍入到最近的 10 毫秒,最多偏 5 毫秒;顺序和时长关系都不会被拉伸。
JSON 转 LRC 会保留粗体、斜体和颜色吗?
不会。LRC 只存裸文本,行内标签和 `styles` 表都没有落点,每一行都按普通文字写出;文字本身不变。
JSON 转 LRC 的卡拉OK计时还能用吗?
不能。卡拉OK标记的是行内音节何时亮起,LRC 没有记录“行内某一刻”的语法,标记会被去掉,音节作为普通歌词文本保留。
JSON 转 LRC 时两行一条的字幕怎么表示?
写成两行带相同时间戳的歌词,例如两行都以 `[00:02.50]` 开头。这是 LRC 表示“这两行属于同一句”的方式。
JSON 里的 title 在 LRC 产物里放在哪?
写成 `[ti:标题]` 元数据行,通常排在文件最前面。示例里的 `Fixture: typical` 就输出为 `[ti:Fixture: typical]`。