视频和字幕·字幕工具包
“清理”字幕文件意味着什么:标签、代码和杂散格式
· 工作原理
字幕 文本处理 文件格式
字幕文件会收集垃圾:类似 HTML 的标签、其他格式的样式代码、杂散 BOM 和混合行结尾。这篇文章解释了每种混乱是什么,它从哪里来,以及如何在不触及文字的情况下以干净的步骤将其删除。
字幕在屏幕上显示“{\an8}”和“<i>”——不干净字幕文件的明显症状
当标题显示标签的字符而不是遵循它时,播放器告诉您它没有实现该标记。 SRT 没有格式规范,因此支持是传统的:许多玩家尊重一小组类似 HTML 的标签,并且该组之外的任何内容都被绘制为文字文本。在一个播放器中正确渲染并在另一个播放器中显示大括号的文件没有改变;只有被尊重的标签集有。
这就是为什么清洁是一项真正的操作而不是装饰性的整理。杂乱并不是恰好丑陋的装饰。它是为一种格式编写的指令,不同的玩家将其作为对话读取,解决方法是删除指令,同时保留每个单词完整。
混乱的来源 — 从样式繁重的格式导出、OCR 输出和添加自己标记的编辑器
大多数混乱都是通过转换产生的。以 ASS 或 SSA 等样式密集型格式编写的文件内嵌定位和外观指令,而忠实映射时序的转换器通常会将这些指令作为文本传递。字幕编辑器添加自己的标记以识别说话者和强调重点,而内置字幕的光学字符识别则引入了无作者键入的杂散标点符号和双倍空格。
这些来源在他们自己的世界中都没有畸形。 ASS 覆盖块在 ASS 中是有意义的。问题在于 SRT 没有等效项,因此无损转换会生成一个文件,其中指令作为字符而不是行为存在。
格式化标签 - 斜体、粗体和字体标签,玩家尊重它们并按字面显示它们
尖括号标签,使用正则表达式删除小于和下一个大于之间的所有内容。其中包括斜体和粗体标签、WebVTT 类标签(例如提示类注释)以及命名发言者的语音标签。重要的属性是,这是一个文本替换,而不是 HTML 解析器,并且它不会尝试将开始标记与结束标记相匹配。
这种简单性的代价是值得了解的。真正包含小于和大于的对话行,例如口头不平等,将把它们之间的文本连同括号一起删除。它在对话中很少见,在技术字幕中很常见,因此值得扫描讨论代码或数学的材料的清洁传递的输出。
定位和样式代码 - 像 {\an8} 这样的代码在 ASS/SSA 中意味着什么以及为什么它们在 SRT 中是噪音
大括号代码通过覆盖左大括号和右大括号之间的所有内容的第二次替换来删除。在 SubStation 格式中,这些是覆盖块,最常见的是将一条线移动到框架顶部的块,这样它就不会与烧入的文本发生冲突。其他人则设置字体、颜色、旋转或卡拉 OK 时间。
在 SRT 文件中,它们都没有任何意义,这就是它们被删除而不是翻译的原因。位置指令没有 SRT 等效项可以翻译为:该格式根本不包含放置。删除代码会失去作者的意图,即该行应位于框架顶部,并且这种损失是真实的,但最好是将代码打印到查看器。
看不见的混乱——字节顺序标记、混合的 CRLF 和 LF 行结尾和尾随空格
不可见的杂乱在解析过程中会被更早地处理,并且值得将其分离,因为它根本不是文本的一部分。文件开头的字节顺序标记会在其他任何内容之前被剥离,因为否则它会附加到第一个索引号并花费第一个提示。回车符是标准化的,无论是 Windows 回车对还是单独的回车符,因此在两个平台上编辑的文件会正确分割成块。
提示内的空白由标签处理。两个或多个空格或制表符的运行会折叠为单个空格,每行都会单独修剪,并且在重新连接行后,整个提示都会被修剪。字符实体被故意保留:&符号实体是查看者应该看到的内容,而不是标记,而解码它的清理器将编辑对话而不是删除指令。
工作示例:清理 200-cue 导出 — 哪些更改、哪些保留以及如何检查结果
清理大型导出的变化比看起来要小。采取一个 200 个提示文件,其中转换器已将帧顶部代码添加到 60 个提示,并在另外 40 个提示周围包裹了强调标签。两次替换删除了代码和标签,空白传递折叠了删除留下的双倍空格,并且 200 个提示变成了 200 个具有相同单词和相同时间的提示。
还有两个步骤很重要。一旦代码消失,整个内容都是杂散代码的提示就会变成空,并且空提示会在单独的通道中删除,而不是作为空白块发出,因为带有时间戳且没有文本的提示是一些玩家渲染为闪光的间隙。写回文件会对来自一个的提示重新编号并保持它们连续,因此删除不会在序列中留下漏洞。通过比较提示计数并抽查最初包含实体的任何行来检查结果。
这不包括什么——重写文本本身、拼写或翻译;这些话是你的
清理会删除标记并且不会触及语言。它不纠正拼写、扩展缩写、修复转录错误或翻译。如果标题说错了词,那么它会在格式正确的情况下说错词。这个界限是经过深思熟虑的:一个默默重写对话的工具不可能信任它不理解的材料。
它也不修复结构。块缺少时间戳的文件存在解析问题,而不是格式化问题,并且从中删除标签不会产生提示。编码错误同样超出了范围。使用错误的字符集解码的文件会产生格式完美的提示,其文本是错误的,并且没有任何标记删除可以检测到这一点,因为结构没有被破坏。
要点:删除标记,保留含义——字幕工具包的简洁步骤如何处理常见的混乱并记录它留下的内容
规则是删除标记,保留含义。尖括号标签和大括号代码之所以消失,是因为它们是玩家忽略或打印的指令。双倍空格和每行填充消失是因为它们是删除或原始导出的产物。实体、标点符号和每个单词都保留下来,因为这些是观众应该阅读的内容。
通过字幕工具包转换器运行包含大量标签的导出,并将其与原始文件进行比较,而不是一目了然地相信输出。确认提示计数未更改,除非提示确实为空,检查包含实体的任何行是否仍包含该实体,并扫描讨论代码或数学的行以查找因杂散尖括号而丢失的文本。