TXT 转 SMI
或者粘贴字幕文本
选项
当源文件没有结束时间时使用(纯文本、LRC)。输出里的时间轴是在这里生成的,不是转换来的,所以填多少就是多少。
这次转换会改变什么
有 1 项会被丢弃或需要你决定
- 时间
时间轴本身——源文件不记录任何时间,因此输出的时间轴是生成的,而不是转换来的
这份清单来自这两种格式的能力矩阵,而不是你加载的这份具体文件。如果具体文件用到了格式允许、但矩阵没有建模的特性,可能会丢得更多。
TXT 转 SMI 写出的是一份 SAMI 文档:每行文字被排进一个 `<SYNC Start=…>` 标记,正文放在下面的 `<P>` 里,末尾再用 `<P> ` 清屏。时间槽是这一步生成的——第一行从 0 开始,之后每行接着上一行的结束,长度由“时长”参数决定。SAMI 是文本格式,块按开始时间排列,播放器顺序读取。
生成的时间按毫秒写进 Start 属性,不再舍入;每条字幕结束后跟一个空白块,因为 SYNC 会替换屏幕上的内容,不清理就会残留上一行。
有损说明只列一项:时间轴是生成的。TXT 没有样式表、定位或卡拉OK,所以 SMI 的 `<STYLE>` 段只带默认的排版规则,没有从源文件继承任何东西。生成的时间按行序递增,每条字幕首尾相接,不会出现重叠或空洞。
文件在浏览器里读写,不上传;批量处理时多个结果打成一个 ZIP。
示例
一份典型的 TXT 文件转成 SMI
输入
The quick brown fox jumps over the lazy dog.
Second paragraph, first line.
Second paragraph, second line.
输出
<SAMI>
<HEAD>
<STYLE TYPE="text/css">
<!--
P { text-align: center; font-family: Arial, sans-serif; }
-->
</STYLE>
</HEAD>
<BODY>
<SYNC Start=0>
<P>The quick brown fox jumps over the lazy dog.
<SYNC Start=2000>
<P>
<SYNC Start=2000>
<P>Second paragraph, first line.
<SYNC Start=4000>
<P>
<SYNC Start=4000>
<P>Second paragraph, second line.
<SYNC Start=6000>
<P>
</BODY>
</SAMI>
这份产物丢掉了时间轴(它由本站排定);每行文字进入一个 SYNC 块,随后跟着清屏块。
同一转换遇到带 BOM 与空行的 TXT
输入
Hello world.
Second block.
输出
<SAMI>
<HEAD>
<STYLE TYPE="text/css">
<!--
P { text-align: center; font-family: Arial, sans-serif; }
-->
</STYLE>
</HEAD>
<BODY>
<SYNC Start=0>
<P>Hello world.
<SYNC Start=2000>
<P>
<SYNC Start=2000>
<P>Second block.
<SYNC Start=4000>
<P>
</BODY>
</SAMI>
真实文件常带 BOM、Windows 换行、前后空白和多层空行。可以对照上面那份干净样例,看看解析器能容忍到什么程度。
常见问题
TXT 转 SMI 的 SYNC 时间是怎么排的?
第一行从 0 开始,之后每行接着上一行的结束,单行长度取“时长”参数(默认 2000 毫秒)。时间轴由这一页生成,因为 TXT 里没有时间码可读。
TXT 转 SMI 时为什么每条后面都有空白的 P?
因为 `<SYNC>` 会替换屏幕上现有内容。转换器在每条字幕结束后写一个 `<P> ` 块,显式把屏幕清空,避免字幕在结束时间后残留。
TXT 转 SMI 会保留 TXT 的段落吗?
会保留行序,但不会把段落合成一条多行字幕。TXT 的模型是一行一条 cue,空白行只是段落分隔;所以产物里每条 SYNC 对应一行文字。
TXT 转 SMI 的时间会舍入吗?
不会。SAMI 的 Start 属性就是毫秒整数,生成的时间按毫秒写出,转换过程中没有第二次舍入。
TXT 转 SMI 的 STYLE 段有内容吗?
只有转换器写的默认规则,例如居中与通用字体。TXT 没有样式表可继承,所以不会出现从源文件带过来的字体、字号或颜色。
TXT 转 SMI 的输出用什么编码?
输出固定是 UTF-8、Unix 换行符、不带 BOM。输入 TXT 若是别的编码,会先解码并在结果面板里说明。