测试开发于Python >= 3.6
本脚本使用谷歌云语音转文字api与谷歌云翻译api/百度翻译实现对油管直播的实时字幕与翻译。
git clone github.com/azuse/youtube-streaming-translator-python
cd youtube-streaming-translator-python
pip install -r requirements.txt
注1:从noise_reduction中复制了降噪功能,降噪功能需要安装SOX,不需要使用可以把代码直接注释掉。
Linux&Mac
export GOOGLE_APPLICATION_CREDENTIALS="[PATH]"
Windows CMD
set GOOGLE_APPLICATION_CREDENTIALS=[PATH]
Windows PowerShell
$env:GOOGLE_APPLICATION_CREDENTIALS="[PATH]"
例:
export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json"
脚本可以选择使用百度翻译API或谷歌翻译API,使用百度翻译API需要:
- 把翻译函数中的
baidu
设置为baidu=True
(目前在245行) - 在
baiduapi.py
中设置自己的APP ID
和SECRET KEY
- 不使用代理: 直接运行
- 使用代理:
Ubuntu/LinuxWindowsexport http_proxy=http://127.0.0.1:7890 export https_proxy=http://127.0.0.1:7890
set http_proxy=http://127.0.0.0.1:7890 set https_proxy=http://127.0.0.0.1:7890
将url = "https://www.youtube.com/watch?v=ylFDswiFduE"
中的地址修改为您需要翻译的直播地址
注:如果地址不是直播的话,程序会自动开始下载完整视频(应该会提示报错)
python main.google.py
最后一行输出数字分别代表:
开始下载的视频片段数 下载完成的视频片段数 下载失败的视频片段数 开始转码的视频片段数 转码完成已经发向谷歌API的片段数 从谷歌API收到回复(翻译完成)的片段数
脚本会自动在0.0.0.0:5000上开一个http服务器,同时在0.0.0.0:5001和0.0.0.0:5002上开socket服务器。
访问http://127.0.0.1:5000
或http://你的服务器ip:5000
会打开显示字幕用的网页,网页分别从5001和5002的socket读取日文与中文字幕。
网页的CSS有待优化,目前只是一个测试效果。
油管的直播是以1s左右时间一段.ts文件的格式传输的,在将视频段转为音频后,可以决定要把多少段视频合在一起送给谷歌的流式音频识别API,决定多少段合并在一起的变量叫chunksize
。
如果设置为较小的值(1),每次音频识别API可能只会返回一个词,日译中效果不好(<-语音识别和翻译的ChunkSize也许可以分开设置?);如果设置为较大值(10),意味着每10s才会更新一次字幕;
所以chunksize
的大小对识别效果有很大影响,目前感觉设置为4
效果较好,每4s一个片段。但是,如果一句话跨越两个4s片段,流式音频识别API对于两个连起来的片段很多时候还是会拆成两句话来识别,导致中间内容丢失。
使用Flask添加Web前端,方便OBS直接从浏览器将字幕加载到转播中- 优化前端CSS和JS
- 调教语音转文字和翻译
解决代理问题增加百度翻译api- 增加彩云小译API 增加IBM watson API