跳到主要内容
SubtitleMatrix

MicroDVD 字幕格式

格式转换MicroDVD(SUB)

这种格式能表达什么

文本样式
仅纯文本
屏幕定位
否
卡拉 OK 计时
否
字幕条内换行
是
时间轴
每条字幕都有开始与结束时间
时间精度
1 毫秒
时间以帧号存储
是
从右到左的文字
是

示例

一份典型的 MicroDVD 文件,以及从里面读出了什么

文件

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

从中读出了什么

2 cues, 3 lines of text

  {100}{150}  =  00:00:04.000 → 00:00:06.000
    The quick brown fox jumps over the lazy dog.
  {200}{260}  =  00:00:08.000 → 00:00:10.400
    Faster than
    the last one.

Outside the cues:
  frame rate 25 fps, from the first line of the file

右栏不是转换后的文件,而是本站从左栏读出来的东西,也是这份文件参与任何一次转换时的起点。

一份脏的 MicroDVD 文件,仍然读得出什么

文件

{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.   

从中读出了什么

3 cues, 3 lines of text

  {100}{150}  =  00:00:04.171 → 00:00:06.256
    Leading zeros in the frame numbers.
  {300}{340}  =  00:00:12.513 → 00:00:14.181
    An unrecognized line above was kept in place.
  {400}{450}  =  00:00:16.683 → 00:00:18.769
    Trailing spaces are kept.   

Outside the cues:
  frame rate 23.976 fps, from the first line of the file
  kept as it was  [INFORMATION]

BOM、Windows 换行、认不出的行、带前导零的帧号都出现过。解析不抛异常:读不出来的部分如实上报,而不是悄悄丢掉。

把 MicroDVD 转成其他格式

每一个都完全在你的浏览器里运行。标签标明了那个方向要付出什么代价,打开之前就能看到。

转换为此格式

MicroDVD(`.sub`)是 DivX 时代的字幕格式:一行一条字幕,形状是 `{开始帧}{结束帧}正文`。它存的不是时间码,而是帧号——也就是说,离开帧率,文件里的数字说明不了任何时刻。这也是它今天最容易出问题的地方:文件复制来复制去,帧率声明却常常是错的。

惯例是在第一行写一条 `{1}{1}25` 之类的声明。但大量 `.sub` 是转制工具按 PAL 的 25 帧写死的,声明 25 并不等于素材真的跑在 25。所以本站把页面上的帧率字段排在文件声明之前:你先说这份字幕该按多少帧读,声明只在字段留空时才生效,两者都没有才落到默认的 25,并在有损说明里写明整条时间轴是猜的。

它能表达的东西很少:每条字幕一个开始帧、一个结束帧、一段正文,正文里用 `|` 表示硬换行。没有样式、没有屏幕位置、没有卡拉OK逐字计时。有些文件带 `{Y:i}` 这类控制码,本站把它们当正文原样保留,不执行——看不清的静默改写比留着标记更糟。

下面那张能力表里每一行“否”,就是转成 MicroDVD 时会丢的东西;每一条转换页都会在打开文件之前把这些代价列出来。所有转换都在浏览器里完成,不上传、不注册,也可以一次拖入整季的多个文件串行处理。

常见问题

MicroDVD 文件第一行的 `{1}{1}25` 是什么?

是帧率声明,惯例写在第一个非空行。它不是一个 cue,而是告诉读文件的人“这份字幕是按每秒 25 帧写的”。没有这一行,文件里的帧号就只能靠外部约定来换算。

MicroDVD 的 `{100}{150}` 怎么换算成秒?

帧号除以帧率。25 fps 下第 100 帧是 4 秒,第 150 帧是 6 秒,所以这条字幕覆盖 4.000 到 6.000 秒。文件本身不存这个除法需要的那个数,它是外部的。

同一个 MicroDVD 文件按 23.976 和 25 读,时间轴差多少?

帧号不变,秒数按比例变。一小时素材在两种帧率下会差出可见的分钟级偏移,而且越往后越大;所以这不是“精度问题”,是整条时间轴对不上画面。

MicroDVD 里的 `{Y:i}` 会被当成斜体执行吗?

不会。MicroDVD 的样式能力是 none,这类花括号里的控制码按正文原样保留,不解析、也不丢弃。产物里看到它,说明源文件里本来就有这几个字符。

MicroDVD 正文里的竖线 `|` 是换行还是普通字符?

是格式自带的硬换行分隔符,本站会把它拆成同一 cue 的两行。格式没有转义机制,所以正文里真的想显示一个竖线,往返之后会变成两行——这是格式本身的边界,不是转换改坏的。

MicroDVD 转成哪一种格式丢得最少?

没有免费的方向。SRT、VTT、CSV、SBV、JSON 与 TTML 都保得住毫秒和文字,只丢帧率;ASS 与 SSA 另丢厘秒以下的精度;LRC 与 TXT 连时间轴都保不住。按“哪一份损失清单你能接受”选目标,而不是按最常见的格式选。