SRT 转 SMI
或者粘贴字幕文本
这次转换会改变什么
这个方向不会丢失内容 —— 源格式的每一项特性在目标格式里都有地方可去。
这份清单来自这两种格式的能力矩阵,而不是你加载的这份具体文件。如果具体文件用到了格式允许、但矩阵没有建模的特性,可能会丢得更多。
这一页把 SRT 转成 SMI(SAMI)。它是给网页和部分老播放器用的格式:每条字幕是一个带毫秒偏移的 <SYNC> 标签,后面跟一个 <P> 元素。
时间原样搬成整数毫秒:00:00:04,126 写成 Start=4126,不四舍五入、不平移。因为 SYNC 会替换屏幕内容,转换器会在每条字幕后补一个 <P> 空块清屏;一条两行字幕在同一个 <P> 里用 <br> 分成两行。
这个方向不丢东西:时间轴、换行与文字全部保留,并且排在正确的起始顺序上。真正有损的是反方向——SMI 转 SRT 会丢掉样式、定位与格式私有内容。
批量与零上传同其它页面:多个文件串行处理、可取消,结果打包成 ZIP;转换在浏览器里完成,文件不离开本机。输出统一为 UTF-8、Unix 换行、无 BOM,源文件是 UTF-16 或 Windows 单字节编码时会先解码。文件名保留,只改扩展名。
示例
一份典型的 SRT 文件转成 SMI
输入
1
00:00:01,000 --> 00:00:03,500
Hello there.
2
00:00:03,500 --> 00:00:06,000
<i>Whispering</i> now.
And a second line.
3
00:00:06,000 --> 00:00:09,250
<b>Bold</b> statement.
输出
<SAMI>
<HEAD>
<STYLE TYPE="text/css">
<!--
P { text-align: center; font-family: Arial, sans-serif; }
-->
</STYLE>
</HEAD>
<BODY>
<SYNC Start=1000>
<P>Hello there.
<SYNC Start=3500>
<P>
<SYNC Start=3500>
<P><i>Whispering</i> now.<br>And a second line.
<SYNC Start=6000>
<P>
<SYNC Start=6000>
<P><b>Bold</b> statement.
<SYNC Start=9250>
<P>
</BODY>
</SAMI>
这个方向没有丢东西:时间、换行与文字都在 SYNC 与 P 结构里。
同一转换遇到一份脏文件
输入
1
0:00:01,00 --> 0:00:03,500
<B>Bold</B> and <I>italic</I>.
2
00:00:03,500 --> 00:00:06,000
3
00:00:08,000 --> 00:00:09,000
Last one.
输出
<SAMI>
<HEAD>
<STYLE TYPE="text/css">
<!--
P { text-align: center; font-family: Arial, sans-serif; }
-->
</STYLE>
</HEAD>
<BODY>
<SYNC Start=1000>
<P><b>Bold</b> and <i>italic</i>.
<SYNC Start=3500>
<P>
<SYNC Start=3500>
<SYNC Start=6000>
<P>
<SYNC Start=8000>
<P>Last one.
<SYNC Start=9000>
<P>
</BODY>
</SAMI>
空条目与坏时间码不会让整份文件失败;能读的条目照常输出,读不了的记进有损说明。
常见问题
SRT 转 SMI 后时间码写成什么?
写成 <SYNC Start=4126> 这样的整数毫秒;SRT 的 00:00:04,126 精确对应,不四舍五入。
SRT 转 SMI 后每条字幕后面为什么有一个空块?
那是 <P> 清屏块。SYNC 会替换屏幕内容,补一个空块才能让上一条字幕按时消失。
SRT 转 SMI 会丢东西吗?
不会。时间轴、换行与文字都保留,顺序按起始时间排好;有损的是反方向,SMI 转 SRT 才会丢样式与定位。
SRT 转 SMI 后一条两行字幕怎么显示?
在同一个 <P> 里用 <br> 分成两行,仍是一条字幕,播放器会一起显示。
SRT 转 SMI 适合什么场景?
给网页或支持 SAMI 的老播放器用;逐条 SYNC 也方便被简单脚本读取。
SRT 转 SMI 后字幕顺序会变吗?
不会。产物按起始时间升序,原文件乱序时会先被排好再输出。