果然,折腾的尽头是躺平…
因为我经常使用PLEX进行影音播放,最近在听评书的时候,忽然想到可以像歌曲的歌词一样,在听的时候也能看一眼。但很明显,任何一本评书都不会有人制作歌词的,除了我~
之前有一阵追了一些国外影片,在遇到生肉的时候呢,就已经通过ASR进行语音识别,并且通过机器翻译制作字幕(正好介绍一个优质软件——Tern)。但之前都是轻度使用,一季的短剧也没几个小时,而恰好腾讯云又有每月10小时的免费额度,基本够用了。而这次我要的音频总量近千小时,各种评书、罗辑思维和喜马拉雅的音频文件,而看了眼云服务商的ASR(语音识别)的价格,着实劝退,最便宜的阿里云闲时ASR都要1元/小时,为了我一个突发奇想,也真是没必要。
但骨子里的折腾DNA还是动了,毕竟ASR这种技术早就应该普及了,开源的软件应该多的是吧,于是乎github逛了一圈,也尝试了几个开源的框架,效果很一般,很一般!然后又回到百度一通搜,于是乎发现了百度旗下的paddle飞桨开源平台,也有开源的ASR模型,安装也算方便,都是基于python,这不是很完美嘛,吗?
一下午过去了,我费劲吧啦的搞好了兼容性,成功的调用了cuda加速,我的970ti还能一战。然而是我天真了,等真的要开始的时候,才发现paddle-asr这玩意有时长上限50s,要进行长语音识别,还要再进行音频切割。而且吧,官方的文档中,使用的是每10ms遍历,出现静音就切割,我大致的体验了一下,因为我的音频大都是评书之类的,基本上每个气口都被切割了,识别出来的文字极其细碎,再补充时间轴和标点符号简直是无稽之谈。我还尝试了固定时间切割,每10s/30s/50s我都尝试过,效果也一般,毕竟谁讲话也不会这么固定啊。
于是乎我又是一顿搜索,然后发现了阿里云他兄弟达摩院的开源项目,也正是本文的领衔主演——ModelScope。同样是开源框架,同样也有ASR开源模型,可ModelScope的ASR开源模型足足有72个,还有专门的长音频版本,上限2小时,这完全满足我的需求啊。
啥也不说了,开干吧。但框架的安装过程,比paddle还难,首先是语音识别的相关功能是只能在linux环境运行的,我又不是专业搞机器学习的,手里肯定没有装linux的机器啊。妥协了一下,先搞一台ubuntu的虚拟机试试水,准备搞好了买个云服务器。但官方的推荐组合ubuntu20.04+cuda11.3.0+py37+torch1.11.0+tf1.15.5,我至今都没能成功安装[微笑]。
好在,人家是真善良,直接给了一个docker镜像,分分钟可以跑通,至于性能损失嘛……忍了吧。嘿,你别说,ModelScope的ASR还真可以,识别出来的结果自动加了标点符号,还有相对时间戳,留给我做的,只需要根据标点符号进行切割,然后把相对时间戳转换成时间轴,脚本放在后边。
然后呢,考虑到有一些视频可能也需要加字幕,直接一次到位,再加个功能,通过lrc转srt。(别问我为啥不通过识别结果直接写srt,这不是想省事嘛,折腾的尽头是躺平)在此要感谢github的开源项目djj45/lrc2srt,直接将功能加入至我的脚本中,就可以直接生成srt文件了。
至此,实现ASR就已经很简单了,先通过ffmpeg将音视频转码至wav格式(这是modelscope的模型要求),然后通过docker关联宿主机文件夹,在docker中运行脚本,坐等lrc/srt文件就OK了。而且虽然是docker,虽然没有cuda加速,但速度真的比想象中的快得多,我一个低压八核i7处理器,平均用了1/10的音频时间完成了转写,这个时间我真的可以接受了。希望有更强性能的,可以用gpu-docker,或者上云服务器,速度肯定还能再上一个台阶。
