MicroDVD 转 JSON
或者粘贴字幕文本
选项
时间按哪个帧率计算。在格式页面里,这是 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,写回去只剩文字与帧号。