VTT 转 CSV
或者粘贴字幕文本
这次转换会改变什么
有 2 项会被丢弃或需要你决定
- 样式
全部样式(粗体、斜体、颜色、描边、阴影)
- 格式专有内容
源格式保留在字幕条之外的内容(非字幕块、文件头文字、单条字幕的设置、被注释掉的事件)——目标格式没有地方存放它们
这份清单来自这两种格式的能力矩阵,而不是你加载的这份具体文件。如果具体文件用到了格式允许、但矩阵没有建模的特性,可能会丢得更多。
把 WebVTT 转成 CSV,多半是给登记表、审校清单或表格工具用的:字幕从播放器里拿出来,变成一行一条、可以排序筛选的记录。
产物有表头 `start,end,text`,每条 cue 一行,开始与结束时间都在。两行的字幕不会被拆成两条记录,而是放在同一个 `text` 单元格里,按 CSV 的规矩加引号;词本身原样保留,行内标记(`<i>`、`<b>`、`<font color="…">`)也留在文本里,因为这是 cue 级格式唯一还能携带的样式。
真正丢掉的是 WebVTT 的文档级结构:`WEBVTT` 头部与注释、`NOTE`/`STYLE`/`REGION` 块、cue 标识符,以及时间码后面的 `align`、`position` 之类的 setting。CSV 存的是记录,不是文档,这些都没有落点。时间精度不受影响:两边都写到毫秒,`00:00:04.126` 一个字符都不改。cue 会按开始时间排序,原始文件如果顺序是乱的,产物会替你排好。
输出固定为 UTF-8、Unix 换行、不带 BOM,输入是什么编码都在读入时解码。整季文件可以一次拖进来,串行处理、可取消、结果打成一个 ZIP;全程在浏览器里,文件不上传。
示例
一份典型的 VTT 转成 CSV
输入
WEBVTT
intro
00:00:01.000 --> 00:00:04.000
Hello there.
00:00:04.500 --> 00:00:08.000 align:start position:10%
Second line with <i>italics</i>.
输出
start,end,text
00:00:01.000,00:00:04.000,Hello there.
00:00:04.500,00:00:08.000,Second line with <i>italics</i>.
这份产物丢掉了样式与格式私有内容;其余部分逐行一致。
同一转换遇到一份不规范但可读的输入
输入
a stray comment line
cue-id-1
00:00:01.000 --> 00:00:02.000
No header, two lines before the timecode.
输出
start,end,text
00:00:01.000,00:00:02.000,"No header, two lines before the timecode."
真实文件里常见的损坏:混合换行、散落的空白、留空的字段。可以对照上面那份干净样例,看看解析器能容忍到什么程度。
常见问题
VTT 转 CSV 后,粗体和斜体还在吗?
在,但只以文本标签的形式留在 `text` 列里——`<i>`、`<b>`、`<u>`、`<font color="…">` 原样过去。丢的是 WebVTT 在文件级声明的那些东西:字体、字号、描边、阴影与边距,CSV 没有地方放它们。
VTT 转 CSV 时 NOTE、STYLE、REGION 这三类块去哪了?
被丢掉了。CSV 存的是 cue 的行,不是文档,`WEBVTT` 头部、注释、样式块、区域定义以及每条 cue 的 `align`、`position` setting 都没有对应字段。cue 本身——文本与起止时间——完整保留。
VTT 里两行的字幕,转成 CSV 后是一个单元格还是两行记录?
一个单元格。两行文本留在同一个 `text` 字段里,中间是换行,并按 CSV 的要求整体加引号。这样两行的归属关系不会丢,播放器仍然把它们当成同一条字幕。
VTT 转 CSV 的时间码精度会变吗?
不会。两边都写到毫秒,`00:00:04.126` 原样输出,一个字符都不差。VTT 的时间码本来就是 `00:00:04.126` 这个写法,CSV 的列里也用同一套写法。
VTT 转 CSV 后,cue 的顺序会被重排吗?
会按开始时间排序,最早的在前。如果原始 VTT 的 cue 是乱序的,产物会替你排好;这改的是文件结构而不是内容,是有意为之。
VTT 转 CSV 的产物用什么编码和换行?
固定 UTF-8、Unix 换行、不带 BOM,与源文件原来的编码无关。输入若是 UTF-16 或 Windows 单字节编码,会在读入阶段解码,结果面板会提示这件事。