跳到主要内容
SubtitleMatrix

LRC 转 JSON

格式转换歌词(LRC)
或者粘贴字幕文本

选项

当源文件没有结束时间时使用(纯文本、LRC)。输出里的时间轴是在这里生成的,不是转换来的,所以填多少就是多少。

这次转换会改变什么

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

  • 时间

    字幕条的结束时间——源文件不记录这些时间,因此输出中的结束时间是生成的,而不是转换来的

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

LRC 转 JSON 输出结构化数据:`version`、可选 `title`,以及 `cues` 数组;每个 cue 有 `start`、`end`(整数毫秒)和 `lines`。适合再喂给脚本或做批量处理。

结束时间由下一行开始推断,最后一行用页面设定时长补,报告会标明这是生成值。多个同时间戳的歌词行会进入同一个 cue 的 `lines`,因此双语歌词不会被拆成两条。

`[ti:]` 写入 JSON 的 `title`;`[ar:]` 艺人与 `[al:]` 专辑没有对应字段,会丢;`[offset:]` 读取但不应用。产物按开始时间升序,原文件乱序会被纠正,空歌词行会保留成 `lines` 为空的 cue。

输出 UTF-8 JSON,转换在浏览器里完成,不上传、不注册,适合需要进一步脚本处理的批量场景;任务可以取消,结果打包下载。

示例

一份典型的 LRC 文件转成 JSON

输入

[ti:Sample Song]
[ar:Some Artist]
[length:00:41.00]
[offset:+250]
[00:12.00]First line of the song.
[00:15.30]Second line.
[00:15.30]Second line, translated.
[00:18.00]
[00:21.50]Final line.

输出

{
  "version": 1,
  "title": "Sample Song",
  "cues": [
    {
      "start": 12000,
      "end": 15300,
      "lines": [
        "First line of the song."
      ]
    },
    {
      "start": 15300,
      "end": 18000,
      "lines": [
        "Second line.",
        "Second line, translated."
      ]
    },
    {
      "start": 18000,
      "end": 21500,
      "lines": [
        ""
      ]
    },
    {
      "start": 21500,
      "end": 23500,
      "lines": [
        "Final line."
      ]
    }
  ]
}

产物丢了结束时间;开始时间由 LRC 的百分秒写成整数毫秒,文字逐行一致。

同一转换遇到一份脏文件

输入

[ar:Some Artist]
[0:05.5]Leading zero omitted, one decimal.
[00:07]Second with no centiseconds.
[00:03.00]Out of order.
[00:07.00][00:09.00]Repeated chorus line.
[00:12.00]

输出

{
  "version": 1,
  "cues": [
    {
      "start": 3000,
      "end": 5500,
      "lines": [
        "Out of order."
      ]
    },
    {
      "start": 5500,
      "end": 7000,
      "lines": [
        "Leading zero omitted, one decimal."
      ]
    },
    {
      "start": 7000,
      "end": 9000,
      "lines": [
        "Second with no centiseconds.",
        "Repeated chorus line."
      ]
    },
    {
      "start": 9000,
      "end": 12000,
      "lines": [
        "Repeated chorus line."
      ]
    },
    {
      "start": 12000,
      "end": 14000,
      "lines": [
        ""
      ]
    }
  ]
}

真实文件常见的损坏:BOM、混合换行、缺前导零的时间戳、重复的副歌行。解析器不抛异常,读不出的部分记进有损说明。

常见问题

LRC 转 JSON 后,`[ti:]` 标题写在哪?

写进 JSON 顶层的 `title` 字段;如果文件没有 `[ti:]`,这个键不出现。

LRC 转 JSON 的 `end` 值是怎么来的?

取下一行的开始;最后一行没有后继,用页面设定的时长补,报告会标明这个值是生成的。

LRC 的 `[ar:]` 艺人在 JSON 里能保留吗?

不能。JSON 的 cue 模型没有艺人字段,`[ar:]` 与 `[al:]` 都不会进入产物;`[offset:]` 读取但不应用。

LRC 转 JSON 时,两行同时间戳的歌词会合并吗?

会。它们进入同一个 cue 的 `lines` 数组,因此双语歌词不会被拆成两条时间相同的字幕。

LRC 转 JSON 后,时间是什么单位?

整数毫秒。`[00:12.00]` 写成 `12000`,`[00:15.30]` 写成 `15300`。

LRC 转 JSON 会重排乱序的歌词行吗?

会,按 `start` 升序输出;JSON 数组的顺序就是产物里的顺序。

相关工具