语音识别

发布时间 2023-09-07 11:19:09作者: 淡蓝色的点

b站视频下载

视频的方式可参考知乎文章,我使用的是哔哩哔哩下载助手,具体使用方法参看文档说明。如果直接使用手机缓存视频(视频在文件管理器中的路径:Android/data/tv.danmaku.bili/download),得到的格式为m4s的video和audio文件,也就是说视频中画面和音频分离的(可以使用ffmpg: 一个用于在格式之间转换多媒体文件的命令行工具 工具合并),但用哔哩哔哩下载助手可以直接得到完整的视频。

语音翻译

有很多国外的视频没有中文翻译,奈何本人在语言方面又是个渣渣,遂只能另辟蹊径,研究了一下机器翻译这个东西。本来我以为只需要1个小时就能看到机器翻译效果,还美滋滋地想着可以继续看视频了,谁曾想,却弄了一天。诶,一天瞎折腾......

我用的软件是网上的开源软件autosub,这个软件分为原版和新版(原谅我不知道怎么称呼这两个版本),原版只有语音识别的功能,新版在原版的基础上增加了翻译的功能。

原版的使用方法

(别问我为什么是要用新版的功能却去使用了原版,问就是命运的安排)

原版的使用方法主要参考这两篇博客,分别是binglinggroupv3u,安装成功之后,我原以为就可以正常使用了,但是autosub报错ffmpeg: Executable not found on machine,庆幸在网上找到了解决方法,就是直接在原码中注释抛出错误的哪一行,在运行的时候,虽然控制台还是会报错,但是能输出字幕文件。接下来就是看看google翻译的准确性了。

(这是一段抱抱怨怨:按照第二篇博客中的做法需要去googlecloud上申请使用资格,可是我去申请的时候google已经退出中国市场了,根本找不到中国的选项,网上倒是有一些神奇的操作能申请到,可是那已经是两年前发的文章了。郁闷至极,怎么做一步卡一步。突然我灵光一现,想到可以直接在google翻译上翻译,因为google翻译可以翻译文档。然后我把得到的字幕文件转化为txt文件,在google翻译文件上传的页面上传,可以google提示不接受这个格式,但是它也不提示接受什么格式的文档:不知道是不是我没看到,然后我发现右边的显示有word格式文档,猜想是不是可以用word文档试试。)

把字幕文件中的内容复制到word文档中,上传之后下载翻译的文件,翻译出来的结果只能说是差强人意、聊胜于无、食之无味、弃之可惜。

新版的使用方法

(又是一段心理活动:本来在知道翻译的效果不行的时候就不想再继续了,但想着都花了这么长时间还是有头有尾吧。)

新版的使用我参考的是这篇博客,最开始我也是按照这篇博客的步骤来做的,但是不知道为什么就是没有成功,然后走了很多弯路,最后还是按照博客的步骤成功了。

(走弯路的过程:第一次安装好之后运行指令,但是python报错,我不熟悉python的语法,不知道怎么解决。在网上也很难找到资料,于是开始按照官网的教程来安装。官网的文字很多,看起来有些头大:本人耐不下心去读,不过还是慢慢往下看了,好像也没有那么复杂。官网推荐使用choco来安装Python环境,chocolatey来安装依赖。然后我就去查了一下chocochocolatey这两个工具,期间的胡乱尝试暂且不表,只说最后我发现我和安装指令只差一个curl,花了半天时候安装好了之后才发现使用这个工具的原因是要安装pip,可是我原本就有pip啊。安装好之后我又执行了一遍pip安装autosub指令,因为仔细看了官网,所以这里选择的是alpha版本,但是在运行翻译视频指令时又报错了,说enums找不到,还是找不到解决方法,于是我又将其卸载,安装了dev版本,在运行时还是报错,说NoneType的报错,依旧没找到解决方法,就是我特别失望的时候,我想着要不要完全复制博客里的指令运行试试,然后就生成了翻译后的字幕文件。有一种山重水复疑无路、柳暗花明又一村的感觉,但更多的还是无奈、无奈啊)

这里记录一下执行的命令:

  • 使用谷歌

    autosub -SRC en -S en-US -D zh-cn -surl translate.google.com -slp 0.1 -i "path"

  • 使用讯飞

    autosub -sapi xfyun -i "question.mp4" -sconf "xf-config.json" -SRC th -S th -D zh-cn -surl translate.google.com -slp 0.1

    讯飞的配置文件:

    {
        "app_id": "",
        "api_secret": "",
        "api_key": "",
        "api_address": "", //如果遇到hostname报错,把这行删掉
        "business": {
            "language": "zh_cn", //识别语言
            "domain": "iat", // 翻译领域:日常对话
            "accent": "mandarin"
        }
    }
    

测试了一下,针对泰语的翻译还是google更好一些,还有一个百度语音识别没有使用,不想折腾了,就这样吧。