这是 CapsWriter-Offline 的图形界面包分支 ,一个 Windows 端的离线的语音输入、离线中译英、在线多译多、字幕转录工具。
-
按下键盘上的大写锁定键
CapsLock
,录音开始,当松开大写锁定键时,就会识别你的录音,并将识别结果立刻输入 -
按下键盘上的
Left Shift
再按CapsLock
可以将识别结果离线翻译为英文 -
按下键盘上的
Right Shift
再按CapsLock
可以将识别结果在线翻译为多国语言,默认设置翻译为日文 -
将音视频文件拖动到客户端
start_client_gui.exe
打开,即可转录生成 srt 字幕
-
基于 PySide6 的 GUI,服务端
start_server_gui.exe
默认使用 Qt-Material dark_yellow 主题,客户端start_client_gui.exe
默认使用 Qt-Material dark_teal 主题;基于 PyStand 绿化便携exe
-
完全离线、无限时长、低延迟、高准确率、中英混输、中译英、自动阿拉伯数字、自动调整中英间隔
-
防干扰功能:默认录音时静音并暂停其他音频播放,避免音乐干扰语音输入,通过
config.py
中mute_other_audio
和pause_other_audio
配置 -
离线翻译功能:离线翻译模型Helsinki-NLP/opus-mt-zh-en ,组合键 按住
Left Shift
再按CapsLock
进行翻译,方便同时需要输入中文和英文翻译的场景。注意输入结束时,先松开CapsLock
键,待输入完成,再松开Left Shift
键 -
在线翻译功能:基于 DeepLX 可以将识别结果在线翻译为多国语言,默认翻译为日文。过于频繁的请求可能导致 IP 被封。组合键 按住
Right Shift
再按CapsLock
进行翻译,方便同时需要输入中文和英文翻译的场景。注意输入结束时,先松开CapsLock
键,待输入完成,再松开Right Shift
键。通过config.py
中trans_online_shortcut
和trans_online_target_languages
配置 -
转录功能:将音视频文件拖动到客户端
start_client_gui.exe
打开,即可转录生成 srt 字幕 -
热词功能:可以在
hot-en.txt hot-zh.txt hot-rule.txt
中添加三种热词,客户端动态载入 -
日记功能:默认每次录音识别后,识别结果记录在
年份/月份/日期.md
,录音文件保存在年份/月份/assets
-
关键词日记:识别结果若以关键词开头,会被记录在
年份/月份/关键词-日期.md
,关键词在keywords.txt
中定义 -
服务端、客户端分离,可以服务多台客户端
-
编辑
config.py
,可以配置服务端地址、快捷键、录音开关…… -
支持最小化到系统托盘
-
已包含所有 Python 环境和 models 模型,解压即用
-
输入状态提示功能:按下
Capslock
键会在光标处提示 ✦ 语音输入中‧‧‧;按下Shift
和Capslock
键会在光标处提示 ✦VoiceTrans‧‧‧。注意此功能由 AutoHotKeyV2hint_while_recording.exe
实现,修改config.py
默认快捷键并不会改变提示的按键设置,需要编辑hint_while_recording.ahk
并自行编译替换hint_while_recording.exe
-
阿拉伯数字化年份功能:默认将****年 大写汉字替换为阿拉伯数字****年,例如一八四八年 替换为 1848 年。通过
config.py
中Arabic_year
配置 -
启动后自动缩小至托盘功能:默认 服务端
start_server_gui.exe
启动后不显示主窗口,自动缩小至托盘;客户端start_client_gui.exe
显示主窗口。通过config.py
中Shrink_automatically_to_Tray
配置 -
禁止多开功能:默认禁止多开,通过
config.py
中Only_run_once
配置 -
一件启动功能:默认服务端
start_server_gui.exe
启动后,自动启动客户端start_client_gui.exe
,通过config.py
中In_the_meantime_start_the_client
配置
-
123 盘:https://www.123pan.com/s/qBxUVv-H4Zq3.html 提取码:h8vb
-
GitHub Release: Releases · H1DDENADM1N/CapsWriter-Offline
-
存在杀毒误报,建议关闭杀毒软件和防火墙,再解压
-
建议先不要修改默认配置,测试能否正常运行
-
音视频文件转录功能依赖于
FFmpeg
,打包版本已内置FFmpeg
-
默认的快捷键是
caps lock
,你可以打开core_client.py
进行修改 -
使用翻译功能输入结束时,先松开
CapsLock
键,待输入完成,再松开Left Shift
或Right Shift
键 -
输入状态提示功能由 AutoHotKeyV2
hint_while_recording.exe
实现,修改config.py
默认快捷键并不会改变提示的按键设置,需要编辑hint_while_recording.ahk
并自行编译替换hint_while_recording.exe
-
在线翻译基于 DeepLX ,过于频繁的请求可能导致 IP 被封,如果出现 429 错误,则表示你的 IP 被 DeepL 暂时屏蔽了,请不要在短时间内频繁请求
-
当某程序以管理员权限运行,可能会出现有识别结果但是却无法在那个程序输入文字的状况,例如:
Listary
、PixPin
等。这是因为start_client_gui.exe
默认以用户权限运行客户端,运行在用户权限的程序无法控制管理员权限的程序。你可以关闭用户权限运行的客户端,尝试使用start_client_gui_admin.exe
以管理员权限运行客户端 -
添加开机自启动的方法:新建
start_server_gui.exe
和start_client_gui.exe
的快捷方式(如果你希望开机自启动时与管理员权限运行客户端,创建start_client_gui_admin.exe
的快捷方式),将他们的快捷方式放到shell:startup
目录下即可
-
运行
.\runtime\python.exe .\core_server.py
脚本 在终端启动服务端,会载入 Paraformer 模型识别模型和标点模型(这会占用 2GB 的内存,载入时长约 50 秒) -
运行
.\runtime\python.exe .\core_client.py
脚本 在终端启动客户端,会载入中译英模型,打开系统默认麦克风,开始监听按键(这会占用 400MB 的内存,载入时长约 20 秒) -
按住
CapsLock
键,录音开始,松开CapsLock
键,录音结束,识别结果立马被输入(录音时长短于 0.3 秒不算) -
按住
Left Shift
再按CapsLock
进行离线翻译,方便同时需要输入中文和英文翻译的场景。注意输入结束时,先松开CapsLock
键,待输入完成,再松开Left Shift
键 -
按住
Right Shift
再按CapsLock
进行在线翻译,方便同时需要输入中文和英文翻译的场景。注意输入结束时,先松开CapsLock
键,待输入完成,再松开Right Shift
键
你可以编辑 config.py
,在开头部分有注释,指导你修改服务端、客户端的:
-
连接的地址和端口,默认是
127.0.0.1
和6006
-
键盘快捷键
-
是否要保存录音文件
-
要移除识别结果末尾的哪些标点,(如果你想把句尾的问号也删除掉,可以在这边加上)
-
是否在录音时静音或暂停其他音频播放
-
是否阿拉伯数字化年份
-
是否启动后自动缩小至托盘,不显示主窗口
-
是否禁止多开
-
是否启动服务端时自动启动客户端
-
在线翻译目标语言 参考 docs-api
- AR - 阿拉伯语
- BG - 保加利亚语
- CS - 捷克语
- DA - 丹麦语
- DE - 德语
- EL - 希腊语
- EN - 英语(为了向后兼容而未指定的变体;请改为选择 EN-GB 或 EN-US)
- EN-GB - 英语(英国)
- EN-US - 英语(美国)
- ES - 西班牙语
- ET - 爱沙尼亚语
- FI - 芬兰语
- FR - 法语
- HU - 匈牙利语
- ID - 印度尼西亚语
- IT - 意大利语
- JA - 日语
- KO - 韩语
- LT - 立陶宛语
- LV - 拉脱维亚语
- NB - 挪威语(博克马尔)
- NL - 荷兰语
- PL - 波兰语
- PT - 葡萄牙语(为了向后兼容而未指定的变体;请改为选择 PT-BR 或 PT-PT)
- PT-BR - 葡萄牙语(巴西)
- PT-PT - 葡萄牙语(除巴西葡萄牙语外的所有葡萄牙语变体)
- RO - 罗马尼亚语
- RU - 俄语
- SK - 斯洛伐克语
- SL - 斯洛文尼亚语
- SV - 瑞典语
- TR - 土耳其语
- UK - 乌克兰语
- ZH - 中文(简体)
如果你有专用名词需要替换,可以加入热词文件。规则文件中以 #
开头的行以及空行会被忽略,可以用作注释。
-
中文热词请写到
hot-zh.txt
文件,每行一个,替换依据为拼音,实测每 1 万条热词约引入 3ms 延迟 -
英文热词请写到
hot-en.txt
文件,每行一个,替换依据为字母拼写 -
自定义规则热词请写到
hot-rule.txt
文件,每行一个,将搜索和替换词以等号隔开,如毫安时 = mAh
你可以在 core_client.py
文件中配置是否匹配中文多音字,是否严格匹配拼音声调。
检测到修改后,客户端会动态载入热词,效果示例:
-
例如
hot-zh.txt
有热词「我家鸽鸽」,则所有识别结果中的「我家哥哥」都会被替换成「我家鸽鸽」 -
例如
hot-en.txt
有热词「ChatGPT」,则所有识别结果中的「chat gpt」都会被替换成「ChatGPT」 -
例如
hot-rule.txt
有热词「毫安时 = mAh」,则所有识别结果中的「毫安时」都会被替换成「mAh」
默认每次语音识别结束后,会以年、月为分类,保存录音文件和识别结果:
-
录音文件存放在「年/月/assets」文件夹下
-
识别结果存放在「年/月/日.md」Markdown 文件中
例如今天是 2023 年 6 月 5 号,示例:
-
语音输入任一句话后,录音就会被保存到
2023/06/assets
路径下,以时间和识别结果命名,并将识别结果保存到2023/06/05.md
文件中,方便我日后查阅 -
例如我在
keywords.txt
中定义了关键词「健康」,用于随时记录自己的身体状况,吃完饭后我可以按住CapsLock
说「健康今天中午吃了大米炒饭」,由于识别结果以「健康」关键词开头,这条识别记录就会被保存到2023/06/05-健康.md
中 -
例如我在
keywords.txt
中定义了关键词「重要」,用于随时记录突然的灵感,有想法时我就可以按住CapsLock
说「重要,xx 问题可以用 xxxx 方法解决」,由于识别结果以「重要」关键词开头,这条识别记录就会被保存到2023/06/05-重要.md
中
在服务端运行后,将音视频文件拖动到客户端打开,即可转录生成四个同名文件:
-
json
文件,包含了字级时间戳 -
txt
文件,包含了分行结果 -
merge.txt
文件,包含了带标点的整段结果 -
srt
文件,字幕文件
如果生成的字幕有微小错误,可以在分行的 txt
文件中修改,然后将 txt
文件拖动到客户端打开,客户端检测到输入的是 txt
文件,就会查到同名的 json
文件,结合 json
文件中的字级时间戳和 txt
文件中修正结果,更新 srt
字幕文件。
服务端使用了 sherpa-onnx ,载入阿里巴巴开源的 Paraformer 模型(转为量化的 onnx 格式),来作语音识别,整个模型约 230MB 大小。下载有已转换好的模型文件:
另外,还使用了阿里巴巴的标点符号模型,大小约 1GB:
客户端使用了中译英模型 Helsinki-NLP/opus-mt-zh-en
🪙 打赏 原版 CapsWriter-Offline
如果你愿意,可以以打赏的方式支持原版CapsWriter-Offline作者一下: