LRC 转 TTML
或者粘贴字幕文本
选项
当源文件没有结束时间时使用(纯文本、LRC)。输出里的时间轴是在这里生成的,不是转换来的,所以填多少就是多少。
这次转换会改变什么
有 1 项会被丢弃或需要你决定
- 时间
字幕条的结束时间——源文件不记录这些时间,因此输出中的结束时间是生成的,而不是转换来的
这份清单来自这两种格式的能力矩阵,而不是你加载的这份具体文件。如果具体文件用到了格式允许、但矩阵没有建模的特性,可能会丢得更多。
LRC 转 TTML 把每行歌词写成 XML 的 `<p begin="…" end="…">`,时间形如 `00:00:12.000`,多行用 `<br/>`,文档带 XML 声明。TTML 适合广播与流媒体的结构化字幕流程。
结束时间取下一行的开始,最后一行用页面设定时长补;报告会说明哪一条终点是生成的。TTML 能到毫秒,LRC 只到百分秒,但这里不涉及舍入,只涉及“终点原本不存在”。
`[ti:]`、`[ar:]`、`[al:]`、`[offset:]` 在 TTML 产物里没有对应结构;`offset` 读取但不应用。同时刻的多行歌词会进入同一个 `<p>`,用 `<br/>` 分开,空歌词行会生成一个没有文字的 `<p>`。
输出 UTF-8 XML,按开始时间排序。转换在浏览器里完成,不上传、不注册;批量处理可取消,最后打包下载。
示例
一份典型的 LRC 文件转成 TTML
输入
[ti:Sample Song]
[ar:Some Artist]
[length:00:41.00]
[offset:+250]
[00:12.00]First line of the song.
[00:15.30]Second line.
[00:15.30]Second line, translated.
[00:18.00]
[00:21.50]Final line.输出
<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling">
<body>
<p begin="00:00:12.000" end="00:00:15.300">First line of the song.</p>
<p begin="00:00:15.300" end="00:00:18.000">Second line.<br/>Second line, translated.</p>
<p begin="00:00:18.000" end="00:00:21.500"></p>
<p begin="00:00:21.500" end="00:00:23.500">Final line.</p> </body>
</tt>
产物丢了结束时间;开始时间与文字逐行一致,空歌词行保留。
同一转换遇到一份脏文件
输入
[ar:Some Artist]
[0:05.5]Leading zero omitted, one decimal.
[00:07]Second with no centiseconds.
[00:03.00]Out of order.
[00:07.00][00:09.00]Repeated chorus line.
[00:12.00]输出
<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling">
<body>
<p begin="00:00:03.000" end="00:00:05.500">Out of order.</p>
<p begin="00:00:05.500" end="00:00:07.000">Leading zero omitted, one decimal.</p>
<p begin="00:00:07.000" end="00:00:09.000">Second with no centiseconds.<br/>Repeated chorus line.</p>
<p begin="00:00:09.000" end="00:00:12.000">Repeated chorus line.</p>
<p begin="00:00:12.000" end="00:00:14.000"></p> </body>
</tt>
真实文件常见的损坏:BOM、混合换行、缺前导零的时间戳、重复的副歌行。解析器不抛异常,读不出的部分记进有损说明。
常见问题
LRC 转 TTML 后,每行歌词写成什么元素?
`<p begin="…" end="…">`,放在 `<body>` 里;多行歌词用 `<br/>` 分隔。
LRC 转 TTML 的 `end` 属性是文件里原有的吗?
不是。它由下一行的开始推断,最后一行用页面设定时长补,报告会说明哪一条是生成的。
LRC 的 `[offset:]` 在 TTML 里会被应用吗?
不会。偏移读取后保留原样,产物时间与文件字面一致。
LRC 转 TTML 后,双语歌词会变成两个 `<p>` 吗?
不会。同一时间戳的多行放在同一个 `<p>` 里,用 `<br/>` 分开。
LRC 转 TTML 的时间精度够吗?
够。TTML 支持毫秒,LRC 的百分秒写成毫秒值,例如 `[00:12.00]` 变成 `00:00:12.000`。
TTML 转回 LRC 会丢什么?
会丢时间轴、样式、定位、精度与格式私有内容;LRC 只保留开始时间与纯文字。