跳到主要内容
SubtitleMatrix

JSON 转 TXT

或者粘贴字幕文本

这次转换会改变什么

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

  • 时间

    整条时间轴(输出格式完全不记录时间)

  • 样式

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

  • 定位

    屏幕定位(每条字幕条都会回到默认位置)

  • 卡拉 OK

    卡拉OK计时(逐音节高亮)

  • 换行

    换行(多行字幕条会被合并成一行)

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

JSON 转 TXT 得到的是一份成段文字:时间轴、样式、定位和卡拉OK全部消失,每条 cue 的每一行变成一段里的一行。TXT 里没有任何时间字段,所以转换只保留文字本身和它们的先后顺序;没有 cue 边界,也没有开始与结束时间,任何下游工具都无从判断一行的时长。

这一点对下游有实际影响:一条两行的 cue 会写成上下两行,但文件不再说明它们属于同一条字幕——再读回来会变成两条。若后面还要做翻译或重新对轴,这个分组信息就已经不在了。

输出按 JSON 的 start 时间升序排列,所以“第 40 行”对应的是时间上第 40 条,而不是原文件里书写的顺序。行内标签、`styles` 表和坐标都不会以任何形式残留。

批量照常:整季文件串行转换,结果打包成一个 ZIP,浏览器内完成,不上传,每个源文件各自成一份 TXT。

示例

一份典型的 JSON 文件转成 TXT

输入

{
  "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"
    }
  ]
}

输出

Hello world.
Second line.
Plain line.
Styled line.
Roger: I am here.

这份产物丢掉了时间轴、样式、定位、卡拉OK和换行分组;只剩文字与顺序。

同一转换遇到结构松散的 JSON

输入

[
    { "start": 0, "end": 1000, "lines": ["First."] },
    { "start": 1000, "end": 2000, "text": "Second." },
    "not an object",
    { "start": 2000, "end": 3000, "lines": ["Third."], "class": "top" }
]

输出

First.
Second.
Third.

真实文件常有混合换行、多余空白、空字段,也会混入非 cue 的数组元素。可以对照上面那份干净样例,看看解析器能容忍到什么程度。

常见问题

JSON 转 TXT 后时间码去哪了?

TXT 没有时间码可写。转换只保留行序,所以原文件第 40 行仍是产物第 40 行,但没有任何字段说明它在屏幕上什么时候出现。

JSON 转 TXT 会保留加粗、斜体和颜色吗?

不会。TXT 只存裸文字,行内标签与 `styles` 表都没有落点,每一行都按普通文字写出;文字内容本身不变。

JSON 转 TXT 的屏幕定位还在吗?

不在。TXT 没有位置字段,每条 cue 存的坐标在这一步丢弃,产物里也没有任何等价信息可以恢复它。

JSON 转 TXT 时两行一条的字幕会变成几条?

文字上还是两行,但分组信息没了。再用 TXT 转回字幕格式时,两行会变成两条独立字幕,因为文件里没有任何标记说明它们属于同一条。

JSON 转 TXT 的排列顺序按什么决定?

按每条 cue 的 start 时间升序排列,最早的在前。如果原 JSON 的 cue 顺序是乱的,产物会先排好再逐行写出。

JSON 转 TXT 的输出用什么编码?

输出固定是 UTF-8、Unix 换行符、不带 BOM。输入 JSON 若是 UTF-16 或 Windows 单字节编码,会先解码并在结果面板里说明。

相关工具