跳到主要内容
SubtitleMatrix

MicroDVD 转 JSON

格式转换MicroDVD(SUB)
或者粘贴字幕文本

选项

时间按哪个帧率计算。在格式页面里,这是 MicroDVD 需要的值,因为它把时间存成帧号。在帧率页面里,它是文件当初对应的速率 —— 字幕是按这个版本做的 —— 而页面的第二个框填你要拿它配套的视频速率。常见的有 23.976、24、25、29.97、30、50、59.94 和 60。填错会让整条时间轴偏移;在帧率页面里,偏移是按比例发生的,而不是一个固定的量。

这次转换会改变什么

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

  • 帧率

    源文件以帧号存储时间——每个时间戳都取决于你提供的帧率

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

这一页把 MicroDVD 写成 JSON:顶层是 `version` 与 `cues`,每条 cue 有 `start`、`end`(整数毫秒)和 `lines` 数组。帧号除以帧率得到毫秒,`|` 拆成 `lines` 里的两条记录——一条字幕的两行仍然属于同一条 cue。

帧率按页面框、文件声明、默认 25 的顺序取,产物里还会写一个 `"fps": 25` 记录这次换算用的是哪个值。要分清两件事:那个数字是本次换算的记录,JSON 的时间轴本身仍然是毫秒,读回来时不需要它再除一次。所以在能力层面,帧率仍然被记为丢失——JSON 没有帧号这一维。

样式、定位、卡拉OK都不在 MicroDVD 里,这一页也不会凭空造出来。真正丢的只有帧率;时间精确到毫秒,`|` 的分组也保住了。产物按开始时间升序,UTF-8、LF、无 BOM;源文件是 UTF-16 或 Windows 单字节编码时先解码再读,结果面板会说明。

一次拖入多个文件时串行处理,中途可以取消,结果打成一个 ZIP。整个过程在浏览器里跑,`.sub` 不会离开本机。

示例

一份典型的 MicroDVD 文件转成 JSON

输入

{1}{1}25
{100}{150}The quick brown fox jumps over the lazy dog.
{200}{260}Faster than|the last one.

输出

{
  "version": 1,
  "fps": 25,
  "cues": [
    {
      "start": 4000,
      "end": 6000,
      "lines": [
        "The quick brown fox jumps over the lazy dog."
      ]
    },
    {
      "start": 8000,
      "end": 10400,
      "lines": [
        "Faster than",
        "the last one."
      ]
    }
  ]
}

产物丢掉了帧率;其余逐行一致。

同一转换遇到一份脏文件

输入

{1}{1}23.976
{0100}{0150}Leading zeros in the frame numbers.
[INFORMATION]
{300}{340}An unrecognized line above was kept in place.
{400}{450}Trailing spaces are kept.   

输出

{
  "version": 1,
  "fps": 25,
  "cues": [
    {
      "start": 4000,
      "end": 6000,
      "lines": [
        "Leading zeros in the frame numbers."
      ]
    },
    {
      "start": 12000,
      "end": 13600,
      "lines": [
        "An unrecognized line above was kept in place."
      ]
    },
    {
      "start": 16000,
      "end": 18000,
      "lines": [
        "Trailing spaces are kept.   "
      ]
    }
  ]
}

真实文件常见的损坏:混合换行、BOM、散布的空白、带前导零的帧号、认不出的行。可以对照上面那份干净样例,看解析器能容忍到什么程度。

常见问题

MicroDVD 转 JSON 后,`start` 和 `end` 是什么单位?

整数毫秒。第 100 帧在 25 fps 下是 4000,第 150 帧是 6000;不会出现 `4.0` 这样的秒数,也不会带单位字符串。

MicroDVD 转 JSON 的产物里为什么有 `"fps": 25`?

它记录这次换算用的是哪个帧率,方便你回查。JSON 的 cue 时间是毫秒,读文件时不需要再拿它做除法;帧号本身没有被保留,所以能力层面仍把帧率列为丢失。

MicroDVD 的 `|` 在 JSON 里怎么表示?

变成 `lines` 数组里的两条字符串,顺序不变。它们仍属于同一条 cue,播放器会把两行一起显示。

MicroDVD 转 JSON 时帧率框留空会怎样?

文件第一行有声明就用声明,没有就用默认的 25,并在有损说明里写明。默认值被用上时整条时间轴都是按 25 猜的,对 23.976 或 24 的素材都会偏。

MicroDVD 里带前导零的帧号 `{0100}` 转 JSON 会变成什么?

换算成同一个时刻,即 4000 毫秒。前导零只是原文拼法,不改变帧号的值,也不会被写进 JSON。

JSON 再转回 MicroDVD 会丢掉什么?

样式、定位、卡拉OK与帧率。JSON 本身能带行内标签,但 MicroDVD 的样式能力是 none,写回去只剩文字与帧号。

相关工具