VTT 转 LRC
或者粘贴字幕文本
这次转换会改变什么
有 4 项会被丢弃或需要你决定
- 时间
字幕条的结束时间(输出格式只记录字幕条何时开始)
- 样式
全部样式(粗体、斜体、颜色、描边、阴影)
- 精度
时间精度——输出的时间刻度更粗,因此每个时间戳都会四舍五入到最接近的 10 毫秒
- 格式专有内容
源格式保留在字幕条之外的内容(非字幕块、文件头文字、单条字幕的设置、被注释掉的事件)——目标格式没有地方存放它们
这份清单来自这两种格式的能力矩阵,而不是你加载的这份具体文件。如果具体文件用到了格式允许、但矩阵没有建模的特性,可能会丢得更多。
把 WebVTT 转成 LRC,是把带结束时间的字幕压成歌词:歌词播放器只关心一句什么时候开始唱,不关心什么时候结束。
LRC 的每行是 `[mm:ss.xx]` 加文本,没有 cue 序号,也没有文件头。产物里每一行都自带时间戳;WebVTT 里两行的字幕会变成两行、共用同一个时间戳,这是 LRC 表示“这两句属于同一条”的方式。
代价集中在时间与样式两处。结束时间没有落点:播放器会让一行一直留到下一行开始,所以每条 cue 的结束时刻都会被丢弃,开始时刻原样保留。精度也降了一档——LRC 写到百分秒,`00:00:04.126` 取整成 `[00:04.13]`,每条最多挪 5 毫秒;如果这些字幕还要和别的文件对齐,这就是唯一不精确的地方。样式则全部丢掉:`<b>`、`<i>` 以及文件 `STYLE` 块里的规则都没有地方放,每一行都写成纯文本。`NOTE`/`STYLE`/`REGION` 块与 cue setting 同样没有落点。
cue 会按开始时间排序,乱序的文件会被排好。整季文件一次拖入,串行、可取消、打包成 ZIP;文件不上传,断网也能继续转换。
示例
一份典型的 VTT 转成 LRC
输入
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>.
输出
[00:01.00]Hello there.
[00:04.50]Second line with italics.
这份产物丢掉了结束时间、样式、精度与格式私有内容;其余部分逐行一致。
同一转换遇到一份不规范但可读的输入
输入
a stray comment line
cue-id-1
00:00:01.000 --> 00:00:02.000
No header, two lines before the timecode.
输出
[00:01.00]No header, two lines before the timecode.
真实文件里常见的损坏:混合换行、散落的空白、留空的字段。可以对照上面那份干净样例,看看解析器能容忍到什么程度。
常见问题
VTT 转 LRC 后,每条字幕的结束时间去哪了?
被丢掉了。LRC 只记录一行什么时候开始,歌词播放器会让这一行一直留到下一行开始,所以结束时刻在 LRC 里是多余的。开始时间则原样保留,一秒不差。
VTT 转 LRC 时时间码为什么会动?
LRC 存到百分之一秒,WebVTT 存到千分之一秒,所以 `00:00:04.126` 会取整成 `[00:04.13]`,每条最多挪 5 毫秒。顺序不变、时长不拉伸,只是这一层取整没法避免。
VTT 里两行的字幕,转成 LRC 后是几行?
两行,而且共用同一个时间戳。这是 LRC 表达“这两句属于同一条字幕”的写法:同一个时刻起两句歌词,播放器会一起显示。
VTT 时间码后的 align 和 position 在 LRC 里有对应写法吗?
没有。LRC 不存定位,连行内样式都不存,所以 `align:start`、`position:10%` 这类 setting 会被丢弃。需要摆放位置时,LRC 不是合适的产物。
VTT 转 LRC 会保留粗体和斜体吗?
不会。LRC 的每一行都是纯文本,`<b>`、`<i>` 这类标签以及 `STYLE` 块里的规则都没有落点,字符本身不受影响,但强调完全消失。
VTT 转 LRC 后 cue 的顺序会变吗?
会按开始时间排序,最早的在前。原始文件如果乱序,产物会替你排好;这改的是结构不是内容,是有意为之。