SBV 转 SMI
或者粘贴字幕文本
这次转换会改变什么
这个方向不会丢失内容 —— 源格式的每一项特性在目标格式里都有地方可去。
这份清单来自这两种格式的能力矩阵,而不是你加载的这份具体文件。如果具体文件用到了格式允许、但矩阵没有建模的特性,可能会丢得更多。
SAMI(SMI)是靠 `<SYNC>` 换屏的老格式,常见于旧播放器与课件系统。SBV 转 SMI 这一方向不丢东西。
产物里每条字幕是一个 `<SYNC Start=毫秒>` 加一个 `<P>`,紧跟一个 `<P> ` 用来清屏——SYNC 会替换屏幕上原有的内容,不显式清空的话上一条会一直挂着。两行的字幕用 `<br>` 连接。时间写到毫秒,`0:00:04.126` 就是 `Start=4126`,不取整也不挪位。
为什么说没有损失:SBV 存的就是 cue,而 SMI 能装下 cue 的全部内容——时间、文本、换行。SBV 本来就没有样式、定位、头部或块,所以没有东西会在路上消失。反方向则要付代价:SMI 转回 SBV 会丢掉定位与格式私有结构,因为 SBV 只存 cue。
cue 会按开始时间排序,乱序文件会被排好。整季文件一次拖入,串行、可取消、打成一个 ZIP;输出 UTF-8、Unix 换行、无 BOM;全过程在浏览器里,文件不上传。
示例
一份典型的 SBV 文件转成 SMI
输入
0:00:01.000,0:00:03.500
The quick brown fox.
0:00:04.000,0:00:06.250
Jumps over the lazy dog.
0:00:07.000,0:00:09.000
Two lines here.
And a second one.
输出
<SAMI>
<HEAD>
<STYLE TYPE="text/css">
<!--
P { text-align: center; font-family: Arial, sans-serif; }
-->
</STYLE>
</HEAD>
<BODY>
<SYNC Start=1000>
<P>The quick brown fox.
<SYNC Start=3500>
<P>
<SYNC Start=4000>
<P>Jumps over the lazy dog.
<SYNC Start=6250>
<P>
<SYNC Start=7000>
<P>Two lines here.<br>And a second one.
<SYNC Start=9000>
<P>
</BODY>
</SAMI>
这一方向没有丢任何东西:左右两边逐行对照即可。
同一转换遇到一份不规范但可读的输入
输入
0:00:02.000,0:00:04.000
Carriage-return line endings.
0:00:06.000,0:00:08.000
Indented timecode, no final newline.输出
<SAMI>
<HEAD>
<STYLE TYPE="text/css">
<!--
P { text-align: center; font-family: Arial, sans-serif; }
-->
</STYLE>
</HEAD>
<BODY>
<SYNC Start=2000>
<P>Carriage-return line endings.
<SYNC Start=4000>
<P>
<SYNC Start=6000>
<P>Indented timecode, no final newline.
<SYNC Start=8000>
<P>
</BODY>
</SAMI>
真实文件里常见的损坏:混合换行、散落的空白、留空的字段。可以对照上面那份干净样例,看看解析器能容忍到什么程度。
常见问题
SBV 转 SMI 会有损失吗?
没有。SBV 只有时间与文本,SMI 的 SYNC 加 `<P>` 能把它们连同换行一起装下,所以正文、两行结构与毫秒时间都原样保留,有损说明是空的。
SBV 的 0:00:04.126 在 SMI 里是什么?
是 `Start=4126`,整数毫秒。SYNC 的 Start 属性就这么写,不取整也不挪位;屏幕上待 2.9 秒的 cue 出来还是 2.9 秒。
SBV 里两行的字幕在 SMI 里怎么表示?
用 `<br>` 连接,仍然在同一个 `<P>` 下,也就是同一条字幕。归属关系保留,播放器会分两行显示。
SMI 产物里每条字幕后面的 <P> 有什么用?
用来清屏。SAMI 的 `<SYNC>` 是整体替换屏幕内容,每条字幕后面补一个空段落,等于显式把屏幕清空,否则上一条会一直留到下一次 SYNC。
SBV 转 SMI 后 cue 的顺序会变吗?
会按开始时间排序,最早的在前。原始文件如果乱序,产物会替你排好;这改的是文件结构而不是内容,是有意为之。
整季 SBV 一次转成 SMI 可行吗?
可以。多个文件一次拖入,队列串行处理,中途能取消,结束后打成一个 ZIP 下载;每份产物都带同样的默认 `<STYLE>` 段。全程在浏览器里,文件不上传。