CapsLock
,录音开始,当松开大写锁定键时,就会识别你的录音,并将识别结果立刻输入Left Shift
再按 CapsLock
可以将识别结果离线翻译为英文,并将识别结果立刻输入Right Shift
再按 CapsLock
可以将识别结果在线翻译为多国语言,默认设置翻译为日文,并将识别结果立刻输入start_client_gui.exe
打开,即可转录生成 srt 字幕云贴
按钮,即可将客户端文本框中的前 1024 个字节发布到云剪贴板 ,并生成获取链接和二维码Ctrl
+ Alt
+ P
,可以将光标选中的 中文
离线翻译为 英文
,并自动覆盖替换原文Ctrl
+ Alt
+ [
,可以将光标选中的 任意语言
在线翻译为 在线翻译目标语言
,并自动覆盖替换原文Ctrl
+ Alt
+ F
,可以使用 everything 搜索光标选中的文字Ctrl
+ Alt
+ P
,可以将光标选中的 中文
离线翻译为 英文
,并自动覆盖替换原文Ctrl
+ Alt
+ [
,可以将光标选中的 任意语言
在线翻译为 在线翻译目标语言
( config.py
online_translate_target_languages
),并自动覆盖替换原文Ctrl
+ Alt
+ F
,可以使用 everything 搜索光标选中的文字![alt text](<assets/使用 everything 搜索光标选中的文字.gif>)
- 透明;极简
Ctrl+鼠标滚轮
可调整字体大小- 标题栏和操作栏失去光标焦点时自动隐藏
- 窗口贴边自动隐藏
- 无任务栏图标
标题栏
- 📌:置顶窗口,将它显示在其他窗口之上 / 不置顶
- 云贴:按下客户端主界面的
云贴
按钮,即可将客户端文本框中的前 1024 个字节发布到云剪贴板(一个无依赖即用即走的剪切板) ,并生成获取链接和二维码。实测 5~1024 字节,不足字节补.超出字节无效。- 清空:清空文本框中的全部内容
操作栏
- 监听:监听客户端输出 / 不监听,仅用作笔记本
- 字符数、字节数统计:光标已选中字符数 / 总字符数 | 字节数
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
配置Left Shift
再按 CapsLock
进行翻译,方便同时需要输入中文和英文翻译的场景。通过 config.py
中 offline_translate_shortcut
配置Right Shift
再按 CapsLock
进行翻译,方便同时需要输入中文和英文翻译的场景。通过 config.py
中 online_translate_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
,可以配置服务端地址、快捷键、录音开关……Capslock
键会在光标处提示 ✦ 语音输入中‧‧‧;按下 Shift
和 Capslock
键会在光标处提示 ✦VoiceTrans‧‧‧。注意此功能由 AutoHotKeyV2 hint_while_recording.exe
实现,修改 config.py
默认快捷键并不会改变提示的按键设置,需要编辑 hint_while_recording.ahk
并自行编译替换 hint_while_recording.exe
Capslock
键会在跟随鼠标指针处提示一个小麦克风图标。默认启用,通过 config.py
中 hint_while_recording_at_cursor_position
配置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_admin.exe
,通过 config.py
中 in_the_meantime_start_the_client_and_run_as_admin
和 In_the_meantime_start_the_client_as_admin
配置.
,超出字节 无效
。Ctrl
+ Alt
+ P
,可以将光标选中了中文离线翻译为英文,并自动覆盖替换原文。通过 config.py
中 offline_translate_and_replace_the_selected_text_shortcut
配置Ctrl
+ Alt
+ [
,可以将光标选中的 任意语言
在线翻译为 在线翻译目标语言
,并自动覆盖替换原文。通过 config.py
中 online_translate_and_replace_the_selected_text_shortcut
和 online_translate_target_languages
配置存在杀毒误报,建议关闭杀毒软件和防火墙,再解压
建议先不要修改默认配置,测试能否正常运行
音视频文件转录功能依赖于 FFmpeg
,打包版本已内置 FFmpeg
默认的快捷键是 caps lock
,你可以打开 core_client.py
进行修改
输入状态提示功能由 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
以管理员权限运行客户端
添加开机自启动的方法:
8.1 如果你未更改默认配置( In_the_meantime_start_the_client = True
表示一键启动功能 生效,服务端会自动启动客户端),只用新建 start_server_gui.exe
的快捷方式,将服务端的快捷方式放到 shell:startup
目录下即可在开机时自动启动服务端和客户端。服务端会自动启动客户端。不要添加客户端的快捷方式。
8.1.1 如果你未更改默认配置( In_the_meantime_start_the_client_as_admin = True
),启动服务端会自动以管理员权限启动客户端。
8.1.2 如果你更改了默认配置( In_the_meantime_start_the_client_as_admin = False
),启动服务端会自动以用户权限启动客户端。
8.2 如果你更改了默认配置( In_the_meantime_start_the_client = False
表示一键启动功能 禁用,启动服务端不会启动客户端),新建 start_server_gui.exe
的快捷方式,将服务端的快捷方式放到 shell:startup
目录下只会在开机时自动启动服务端。客户端不会被启动。
8.3 如果你更改了默认配置( In_the_meantime_start_the_client = False
),新建 start_client_gui.exe
的快捷方式,将客户端的快捷方式放到 shell:startup
目录下只会在开机时自动启动客户端。服务端不会被启动。不要再添加客户端 start_client_gui_admin.exe
的快捷方式。
8.4 如果你更改了默认配置( In_the_meantime_start_the_client = False
),新建 start_client_gui_admin.exe
的快捷方式,将客户端的快捷方式放到 shell:startup
目录下只会在开机时自动以管理员权限启动客户端。服务端不会被启动。不要再添加客户端 start_client_gui.exe
的快捷方式。
🤓 Open Home Folder With VSCode
使用前需在 config.py
配置 vscode_exe_path
.\runtime\python.exe .\core_server.py
脚本 在终端启动服务端,会载入 Paraformer 模型识别模型和标点模型(这会占用 2GB 的内存,载入时长约 50 秒).\runtime\python.exe .\core_client.py
脚本 在终端启动客户端,会载入中译英模型,打开系统默认麦克风,开始监听按键(这会占用 400MB 的内存,载入时长约 20 秒)CapsLock
键,录音开始,松开 CapsLock
键,录音结束,识别结果立马被输入(录音时长短于 0.3 秒不算)Left Shift
再按 CapsLock
进行离线翻译,方便同时需要输入中文和英文翻译的场景Right Shift
再按 CapsLock
进行在线翻译,方便同时需要输入中文和英文翻译的场景你可以编辑 config.py
,在开头部分有注释,指导你修改服务端、客户端的:
连接的地址和端口,默认是 127.0.0.1
和 6006
键盘快捷键
是否要保存录音文件
要移除识别结果末尾的哪些标点,(如果你想把句尾的问号也删除掉,可以在这边加上)
是否在录音时静音或暂停其他音频播放
是否阿拉伯数字化年份
是否启动后自动缩小至托盘,不显示主窗口
是否禁止多开
是否启动服务端时自动启动客户端
在线翻译目标语言 参考 docs-api
离、在线翻译并替换 快捷键
是否只在按下录音快捷键时启用麦克风
设置 VSCode 可执行文件位置
如果你有专用名词需要替换,可以加入热词文件。规则文件中以 #
开头的行以及空行会被忽略,可以用作注释。
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」默认每次语音识别结束后,会以年、月为分类,保存录音文件和识别结果:
例如今天是 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作者一下:
感谢你的好意 💖,不过,暂时不必。
本机 Python3.11.8 执行
pip install --target .\site-packages pywin32
编辑 .\runtime\python311._pth
增加
../site-packages/win32
../site-packages/win32/lib
../site-packages/win32ctypes/pywin32
../site-packages/win32ctypes
复制 .\site-packages\pywin32_system32\
中的 *.dll
到 .\runtime\