本期魔改软件链接(只有30天有效期,随缘取之):
【【瑟谷智学魔改】CapsWriter-Offline-Windows-64bit.zip】
https://t3.znas.cn/glSKXd0bxD5
提取码:9677
到期了@瑟谷智学小助手:我再续期

前言:为什么要折腾这个?
CapsWriter Offline 是一款非常强大的离线语音转文字工具(基于阿里 FunASR 模型),识别率高且完全免费。但原版的使用流程略显繁琐:
手动打开服务端 (
start_server.exe),等待加载。手动打开客户端 (
start_client.exe)。拖入视频文件。
作为效率党,我们希望达到的效果是:在视频文件上点击右键 -> 选择“转文字” -> 自动处理一切(包括后台启动服务)。
本文将基于 AutoHotkey (AHK) v2 版本,教你如何实现这一自动化流程。
准备工作
核心软件:CapsWriter Offline(确保你有
start_server.exe和start_client.exe)。脚本工具:AutoHotkey v2 版本(官网下载安装)。
目标路径:假设你的软件解压在
D:\Video-Transcribe\CapsWriter-Offline-Windows-64bit\(注意:下文代码中请替换为你自己的实际路径)。
第一步:编写自动化逻辑 (AHK 脚本)
我们需要一个“大脑”来判断服务端是否开启,并协调客户端的调用。
在 CapsWriter 根目录下新建文本文档,重命名为
SourceScript.ahk。右键编辑,填入以下代码(基于 AHK v2 语法):
AutoHotkey
; ==============================================================================
; 脚本功能: 自动检测服务端状态并调用转录
; 环境要求: AutoHotkey v2
; ==============================================================================
#Requires AutoHotkey v2.0
#SingleInstance Force
; 1. 获取右键菜单传递的文件路径
if (A_Args.Length < 1)
{
MsgBox("错误:请通过右键菜单调用此程序。", "错误")
ExitApp
}
VideoPath := A_Args[1]
; 2. 定义程序名称和工作目录
; A_ScriptDir 代表当前脚本/exe所在的目录
WorkingDir := A_ScriptDir
ServerExe := "start_server.exe"
ClientExe := "start_client.exe"
; 3. 核心逻辑:智能判断服务端状态
; ProcessExist 检查进程是否存在
if !ProcessExist(ServerExe)
{
; --- 场景A:冷启动(服务未开)---
TrayTip "服务端未运行,正在后台静默启动 (需等待35秒)...", "自动转录助手"
; Hide 参数让服务端在后台运行,不弹黑框干扰视线
try {
Run(ServerExe, WorkingDir, "Hide")
} catch {
MsgBox("找不到服务端文件,请检查路径!", "错误")
ExitApp
}
; 强制等待35秒(给模型加载预留时间,视电脑配置可自行调整)
Sleep(35000)
TrayTip "模型加载完毕,开始转录...", "自动转录助手"
}
else
{
; --- 场景B:热启动(服务已开)---
TrayTip "服务端已就绪,立即开始转录...", "自动转录助手"
}
; 4. 调用客户端进行转录
; 注意:文件路径必须包裹引号,防止路径中含空格导致错误
try {
Run('"' ClientExe '" "' VideoPath '"', WorkingDir)
} catch {
MsgBox("无法启动客户端。", "错误")
}
ExitApp
编译为 EXE(关键步骤):
在
SourceScript.ahk上点击右键,选择 "Compile Script"。将生成的
.exe文件重命名为AutoTranscribe.exe。原理:编译成 EXE 后,运行更稳定,且注册表调用时无需依赖 AHK 环境路径。
第二步:配置右键菜单 (注册表)
我们需要告诉 Windows,当按下右键时去运行刚才编译好的 EXE。
新建一个文本文档,重命名为
AddMenu.reg。右键点击选择“编辑”,填入以下内容(注意替换你的实际路径):
代码段
Windows Registry Editor Version 5.00
; --- 添加右键菜单项 ---
[HKEY_CLASSES_ROOT\*\shell\CapsWriterTranscribe]
@="一键语音转文字 (CapsWriter)"
; 下面这行设置菜单图标,直接借用客户端的图标
"Icon"="D:\\Video-Transcribe\\CapsWriter-Offline-Windows-64bit\\start_client.exe"
; --- 定义点击后的动作 ---
; 调用我们编译好的 exe,并把文件路径 "%1" 传进去
[HKEY_CLASSES_ROOT\*\shell\CapsWriterTranscribe\command]
@="\"D:\\Video-Transcribe\\CapsWriter-Offline-Windows-64bit\\AutoTranscribe.exe\" \"%1\""
【至关重要】解决乱码问题:
点击记事本左上角的 “文件” -> “另存为”。
底部的 “编码” 选项,必须手动选为
ANSI。原因:Windows 注册表如果是 UTF-8 编码,中文会显示为乱码方块。
保存后,双击
AddMenu.reg导入注册表。
第三步:效果验证
冷启动测试:
确保 CapsWriter 没在运行。
右键视频 -> 点击“一键语音转文字”。
效果:右下角弹出气泡“正在启动...等待35秒”,35秒后自动弹出转换进度条。
热启动测试:
不要关闭刚才开启的服务端。
再次右键另一个视频。
效果:右下角弹出“服务端已就绪”,瞬间弹出转换进度条,秒开!
技术总结 (Technical Summary)
如果你想深入理解,这里有几个关键技术点:
AHK V2 语法:
使用了
ProcessExist()替代了旧版的Process, Exist。使用了
Run(Target, Dir, Options)函数式写法,更符合现代编程习惯。使用了
try...catch进行简单的错误捕获。
静默运行 (
Hide):start_server.exe本质是一个命令行工具,直接运行会有黑色窗口。通过 AHK 的Hide参数,我们将其隐藏在后台,保持桌面整洁。
ANSI 编码陷阱:
Windows 的
.reg文件在处理中文字符串时,默认依赖系统本地编码(GBK/ANSI)。如果使用编辑器默认的 UTF-8 保存,会导致注册表菜单显示乱码。
希望这个教程能帮到大家,把重复的劳动交给代码,把时间留给创造!
升级版:用bat批处理管理右键菜单
这是一个非常实用的需求!为了方便管理右键菜单,防止菜单越来越臃肿,使用 .bat (批处理) 脚本做一个“开关”是最优雅的解决方案。
这个脚本将集成 “一键添加” 和 “一键删除” 两个功能,无需再依赖 .reg 文件,完全独立运行。
✅ 解决方案:全能管理脚本 (ManageMenu.bat)
请在 D:\Video-Transcribe\CapsWriter-Offline-Windows-64bit\ 目录下新建一个文本文档,重命名为 ManageMenu.bat,然后右键选择“编辑”,粘贴以下代码。
⚠️ 重要提示:保存时编码依然要选择 ANSI,否则中文菜单会乱码。
代码段
@echo off
setlocal EnableDelayedExpansion
title CapsWriter 右键菜单管理工具
cd /d "%~dp0"
:: ============================================================================
:: 自动提权代码:确保以管理员身份运行,否则无法修改注册表
:: ============================================================================
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (
echo 正在请求管理员权限...
goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
:gotAdmin
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
pushd "%CD%"
CD /D "%~dp0"
:: ============================================================================
:: 主菜单界面
:: ============================================================================
:MENU
cls
echo ================================================================
echo CapsWriter 右键菜单管理助手
echo ================================================================
echo.
echo [1] 安装 / 修复 右键菜单 (Add)
echo.
echo [2] 卸载 / 清理 右键菜单 (Remove)
echo.
echo ================================================================
echo.
set /p user_choice=请输入数字 [1 或 2] 并回车:
if "%user_choice%"=="1" goto INSTALL
if "%user_choice%"=="2" goto UNINSTALL
goto MENU
:: ============================================================================
:: 安装逻辑
:: ============================================================================
:INSTALL
cls
echo 正在添加注册表项目...
:: 1. 创建主菜单项
reg add "HKEY_CLASSES_ROOT\*\shell\CapsWriterTranscribe" /ve /d "一键语音转文字 (CapsWriter)" /f >nul
:: 2. 设置图标 (指向当前目录下的 start_client.exe)
reg add "HKEY_CLASSES_ROOT\*\shell\CapsWriterTranscribe" /v "Icon" /d "%~dp0start_client.exe" /f >nul
:: 3. 设置执行命令 (指向当前目录下的 AutoTranscribe.exe,并传递文件路径 %%1)
:: 注意:%%1 在 bat 中代表参数,为了写入注册表变成 %1,需要双写百分号
reg add "HKEY_CLASSES_ROOT\*\shell\CapsWriterTranscribe\command" /ve /d "\"%~dp0AutoTranscribe.exe\" \"%%1\"" /f >nul
echo.
echo [成功] 右键菜单已添加!
echo 现在你可以在任意视频文件上右键看到该选项了。
echo.
pause
goto MENU
:: ============================================================================
:: 卸载逻辑
:: ============================================================================
:UNINSTALL
cls
echo 正在清理注册表项目...
:: 强制删除整个键值
reg delete "HKEY_CLASSES_ROOT\*\shell\CapsWriterTranscribe" /f >nul
echo.
echo [成功] 右键菜单已彻底移除!
echo.
pause
goto MENU
📖 代码逻辑详解 (小白教程 / 博客素材)
如果你要写博客,可以将这段脚本的技术原理拆解如下,显得非常硬核且专业:
1. 自动获取管理员权限 (Admin Rights)
脚本开头的 :UACPrompt 代码块是一个经典的 Bat 技巧。
原理:注册表
HKEY_CLASSES_ROOT是系统敏感区域,普通用户无法写入。逻辑:脚本启动时会检测当前是否为管理员,如果不是,它会创建一个临时的 VBScript 脚本来重新以“管理员身份”调用自己。这保证了用户双击打开也能正常工作,不会报错“拒绝访问”。
2. 动态路径获取 (%~dp0) —— 这是最关键的点
在之前的 .reg 文件中,我们把路径写死了(D:\Video...)。但在这个 .bat 脚本中,我使用了 %~dp0 变量。
含义:
%~dp0代表“当前批处理文件所在的盘符和路径”。优势:这意味着你可以把整个
CapsWriter文件夹移动到电脑的任何地方(比如移动到 E 盘,或者复制到 U 盘给别人用),只要运行一次这个 Bat 脚本,路径就会自动识别为当前新路径。你的工具变成了真正的“绿色便携版”!
3. 注册表操作命令 (reg add / reg delete)
我们抛弃了 .reg 文件,直接用命令行操作注册表,这样更干净。
安装 (Add):
/ve:设置默认值(菜单显示的文字)。/v "Icon":设置图标。\"%%1\":这里有两个%。因为在 Bat 脚本中%是转义字符,所以要表示注册表里需要的%1(代表被选中的文件),必须写成%%1。123
卸载 (Delete):456
reg delete ... /f:/f表示强制删除,不弹出“你确定吗”的询问,实现一键清理。789
📝 博客总结建议101112
在你的技术博客中,你可以这样总结这套**“终极方案”**:131415
版本迭代总结:161718
V1.0 (纯手工):每次都要手动开服务端、客户端,繁琐。192021
V2.0 (AHK + Reg):利用 AHK 自动化流程,通过
.reg文件导入右键菜单。缺点是路径写死,且无法方便移除菜单。222324V3.0 (AHK + Bat):最终完美版。2526
使用 AHK 编译出的 27EXE 处理复杂逻辑28(等待服务启动)。
使用 Bat 脚本管理注册表,实现了动态路径识别(文件夹随便搬家都不怕)。
提供了菜单管理面板,用的时候开启,觉得右键太乱随时一键删除,把选择权还给用户。
现在,你拥有了一个既能自动干活,又能随时“隐身”的强大工具了!
进一步升级
这是一个非常棒的进阶玩法!结合 ContextSearch 和 yt-dlp,你可以直接在网页链接上右键,实现“下载+转录”的一条龙服务。
根据你提供的路径和原教程逻辑 1111,我已经为你修改并优化了代码。
🚀 修改后的 ContextSearch 代码
请直接复制下面的代码块,粘贴到 ContextSearch 的 “命令” (Command) 输入框中:
DOS
tasklist /FI "IMAGENAME eq start_server.exe" 2>NUL | find /I /N "start_server.exe" >NUL || explorer "D:\Video-Transcribe\CapsWriter-Offline-Windows-64bit\start_server.exe" & start "" cmd /c yt-dlp --output "%USERPROFILE%\Downloads\Video\%(title)s.%(ext)s" --merge-output-format mp4 --no-mtime --exec "D:\Video-Transcribe\CapsWriter-Offline-Windows-64bit\start_client.exe" "{searchTerms}"
🔍 代码逻辑像素级拆解 (Detailed Breakdown)
这段代码虽然看着长,其实逻辑非常清晰,由 三个部分 组成,中间用 || 和 & 连接。
第一部分:智能启动服务端
DOS
tasklist /FI "IMAGENAME eq start_server.exe" 2>NUL | find /I /N "start_server.exe" >NUL || explorer "D:\Video-Transcribe\CapsWriter-Offline-Windows-64bit\start_server.exe"
tasklist ... | find ...: 这一串命令在问电脑:“现在有没有一个叫start_server.exe的程序在运行?”||(逻辑或): 意思是 “如果前面的命令失败了(没找到进程),那么就执行后面的”。explorer "D:\...\start_server.exe": 如果没找到服务,就根据你的路径启动服务端。注释:这里确保了服务端只会被启动一次,不会重复打开。
第二部分:调用 yt-dlp 下载视频
DOS
& start "" cmd /c yt-dlp --output "%USERPROFILE%\Downloads\Video\%(title)s.%(ext)s" --merge-output-format mp4 --no-mtime
&: 连接符,不管前面成不成功,都继续执行这一步。start "" cmd /c: 打开一个新的黑色命令行窗口来执行下载任务(方便你看到下载进度)。yt-dlp: 调用下载神器(你已经配置了环境变量,所以直接写名字就行)。--output "%USERPROFILE%\Downloads\Video\...":优化点:原教程用了
../../../这种相对路径,容易出错。我改成了%USERPROFILE%,这样视频会稳定下载到你电脑的 “下载/Video” 文件夹里。
--merge-output-format mp4: 强制将视频合并为 mp4 格式,方便 CapsWriter 读取。
第三部分:下载完自动转录 (关键!)
DOS
--exec "D:\Video-Transcribe\CapsWriter-Offline-Windows-64bit\start_client.exe" "{searchTerms}"
--exec: 这是 yt-dlp 的高级参数。意思是:“等文件下载完成后,执行后面的程序”。"D:\...\start_client.exe": 启动你的 CapsWriter 客户端。"{searchTerms}": 这里的逻辑是 yt-dlp 会把 下载好的视频文件路径 自动传递给start_client.exe。注意:ContextSearch 会把
{searchTerms}替换为你选中的网页链接,传给 yt-dlp 下载;下载完后,yt-dlp 会自动把本地文件路径传给 CapsWriter。
⚙️ 配置图示
参照你的截图,请确保以下设置正确:
名称: 随便填,例如
下载并转文字。命令: 粘贴上面那段长代码。
链接 (Link): 必须勾选(因为你是对链接进行操作)。
页面 (Page): 可以勾选(对当前页面链接操作)。
选中内容 (Selection): 不要勾选(除非你选中的是文本链接)。
💡 一个小建议
由于你的服务端启动需要 35秒 左右,而 yt-dlp 下载短视频可能只需要 5-10秒。
潜在问题:如果视频下载太快,服务端还没完全加载好,客户端就被 yt-dlp 唤起了,可能会导致连接失败。
解决方法:第一次使用时,建议先手动开启服务端,或者找个长一点的视频下载,让服务端有足够的时间“热身”。一旦服务端在后台跑起来了(热启动状态),这个流程就是秒开的!
安装context-search重要通信工具
这是一个非常关键的步骤。你遇到的报错 Messenger app is not connected 正是因为缺少了这个“原生应用” (Native App)。
ContextSearch 插件本身运行在浏览器的“沙盒”里,为了安全,它不能直接去指挥你的 Windows 系统(比如运行 yt-dlp 或打开软件)。你找到的这个 GitHub 项目正是那个“桥梁”程序,它负责把浏览器的指令传给 Windows。
由于你找到的是官方源码仓库,安装步骤稍微需要一点动手能力(因为它依赖 Python)。请按照以下步骤操作:
方法一:官方源码安装(需要安装 Python)
因为这个项目的官方版本是基于 Python 编写的,你需要先确保电脑里有 Python 环境。
第一步:安装 Python (如果电脑里没有)
去 Python 官网下载最新的 Python 安装包。
【至关重要】 在安装界面的第一页,务必勾选 "Add Python to PATH" (添加 Python 到环境变量)。如果不选这个,后面会报错。
一路点 "Install" 完成安装。
第二步:下载并安装 Native App
在你提供的 GitHub 页面上,点击绿色的 "Code" 按钮,选择 "Download ZIP"。
解压下载好的压缩包到任意位置(建议放在一个不会轻易删除的地方,比如 D 盘的一个固定文件夹)。
进入解压后的文件夹。
在文件夹空白处 右键 -> 选择 "在终端中打开" (Open in Terminal) 或者 "Git Bash Here"。
在黑色的窗口里输入以下命令并回车:
Bash
python install.py(如果提示
python不是命令,试着输入py install.py)屏幕上应该会显示 "Native App installed" 或类似的成功提示。
第三步:重启浏览器
彻底关闭 你的浏览器(包括后台)。
重新打开浏览器,进入 ContextSearch 的设置页面。
点击右下角的 Test 按钮,那个红色的
Messenger app is not connected应该就会消失了。
方法二:检查是否有“懒人包”(推荐)
你提到之前是看“阿虚同学”的教程操作的。通常这种整合教程里,作者为了方便小白,会把这个 Native App 打包成一个不需要 Python 的 .bat 文件。
建议你回过头去检查一下阿虚同学提供的下载包(比如叫 ContextSearch 或 NativeHost 的文件夹):
找找看里面有没有类似
install_host.bat或安装.bat的文件。如果有,直接双击运行它。
这通常会自动完成注册,比你自己去 GitHub 下载源码安装要简单得多,且不容易出错。
总结
你现在的配置逻辑(代码)是完全正确的,只要把这个“桥梁”安装好,整个流程(右键 -> 下载 -> 转录)就能立刻跑通!
这里有一个关于 Context Menu Search 扩展使用的基础教程视频,虽然它主要讲的是搜索功能,但能帮你理解这个扩展的工作逻辑:
Context Menu Search Chrome Extension Tutorial
(该视频演示了 ContextSearch 的基本配置逻辑,当你安装好 Native App 后,你的高级脚本功能将像视频中的基础搜索一样顺畅运行。)
一个小bug,在页面上自动检索(无需选中URL)
这是一个非常经典的**“空参数导致闪退”问题。恭喜你,最难的配置部分(ID连接)你已经搞定了,现在只需要改动一个“变量名”**就能完美运行!
❌ 为什么会“闪一下黑框就没了”?
因为你的代码最后用的是 "{searchTerms}"。
这个变量的意思是:“获取我在网页上选中的文字”。
你的测试操作:你在输入框里手动粘贴了链接,所以
{searchTerms}有值,脚本能跑通。你的实际操作:你在看视频时,直接点了这个工具,但你并没有用鼠标“选中”任何文字或链接。
结果:脚本传给
yt-dlp的是一个空值。后果:
yt-dlp不知道要下载什么,瞬间报错退出,所以黑框一闪而过。
✅ 解决方法:把“选中文字”改成“当前网址”
你需要告诉插件:“不管我有没有选中文字,请直接把当前网页的 URL 地址传给下载器。”
请按以下步骤修改代码:
打开 ContextSearch 的设置界面。
找到你的“一键视频转文字”脚本。
在 Command (命令) 编辑框里,拉到最末尾。
找到
"{searchTerms}",把它删掉,替换为"%url"(注意保留双引号,把大括号换成百分号)。
修改后的完整代码如下(请直接复制替换):
DOS
tasklist /FI "IMAGENAME eq start_server.exe" 2>NUL | find /I /N "start_server.exe" >NUL || explorer "D:\Video-Transcribe\CapsWriter-Offline-Windows-64bit\start_server.exe" & start "" cmd /c yt-dlp --output "%USERPROFILE%\Downloads\Video\%(title)s.%(ext)s" --merge-output-format mp4 --no-mtime --exec "D:\Video-Transcribe\CapsWriter-Offline-Windows-64bit\start_client.exe" "%url%"
注意:部分 ContextSearch 版本可能需要写成 %url 或者 "%url"。建议先尝试 "%url%" 或 "%url"。根据经验,"%url" 是最通用的写法。
⚠️ 保险起见,如果 "%url" 不起作用,请尝试 "%u"。
💡 进阶:如何更优雅地使用?
修改代码后,操作逻辑就变了:
以前 (逻辑):必须鼠标反蓝选中一个链接文本 -> 右键 -> 运行。
现在 (逻辑):只要你打开了 B 站视频页面 -> 在页面任意空白处右键 (或者点那个浮动图标) -> 运行。它会自动抓取你浏览器地址栏里的链接进行下载。
检查一下你的 Checkbox 设置:
确保你的设置里:
[x] Page (页面):一定要勾选(这代表允许在页面空白处触发)。
[x] Link (链接):建议勾选(允许你在视频封面上右键直接下载,不用点进去)。
[ ] Selection (选中内容):可以取消勾选(避免混淆)。
再次去 B 站试试吧,这次肯定能弹出来!

PLUS:无法下载youtube视频(代理设置问题)
从你提供的截图来看,yt-dlp 的运行卡在了:
[youtube] xvHW08aexgA: Downloading webpage
这意味着 yt-dlp 正在尝试连接 YouTube 服务器,但没有收到回应(或者连接被阻断了)。
这通常是因为:命令行工具(CMD)默认是不走你的“科学上网”代理软件的。即使你的浏览器能看 YouTube,CMD 里的 yt-dlp 也是连不通的,除非你显式地告诉它走代理。
解决方法:加上 --proxy 参数
你需要知道你本机代理软件的端口号。
找到端口号:
如果你用的是 Clash 系列,默认 HTTP 端口通常是
7890。如果你用的是 v2rayN,默认通常是
10809。(你可以在你的软件设置里看到“本地代理端口”或“HTTP 端口”)。
修改命令:
在你的命令里加上 --proxy http://127.0.0.1:端口号。
假设你的端口是 7890,正确的命令应该是:
Bash
yt-dlp --proxy http://127.0.0.1:7890 https://youtu.be/xvHW08aexgA(请把上面的
7890换成你实际的端口号)
其他可能的原因(如果加了代理还不行)
yt-dlp 版本过老:
YouTube 经常改接口,旧版工具无法解析。
请运行以下命令更新到最新版:
Bash
yt-dlp -UURL 参数干扰:
虽然一般不影响,但你的链接后面带了一长串 ?si=...(这是 YouTube 的分享追踪码)。
建议删掉问号及后面的内容,只保留视频 ID:
https://youtu.be/xvHW08aexgA
总结:先试着加上 --proxy 参数,99% 是这个问题。