VobSub 转 SRT
首次运行会下载文字识别器 —— 约 4 MB,外加语言模型,由本站提供,之后浏览器会缓存。不会上传任何内容;结果是机器识别的,采用前请先校对。
选项
位图字幕是文字的图片,所以必须把词从中读回来。告诉识别器它看到的是哪种语言——下拉框列出了本站发布的全部语言。选字幕实际使用的那一种:用英文模型读俄文字幕只会得到噪声,而不是俄文。只会下载你选中的模型(其他模型永远不会下载),所以切换语言的代价是每种语言一次下载,之后走缓存。
VobSub 把一条字幕轨拆在两个文件里,两个都必须给。.sub 装图像:一串 MPEG program-stream 包,每个包带着用两位行程编码压缩的位图。.idx 装其余全部:十六色调色板、画面尺寸,以及每行一条的记录——开始时间,以及它的图像在 .sub 里的字节偏移。只给 .sub,无法知道一共有多少条字幕;只给 .idx,没有图可读。这一页接收这一对文件,写成 .srt。
每个包靠那个字节偏移定位,所以索引不是便利贴,而是地图。包内有两个头部字,给出大小和控制序列的位置;控制序列设定显示区域、选定像素引用调色板的哪四个条目,并指向压缩位图。解码器要沿行程编码走两遍,一遍偶数行、一遍奇数行,因为 VobSub 把隔行帧的两场分开存放。这就是为什么草率的解码器会产出一张隔行缺行的图。
时间戳只存在于 .idx 里,也是唯一可用的形式。一条字幕在下一条开始时结束;最后一条给两秒,并记录在有损列表里。识别不出文字的图像会被略过并计数,不写成空行。
文字来自 OCR,意味着它是一次阅读而不是转录。DVD 字幕在这里最难:它们常用小号位图字体,画外音和歌词还会用斜体;识别器不知道一个倾斜的字与正体是同一个字。请校对。选择字幕实际使用的语言——识别器核心约 4 MB,模型按页选择、只下载一次,之后由浏览器缓存。
不上传任何东西。这一对文件在这个标签页里解析和识别,唯一的网络请求是本站提供的识别器文件。
常见问题
为什么 VobSub 转 SRT 需要 .idx 和 .sub 两个文件?
因为 VobSub 在设计上就把一条轨拆成两份。.sub 装位图;.idx 装十六色调色板、画面尺寸,以及每张图的字节偏移和开始时间。单独任何一份都回答不了一共有多少条字幕、它们说了什么。只有 .sub 时,索引必须从源碟重新取回,否则 OCR 无从开始。
.idx 里的 filepos 数字指向什么?
指向 .sub 文件里的字节偏移,落在某个 MPEG program-stream 包的起点,那个包的 stream id 标着它是私有流——DVD 播放器用来放字幕的那一类。这个数字不是字幕序号,在少见的碟片上也不一定与时间戳同序,所以这一页按时间戳排序,而不按文件里出现的行序。
为什么有些行字母读错了,但长度是对的?
因为调色板和字形都来自图片,而 OCR 在固定尺寸上分辨形状。DVD 字幕常用小号、很斜或很粗的字体;斜体(画外音和歌词常用)是常见的受害者,因为对一个字来说斜体还是同一个字,对识别器来说却是另一种形状。长度对、字母不对时,正确的修法是校对,而不是换工具。
VobSub 字幕的屏幕位置会保留到 SRT 里吗?
不会,而且没有地方可放。VobSub 把位置存成每个包内的显示区域矩形,坐标是十二位的;SRT 完全没有定位语法。页面用这个矩形判断字在哪里,帮助 OCR 正确裁剪,然后就丢掉它。播放器需要定位字幕时,能承载这些信息的是 ASS;带位置标记的 SRT 只是一种约定,有的播放器认,有的会把标记原样印出来。
我只有 .sub,没有 .idx,VobSub 转 SRT 能重建索引吗?
不能只靠 .sub,也不能可靠地从图像重建。偏移原则上可以扫描私有流包找到,但时间戳无法恢复:它们只存在于 .idx 里。重建索引意味着回到碟片或提取出这一对的 VOB 文件,或者找回旁边另一条轨的原始 .idx。猜时间会产出一份看起来正确、却与视频越走越偏的文件,那比没有文件更糟。
.idx 和 .sub 在处理时会被发送出去吗?
不会。两份文件都在这个标签页里读入内存、在这里解码、在这里识别;唯一的下载是本站提供的文字识别器,之后由浏览器缓存。处理一对文件时打开 Network 面板,没有任何请求携带它们。这对 VobSub 尤其重要,因为这些文件通常来自用户自己拥有的碟片,正是最不该交给在线转换服务的素材。