跳到主要内容
SubtitleMatrix

MicroDVD 转 ASS

格式转换MicroDVD(SUB)
或者粘贴字幕文本

选项

时间按哪个帧率计算。在格式页面里,这是 MicroDVD 需要的值,因为它把时间存成帧号。在帧率页面里,它是文件当初对应的速率 —— 字幕是按这个版本做的 —— 而页面的第二个框填你要拿它配套的视频速率。常见的有 23.976、24、25、29.97、30、50、59.94 和 60。填错会让整条时间轴偏移;在帧率页面里,偏移是按比例发生的,而不是一个固定的量。

这次转换会改变什么

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

  • 帧率

    源文件以帧号存储时间——每个时间戳都取决于你提供的帧率

  • 精度

    时间精度——输出的时间刻度更粗,因此每个时间戳都会四舍五入到最接近的 10 毫秒

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

这一页把 MicroDVD 的 `.sub` 写成 ASS。输入是一行 `{100}{150}正文`,产物是一行 `Dialogue: 0,0:00:04.00,0:00:06.00,Default,,0,0,0,,正文`;帧号除以帧率就是秒。文件里没有现成的时间码,所以帧率必须先定下来。

帧率的优先级是:页面上的帧率框、文件第一行的声明、默认的 25。页面框永远先赢——样例里的文件写着 `{1}{1}23.976`,但页面默认 25,于是第 100 帧仍然落在 4 秒。这个顺序是有意的:复制来的 `.sub` 经常带着一个错的声明,而那个框存在的意义就是让你纠正它。

到 ASS 这里有两样东西没有落点。第一是帧率本身:ASS 存时钟,不存帧号,原始帧号不会出现在产物里。第二是精度:ASS 写厘秒(`0:00:04.13`),MicroDVD 换出来的毫秒要四舍五入到 10 ms,单条位移不超过 5 ms。样式、定位、卡拉OK本来就不在 MicroDVD 里,所以这一页不丢它们。

正文里的 `|` 是硬换行,产物里变成 `\N`,仍然属于同一条 cue。产物是 UTF-8、LF 换行、无 BOM;源文件若是 UTF-16 或 Windows 单字节编码,会先解码并在结果面板说明。批量时文件串行处理、可以取消,结果打成一个 ZIP;整个过程在浏览器里,不上传。

示例

一份典型的 MicroDVD 文件转成 ASS

输入

{1}{1}25
{100}{150}The quick brown fox jumps over the lazy dog.
{200}{260}Faster than|the last one.

输出

[Script Info]
ScriptType: v4.00+

[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,2,2,10,10,10,1

[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:04.00,0:00:06.00,Default,,0,0,0,,The quick brown fox jumps over the lazy dog.
Dialogue: 0,0:00:08.00,0:00:10.40,Default,,0,0,0,,Faster than\Nthe last one.

产物丢掉了帧率与精度;其余逐行一致。

同一转换遇到一份脏文件

输入

{1}{1}23.976
{0100}{0150}Leading zeros in the frame numbers.
[INFORMATION]
{300}{340}An unrecognized line above was kept in place.
{400}{450}Trailing spaces are kept.   

输出

[Script Info]
ScriptType: v4.00+

[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,2,2,10,10,10,1

[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:04.00,0:00:06.00,Default,,0,0,0,,Leading zeros in the frame numbers.
Dialogue: 0,0:00:12.00,0:00:13.60,Default,,0,0,0,,An unrecognized line above was kept in place.
Dialogue: 0,0:00:16.00,0:00:18.00,Default,,0,0,0,,Trailing spaces are kept.   

真实文件常见的损坏:混合换行、BOM、散布的空白、带前导零的帧号、认不出的行。可以对照上面那份干净样例,看解析器能容忍到什么程度。

常见问题

MicroDVD 转 ASS 时,页面上的帧率框和文件第一行谁说了算?

页面框赢。样例文件第一行写着 23.976,但框里默认是 25,所以 `{100}` 换算出来仍是 4 秒而不是 4.171 秒。想按文件声明走,就把框留空。

MicroDVD 转 ASS 后,时间码为什么只到百分秒?

ASS 的时间写法是 `0:00:04.13`,只到厘秒。毫秒换算结果四舍五入到最近的 10 ms,单条位移不超过 5 ms,时间轴不会被拉伸或重新排序。

MicroDVD 转 ASS 会保留原来的帧号吗?

不会。ASS 只存时钟时间,`{100}{150}` 这两个数字不会出现在产物里。如果后续还要按帧交给视频工具,请保留原始 `.sub` 文件。

MicroDVD 的两行字幕转成 ASS 后还在同一条里吗?

在。`|` 会写成 `\N`,这是 ASS 的硬换行写法;两行仍属于同一条字幕,播放器会一起显示。

MicroDVD 里认不出的行(例如 `[INFORMATION]`)转 ASS 后去哪了?

它们不是 cue,不会被当成字幕。ASS 的产物只有 `[Script Info]`、样式表与 `[Events]`,没有能安放这类原始行的位置,所以它们不进产物;解析时仍然照读其余可识别的内容。

ASS 再转回 MicroDVD 会丢掉什么?

样式、屏幕定位、卡拉OK逐字计时、帧率,以及 ASS 的格式私有构造。这一份清单与上面那份不同,因为两个格式各自保留的东西不一样。

相关工具