跳到主要内容
SubtitleMatrix

LRC 转 SMI

格式转换歌词(LRC)
或者粘贴字幕文本

选项

当源文件没有结束时间时使用(纯文本、LRC)。输出里的时间轴是在这里生成的,不是转换来的,所以填多少就是多少。

这次转换会改变什么

有 1 项会被丢弃或需要你决定

  • 时间

    字幕条的结束时间——源文件不记录这些时间,因此输出中的结束时间是生成的,而不是转换来的

这份清单来自这两种格式的能力矩阵,而不是你加载的这份具体文件。如果具体文件用到了格式允许、但矩阵没有建模的特性,可能会丢得更多。

LRC 转 SMI 把歌词写成 SAMI 的 `<SYNC Start=毫秒>` 加 `<P>` 正文,每条字幕后面紧跟一个 `<P>&nbsp;` 清屏块,让画面在终点回到空白。

结束时间由下一行开始推断,最后一行用页面设定时长补;清屏块写在那个终点上。多行歌词用 `<br>` 连接,仍属于同一个 SYNC 块。

有损说明记 timing:终点是推断值。SAMI 支持行内样式,但 LRC 本来就没有样式,所以产物只有纯文本加一个默认的 `<STYLE>` 段落规则;`[ti:]`、`[ar:]`、`[al:]`、`[offset:]` 没有落点,偏移也不会被应用。

输出 UTF-8、LF、无 BOM,cue 按开始时间升序。转换在浏览器本机完成,不上传、不注册;批量文件串行处理、可取消,结果打包下载。

示例

一份典型的 LRC 文件转成 SMI

输入

[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.

输出

<SAMI>
<HEAD>
<STYLE TYPE="text/css">
<!--
P { text-align: center; font-family: Arial, sans-serif; }
-->
</STYLE>
</HEAD>
<BODY>
<SYNC Start=12000>
<P>First line of the song.
<SYNC Start=15300>
<P>&nbsp;
<SYNC Start=15300>
<P>Second line.<br>Second line, translated.
<SYNC Start=18000>
<P>&nbsp;
<SYNC Start=18000>
<P>
<SYNC Start=21500>
<P>&nbsp;
<SYNC Start=21500>
<P>Final line.
<SYNC Start=23500>
<P>&nbsp;
</BODY>
</SAMI>

产物丢了结束时间;每条 cue 后面多一个清屏块,文字逐行一致。

同一转换遇到一份脏文件

输入

[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]

输出

<SAMI>
<HEAD>
<STYLE TYPE="text/css">
<!--
P { text-align: center; font-family: Arial, sans-serif; }
-->
</STYLE>
</HEAD>
<BODY>
<SYNC Start=3000>
<P>Out of order.
<SYNC Start=5500>
<P>&nbsp;
<SYNC Start=5500>
<P>Leading zero omitted, one decimal.
<SYNC Start=7000>
<P>&nbsp;
<SYNC Start=7000>
<P>Second with no centiseconds.<br>Repeated chorus line.
<SYNC Start=9000>
<P>&nbsp;
<SYNC Start=9000>
<P>Repeated chorus line.
<SYNC Start=12000>
<P>&nbsp;
<SYNC Start=12000>
<P>
<SYNC Start=14000>
<P>&nbsp;
</BODY>
</SAMI>

真实文件常见的损坏:BOM、混合换行、缺前导零的时间戳、重复的副歌行。解析器不抛异常,读不出的部分记进有损说明。

常见问题

LRC 转 SMI 时,`<P>&nbsp;` 清屏块是怎么生成的?

每条 cue 的终点会生成一个空段落,让画面在那一刻回到空白;SAMI 靠 SYNC 替换画面,不写清屏块上一条字幕会一直留着。

LRC 转 SMI 后,双语歌词会怎么显示?

放在同一个 `<SYNC>` 块里,两行之间用 `<br>`,仍然是一组。

LRC 的 `[ti:]`、`[ar:]`、`[offset:]` 在 SMI 里能保留吗?

不能。SAMI 的 cue 模型没有这些字段;`offset` 也不会被应用,时间按文件字面转换。

LRC 转 SMI 的时间精度会变吗?

不会。SMI 的 `Start=` 以毫秒计,LRC 的百分秒直接写成毫秒,例如 `[00:12.00]` 变成 `Start=12000`。

LRC 转 SMI 后,最后一行歌词在哪结束?

用页面设定时长补出的终点;那一处会生成清屏块,报告会说明这个结束时间是推断的。

SMI 转回 LRC 会丢什么?

会丢结束时间、样式、定位、精度与格式私有内容;这一页只是其中一个方向,反向有自己的一份清单。

相关工具