SMI 转 LRC
或者粘贴字幕文本
这次转换会改变什么
有 5 项会被丢弃或需要你决定
- 时间
字幕条的结束时间(输出格式只记录字幕条何时开始)
- 样式
全部样式(粗体、斜体、颜色、描边、阴影)
- 定位
屏幕定位(每条字幕条都会回到默认位置)
- 精度
时间精度——输出的时间刻度更粗,因此每个时间戳都会四舍五入到最接近的 10 毫秒
- 格式专有内容
源格式保留在字幕条之外的内容(非字幕块、文件头文字、单条字幕的设置、被注释掉的事件)——目标格式没有地方存放它们
这份清单来自这两种格式的能力矩阵,而不是你加载的这份具体文件。如果具体文件用到了格式允许、但矩阵没有建模的特性,可能会丢得更多。
SMI 转 LRC 是把带起止时间的字幕改成歌词行:每行一个 `[mm:ss.xx]` 时间戳加正文,适合跟着音乐或配音滚动显示。产物是纯文本,任何歌词播放器都能读。
丢的东西最多,也最需要提前知道:LRC 只记行开始,不记行结束,所以每条 SMI cue 的终点全部消失;它还只写到百分秒,`4126` 毫秒会变成 `[00:04.13]`,最多偏 5 毫秒。
样式与定位同样没有落点。`<STYLE>` 里的字体、字号、描边,`Class=ENCC` 指向的 CSS,以及行内的粗体、斜体、颜色都会被丢掉;SMI 的清屏块也不会写成空歌词行,否则播放器里会多出一段空白。
两条 SMI 行本来属于同一条字幕,转成 LRC 后会变成两行相同时间戳的歌词,靠时间戳相同表示“它们是一组”。所有转换在浏览器里运行,文件不上传,批量处理可取消并打包下载。
示例
一份典型的 SMI 文件转成 LRC
输入
<SAMI>
<HEAD>
<STYLE TYPE="text/css">
<!--
P { text-align: center; font-family: Arial; }
.ENCC { Name: English; lang: en-US; }
-->
</STYLE>
</HEAD>
<BODY>
<SYNC Start=1000>
<P Class=ENCC>Hello there.
<SYNC Start=3000>
<P Class=ENCC>
<SYNC Start=3500>
<P Class=ENCC>How are you?<br>Fine, thanks.
<SYNC Start=6000>
<P Class=ENCC>
</BODY>
</SAMI>
输出
[00:01.00]Hello there.
[00:03.50]How are you?
[00:03.50]Fine, thanks.
产物丢了结束时间、样式、定位、毫秒精度与格式私有内容;文字逐行保留。
同一转换遇到一份脏文件
输入
<SAMI>
<HEAD>
<TITLE>Episode 1</TITLE>
<STYLE TYPE="text/css">
<!--
.ENCC { Name: English; }
-->
</STYLE>
</HEAD>
<BODY>
<sync start="00:00:02,500">
<P Class=ENCC>Line one<br>Line two
<sync start=9000>
<P Class=ENCC>Tom & Jerry
<SYNC Start=12000>
<P Class=ENCC>
</BODY>
</SAMI>
输出
[00:02.50]Line one
[00:02.50]Line two
[00:09.00]Tom & Jerry
真实文件常见的损坏:BOM、混合换行、无效的 Start、散落的文本。解析器不抛异常,读不出的部分记进有损说明。
常见问题
SMI 转 LRC 后,每条字幕的结束时间去哪了?
LRC 不记结束时间,播放器会让一行一直显示到下一条时间戳出现,所以 SMI 的终点全部被丢弃。
SMI 转 LRC 的毫秒时间会损失吗?
会。LRC 只写到百分秒,`Start=4126` 变成 `[00:04.13]`,四舍五入到 10 毫秒,单条最多偏 5 毫秒。
SMI 的 `<STYLE>` 和 `<font color>` 在 LRC 里保得住吗?
都保不住。LRC 不存任何样式,文件级 CSS 与行内颜色标签都会被去掉,只剩纯文字。
SMI 转 LRC 时,一条两行字幕怎么写?
写成两行相同时间戳的歌词;时间戳相同表示它们属于同一组,这是 LRC 表示多行的方式。
SMI 的清屏块会变成空歌词行吗?
不会。`<P> ` 没有文字,只用于清屏,不产生歌词行,否则播放器里会多出一段空白。
SMI 转 LRC 后顺序会变吗?
会按开始时间升序输出;原文件若乱序会被纠正,原本有序则保持不变。