经常生活中有些痛点。比如坐地铁的时候,如果用耳机看一个没有字幕的视频你会很难受,因为噪声大,你听不清视频里说什么,你也不可能把声音调的非常大,很伤耳朵。看英语视频的时候,如果没有中文字幕,英语水平差,你很难看懂。如果添加英文字幕,有点英语水平的可能能看个大概懂了。日常生活中,你可能有个录音文件,非常希望自动转化成文字。
以上的痛点说痛不痛,但如果有工具能自动帮我们做一些语音到文字的自动化工作该有多好啊。根据视频的语音信息,自动添加字幕youtube很早就有了,而且youtube上可以自动翻译。如果说句话识别成文字 科大讯飞,百度等有许多的产品。但是将很长的音频转成文字或者自动为视频添加字幕,这样自动化的软件并不常见。科大讯飞应该有这样的软件,不知道是不是要收钱。
自己是做软件的,生活中的这些痛点让自己觉得,不如用已有的资源做个添加字幕或者音频转文字的工作吧。于是花了一些时间做了一个Demo,对于一些比较好的视频,比如演讲视频,效果还是不错的。
我用 TED的演讲做了一个Demo,TED演讲者英语清晰,噪音也少:
在我的python脚本中,基本的思路是:
(1)将长语音文件切割成小的语音文件。
(2)直接用Baidu的语音识别,做小文件的语音到文字的识别
(3)小语音文件包括了语音的开始时间和结束时间,所以能做字幕
其实里面比较不容易处理的就是将长文件切割成小的语音文件,经过一些思考有了下面的一个切割过程:
(1)提取wav文件的数据,对数据做一些平滑处理
(2)将数据做归一化处理
(3)设定一个阈值,用来定义用户的停顿阈值(归一化以后我取 0.2)。对于语音的每一个数值超过这个阈值算说话,低于这个算停顿。统计连续的停顿和连续的说话点的长度。
(4)对于所有的统计的长度数据,按照停顿的时间长短排序
(5)按照排序的数据做切割,越靠前面的越是应该被切割。切割什么时候停止?切割以后的所有小音频小于某个指定的指定试讲长度就停止。基本上根据我的经验可以设定这个值为17S左右。
(6)有了这些小音频,就可以用已有的语音识别技术做语音到文字的识别了,甚至添加字幕。
以后也可以加些自动翻译的东西进去。
如果是码农请参见,我的项目:github
。
如果想听一下切割效果,点击下面链接看百度网盘。切割文件按照 ID_起始时间_结束时间命名的( ID 从1开始)</