SMI 转 JSON
或者粘贴字幕文本
这次转换会改变什么
有 1 项会被丢弃或需要你决定
- 格式专有内容
源格式保留在字幕条之外的内容(非字幕块、文件头文字、单条字幕的设置、被注释掉的事件)——目标格式没有地方存放它们
这份清单来自这两种格式的能力矩阵,而不是你加载的这份具体文件。如果具体文件用到了格式允许、但矩阵没有建模的特性,可能会丢得更多。
SMI 转 JSON 输出本站的结构化中间表示:每个 cue 有 `id`、`start`、`end`(整数毫秒)和 `lines` 数组,适合再喂给脚本、做批量检查,或作为自己程序的输入。
这一对只丢格式私有内容。`<STYLE>` 块、`<TITLE>`、`Class=ENCC` 不会映射到 JSON 的 `title` 或 `styles` 字段,两个字段会是空的;行内强调则会进入 `lines` 的 `tags` 数组,不会被当成正文文本。
时间是精确的:SMI 的 `Start=4126` 原样写成 `4126`,不经过时间码字符串,所以不存在舍入。两条 SMI 行仍然属于同一个 cue,只是变成 `lines` 里的两项;`<P> ` 的清屏块没有文字,不会生成 cue。
产物是 UTF-8 文本,cue 按开始时间升序。转换在浏览器内完成,不上传、不注册;批量文件串行处理、可取消,下载时打包成一个 ZIP。
示例
一份典型的 SMI 文件转成 JSON
输入
<SAMI>
<HEAD>
<STYLE TYPE="text/css">
<!--
P { text-align: center; font-family: Arial; }
.ENCC { Name: English; lang: en-US; }
-->
</STYLE>
</HEAD>
<BODY>
<SYNC Start=1000>
<P Class=ENCC>Hello there.
<SYNC Start=3000>
<P Class=ENCC>
<SYNC Start=3500>
<P Class=ENCC>How are you?<br>Fine, thanks.
<SYNC Start=6000>
<P Class=ENCC>
</BODY>
</SAMI>
输出
{
"version": 1,
"cues": [
{
"start": 1000,
"end": 3000,
"lines": [
"Hello there."
]
},
{
"start": 3500,
"end": 6000,
"lines": [
"How are you?",
"Fine, thanks."
]
}
]
}
产物只丢了格式私有内容;时间与文字逐行一致。
同一转换遇到一份脏文件
输入
<SAMI>
<HEAD>
<TITLE>Episode 1</TITLE>
<STYLE TYPE="text/css">
<!--
.ENCC { Name: English; }
-->
</STYLE>
</HEAD>
<BODY>
<sync start="00:00:02,500">
<P Class=ENCC>Line one<br>Line two
<sync start=9000>
<P Class=ENCC>Tom & Jerry
<SYNC Start=12000>
<P Class=ENCC>
</BODY>
</SAMI>
输出
{
"version": 1,
"cues": [
{
"start": 2500,
"end": 9000,
"lines": [
"Line one",
"Line two"
]
},
{
"start": 9000,
"end": 12000,
"lines": [
"Tom & Jerry"
]
}
]
}
真实文件常见的损坏:BOM、混合换行、无效的 Start、散落的文本。解析器不抛异常,读不出的部分记进有损说明。
常见问题
SMI 转 JSON 后,`<STYLE>` 块会进入 `styles` 字段吗?
不会。JSON 产物虽然有 `title` 与 `styles` 字段,但这两个字段对 SMI 是空的,因为 CSS 与 `<TITLE>` 没有映射规则。
SMI 转 JSON 的 `start` 和 `end` 是什么单位?
整数毫秒。`Start=4126` 直接写成 `4126`,不经过时间码字符串,所以没有舍入误差。
SMI 的行内斜体在 JSON 里还能找到吗?
能。它属于文字本身,会进入对应行的 `tags` 数组,而不是被拼进 `lines` 的纯文本里。
SMI 转 JSON 时,一条两行字幕会变成两个 cue 吗?
不会。它仍是一个 cue,两行分别是 `lines` 数组里的两项。
SMI 转 JSON 会保留空白的清屏块吗?
不会。`<P> ` 没有文字,只用于清屏,不产生 cue;它出现在文件里的位置会作为读取过程的一部分被记录。
SMI 转 JSON 后能再转回 SMI 吗?
可以,但反向有它自己的损失清单:JSON 转 SMI 会丢样式与卡拉OK,因为 JSON 文件里没有这些信息。