自动化制作字幕

Author Avatar
琉璃 10月 27, 2019

做文本翻译是一件繁琐的事情,需要大量的时间和精力。我曾经做过几个礼拜的文本翻译。面对着长长的游戏文本和各种俗语,往往一两个小时也写不了多少。如果用机器进行翻译,虽然快速,但那个质量惨不忍睹。机翻生活在汉化的最低端,虽然快捷但是正确率地下,不少句子也十分拗口。当看见一个不是那么称心如意的汉化,往往有观众猜测它为机翻。

之后随着机器学习的进步,机器翻译随之变成可能。记得搜狗同传作为同声翻译的辅助频繁出现在各个会场。那么有没有可能让字幕的制作在机器学习的帮助下变得快捷起来同时质量也没有那么差呢?

自动翻译字幕,其实是两部分。一是翻译语音,二是翻译视频中的文字。当音频中有噪声出现,人声不够清晰时,视频中大多会出现内嵌字幕。这就是翻译视频中文字的主要用途。当音频不靠谱时,我们用识别视频中的文字来补足。

音频

音频部分我使用的是Autosub。这是一个比较简陋的python库。简陋在作者已经半年没有更新了,一些严重的bug也没有修。其中一个bug导致了此脚本在windows无法运行。pyTranscriber是Autosub的一个fork。在Autosub的基础上,pyTranscriber添加了图形界面,修复了之前提到的严重bug,还提供了二进制安装包。这对于字幕翻译人员可谓是友善至极,毕竟他们不一定是一个开发者。他们不一定知道如何使用pip安装Autosub,如何在命令行使用Autosub。

Autosub的原理是把视频的语音部分给剥离出来,使用google的云服务进行语音转文字。如果需要翻译的话,会将转化出来的文字再次使用google的翻译服务。最后输出为srt格式。

使用翻译功能需要自己开通google的翻译api并取得api key。语音转文字的api key使用的是chromium中存在的一个公用api key。

我个人试了两种视频。一种是人声非常清楚,几乎没有背景声。在这种情况下,语音识别基本不会错。翻译的问题也不大。第二种视频是那种背景噪音很大,人声很小,有字幕辅助的视频。在这个视频中,语音识别的效率比较差,明显和内嵌字幕有较大的差距。

视频

视频部分使用的是videoOcr。它所做的就是把视频切成图片,再对图片进行图像识别。将文字提取出来并输出str文件。

VideoOcr都不能作为一个程序,它只是一个库。想要处理视频,还需要自己写脚本来调用这个库中的方法。想要处理其他语言,需要将语言编码传入。然而语言编码具体是什么得自己查,不像之前的Autosub可以罗列出所有的语言。并且它的语言编码有的和Autosub就不一样。比如日语一个是jap,一个是ja。当自己写的脚本跑起来以后,发现这个库在处理视频是命令行没有任何关于进度的输出。要不是看见cpu近乎爆表,我都以为它卡死了。

我个人试了一个视频。这个视频比较特殊,它有台标,有一直存在右上角的横幅字幕用来显示章节,而且字幕带有一点艺术字的感觉。识别的效果不是特别好,所有东西都是一股脑的输出,而且没有一个是准确的。就连一直不变的台标也是有的正确有的错误。VideoOcr使用的是tesseract,不知道是不是因为它对日文的支持不好。我尝试直接使用tesseract对视频截图进行识别,效果非常之差。为了对比,我是用google lens进行文字识别。发现google lens的效果远好于tesseract。或许尝试找一个支持google文字识别的工具可以提高准确率。

还有一个跟VideoOcr类似的是Video to text Ocr Demo。它支持把一直不变的台标去掉。由于它用的是百度云,而我又没办法验证我之前百度云账号的手机号,也就没有成功使用。

总得来说我对音频部分十分满意,对于视频部分倒是觉得差的不少。但是对于常规的字幕来说,音频才是信息的主要来源。Autosub应该可以作为初翻使用。在翻译的时候也不用一遍遍的去看视频,看着识别出来的原文本即可。相信可以省下不少时间。

This blog is under a CC BY-NC-SA 3.0 Unported License
本文链接:https://www.inevitable.tech/posts/291d2d4a/