MicroDVD 字幕格式
这种格式能表达什么
- 文本样式
- 仅纯文本
- 屏幕定位
- 否
- 卡拉 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 连时间轴都保不住。按“哪一份损失清单你能接受”选目标,而不是按最常见的格式选。