JSON 转 VTT
或者粘贴字幕文本
这次转换会改变什么
有 3 项会被丢弃或需要你决定
- 样式
除粗体和斜体之外的全部样式(颜色、描边、阴影、边距)
- 定位
屏幕定位(每条字幕条都会回到默认位置)
- 卡拉 OK
卡拉OK计时(逐音节高亮)
这份清单来自这两种格式的能力矩阵,而不是你加载的这份具体文件。如果具体文件用到了格式允许、但矩阵没有建模的特性,可能会丢得更多。
JSON 转 VTT 写出以 `WEBVTT` 开头的文件:每条字幕先写一个标识行(示例里是顺序编号),然后是 `00:00:04.126 --> …` 的时间码和正文。JSON 的整数毫秒与 VTT 的毫秒精度对齐,边界原样搬过去,不做舍入。
行内强调保留:斜体、粗体、下划线、颜色写成 `<i>`、`<b>`、`<u>`、`<font color>`;丢的是 JSON 的 `styles` 表(字体、字号、描边、阴影、边距)、每条 cue 的屏幕坐标和卡拉OK计时。标识行只是给脚本看的名片,任何播放器都不显示它。
两行的 cue 输出成上下两行,仍是一条;条目按 start 升序。结构松散的 JSON 不会被整份拒绝:能读的照常转换,读不出来的条目跳过并计数。
全部在浏览器里完成,文件不上传;批量时多个结果打包下载。
示例
一份典型的 JSON 文件转成 VTT
输入
{
"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"
}
]
}
输出
WEBVTT
1
00:00:00.000 --> 00:00:02.000
Hello world.
Second line.
2
00:00:02.500 --> 00:00:04.000
Plain line.
<i>Styled</i> line.
3
00:00:04.500 --> 00:00:06.000
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" }
]
输出
WEBVTT
00:00:00.000 --> 00:00:01.000
First.
00:00:01.000 --> 00:00:02.000
Second.
00:00:02.000 --> 00:00:03.000
Third.
真实文件常有混合换行、多余空白、空字段,也会混入非 cue 的数组元素。可以对照上面那份干净样例,看看解析器能容忍到什么程度。
常见问题
JSON 转 VTT 会保留哪些行内样式?
粗体、斜体、下划线和颜色写成 `<b>`、`<i>`、`<u>`、`<font color>`,浏览器会照常渲染。JSON 的全局样式表在 VTT 里没有落点,会被丢掉。
JSON 转 VTT 的屏幕定位为什么不见了?
这一页的 VTT 产物不写位置设置,JSON 里每条 cue 的坐标因此没有落点,转换后回到播放器选择的默认位置。
JSON 转 VTT 的卡拉OK计时会保留吗?
不会。卡拉OK标记的是行内音节何时亮起,VTT 产物里没有这种写法;音节文字保留,只会带上通用的 `<c>` 容器,不再有逐个点亮的时长。
JSON 转 VTT 的时间码会舍入吗?
不会。JSON 的 4126 毫秒写成 `00:00:04.126`,两边分辨率相同,转换中没有精度损失。
JSON 转 VTT 时每条字幕前面的标识行是什么?
是 cue 的标识符,只在文件内部使用,播放器不会显示。它不参与计时,也不影响正文;示例里用的是顺序编号。
JSON 转 VTT 的输出用什么编码?
输出固定是 UTF-8、Unix 换行符、不带 BOM。输入 JSON 若是别的编码,会先解码并在结果面板里说明。