前阵子,花了不少时间在做MATLAB视频这件事上。

不得不说,做视频要比写文章难太多了!

可能是因为视频新手的原因,在做第一个视频的时候,录了3个小时,剪了6个小时,我终于完成了一个10分钟的视频!

5077842136473b0c836887bf6c1c9b89.png

然而,沉浸在第一支视频的兴奋中没多久,我发现了一个问题。

在我阅片无数之后,我发现自己做的视频居然没有字幕……

于是,在做第二个视频的时候,除了录视频,剪视频之外,我又多花了两个小时,做了一次汉语听写练习,视频里放一句,我手敲字幕一句。

这次做视频的经历实在是太折磨了!

我不相信做字幕会用这么蠢的办法,于是我就上网搜做字幕最快最简单的方法,我很快在B站找到了答案

71db23e2043695bcadf35a8ae5170f5a.png

答案跟我说,先把音频转txt文本,然后在arctime软件中手动对每句字幕进行时间轴上的定位。

了解行业内幕之后的我,迫不及待要开始第三个视频的制作!

在录完视频、剪完视频之后,又到了制作字幕环节

网上就有很多在线音频转字幕的网站,我选择了科大讯飞

fe211b00297ea491729f7bce2619ead5.png

然而,在音频转写完成后,转写预览里的文字,居然没办法选中复制……

要导出文档的话,需要付费,每分钟音频0.33元……

我是一个在乎3毛钱的人吗!

这不是3不3毛钱的问题!

对于程序员来说,这是尊严的问题!

于是,我就用MATLAB写了一款音频转文字的工具。

59f4aa190ea5f437f80d9b6b5038c6e5.png
https://www.zhihu.com/video/1181588808822419456

我可能是B站里为数不多的,没有打光器,没有麦克风,但是居然会先给自己写工具的Up主……

实现音频转文字之后,我开始用acrtime加时间轴做字幕文件。

整个制作过程非常梦幻……

首先要把整个文本进行分行,每一行代表每次要显示的字幕

于是,还没开始做时间轴,我就要花差不多5分钟时间,见到句号要回车,见到逗号要回车,感觉句子太长要回车,听到语气有转折,还要回车!

此刻,我非常想念我的解压神器……

253c0a5a6f9f39afd251f3c06b171472.gif

文本分段完之后,我就开始体验所谓全网最快最简单的上字幕法。

在arctime里有一个模式,叫快速拖拽创建工具。

5f50385b67dc8ebe7eb394829823f608.png

我一直不太理解这个名字的意思,不过在这个模式下,每听到一句字幕,就要按一下暂停,然后字幕会加到这段时间轴上。

这难道不是另一种形式的汉语听力练习吗!

说好的全网最快最简单的上字幕方法呢!

于是,我就用MATLAB写了一款音频转字幕的工具,在加载处理完音频文件之后,自动生成srt字幕文件。

f5042412e7b128fd4da75e0e98b8403b.gif

我可能是B站里为数不多的,没有打光器,没有麦克风,写完一个工具不过瘾又写了一个工具的Up主……

接下来简单地聊一聊如何用MATLAB实现音频转文字的功能。

这个功能的实现,是通过调用百度语音识别的API,这类网站还有不少,包括科大讯飞,也有提供API可以调用。

如果大家有兴趣也想玩一玩这个语音识别的话,需要先登陆百度智能云管理中心,创建一个语音识别的应用。

135bd1531c8b2baca796fe3a7dd348d4.gif

应用创建成功之后,会生成属于自己的API Key和Secret Key,之后通过https://openapi.baidu.com/oauth/2.0/token获取token,token的值将会作为之后API调用的其中一项参数传递。

API调用的另一个非常重要的参数就是音频信号,这里需要base64的格式,这个格式的转换代码,大家也是可以在我之后发布的源代码中看到的。

还需要注意的一点是,API接受的频率只有16000,这个是在API技术文档中定义好的。所以大家有些录制的音频,如果频率不是16000的话,就需要对频率进行一个转化。

其他所需的API参数,有兴趣的朋友可以在百度智能云的技术文档里查看,最后需要把这些参数定义为一个struct格式通过webwrite进行传递

https://cloud.baidu.com/doc/SPEECH/s/rjwvy5jlx/

关于音频转字幕文件,目前我在这部分使用的策略比较简单。

在MATLAB读取完音频之后,先进行滤波,之后检测音频中幅值小于阈值并持续0.5秒,则认为处于句子停顿。

在未识别出停顿的情况下,根据语音识别的文字,进行标点符号的正则法处理,然后在单句音频上进行断句设置时间轴。

虽然这个策略比较简单,不过实现起来不太容易。

如果音频时长太长的话,读取到的数据非常大,如果代码里但凡使用一个for循环,整体的计算效率会非常差。

音频数据处理,是一个非常好的MATLAB练习题,可以强迫自己不使用for循环,这个练习也是知识星球“基础训练营”中的其中一道练习题,非常推荐大家试一试。

以上就是今天的分享,对源代码感兴趣的朋友,可以在公众号后台回复“语音识别”获取源代码下载链接。

如果大家有兴趣,欢迎关注我的微信公众号“打浦桥程序员”,谢谢

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐