如何使用Whisper和AutoHotkey制作Windows转录应用程序

如何使用Whisper和AutoHotkey制作Windows转录应用程序

OpenAI 的 Whisper 是将语音转换为文本的最强大的解决方案之一。然而,Whisper 使用起来也很烦人,因为您必须键入命令才能将音频文件转录为文本。但既然我们有了 AutoHotkey,为什么还要这么做呢?

借助 AutoHotkey,我们可以轻松地为 Whisper 等命令行应用程序创建基本的 GUI。那么,让我们这样做,看看如何通过将 AutoHotkey 的 GUI 制作超能力与 OpenAI 的 Whisper 作为按钮背后的“大脑”相结合来创建自己的转录应用程序。

推荐:如何在Windows 11中禁用圆角

为 Whisper 和 AutoHotkey 奠定基础

您可以使用 AutoHotkey 制作很酷的脚本,但这并不是它的全部功能。对于此项目,我们将使用 AutoHotkey 为 Whisper 创建 GUI。这将使我们能够通过单击按钮并使用菜单自定义其功能而不是键入命令来使用 OpenAI 的语音识别 AI 工具。

但是,这意味着您需要安装 AutoHotkey 和 Whisper 才能继续操作。

对于等式的第一部分,您可以从其官方网站下载 AutoHotkey,然后运行其安装程序并按照提供的步骤进行操作。

请注意,我们将使用脚本语言的旧“v1”版本,而不是新的 v2。这很重要,因为这两个版本使用稍微不同的语法。如果使用新的 v2,我们在这里看到的可能不起作用。

第二部分比较复杂,但您可以通过查看我们有关如何使用 OpenAI 的 Whisper for Windows 将语音转换为文本的文章来了解如何操作。

两者安装完毕后,我们的行动计划如下:

  1. 创建一个包含 Whisper 变量和值元素的 GUI。
  2. 创建函数以从界面获取值、选择文件和文件夹,并将所有内容组合成可用的 Whisper 命令。
  3. 运行 Whisper 命令以生成结果。

当然,您始终可以使用 Windows 内置的语音输入支持,正如我们在有关如何在 Windows 11 上启动语音输入的文章中看到的那样。不过,正如您在使用时会看到的那样,Whisper 更加准确(但是也较慢)。

就个人而言,我应该解释一下,我不是程序员,这个项目是供个人使用的解决方案的“混搭”。

如何制作新的 AutoHotkey 脚本

第一步是创建一个新的空白脚本文件。将其保存在自己的文件夹中,以防万一您决定对其进行调整或构建,创建更多文件。

  1. 运行您最喜欢的文件管理器(或按Windows 键+ E启动 Windows 资源管理器)并在您喜欢的任何位置为您的转录应用程序创建一个文件夹。
    创建项目文件夹
  • 右键单击窗口的空白处,然后选择“New  新建” > “AutoHotkey Script AutoHotkey 脚本”以创建一个空脚本文件。
    右键单击新建 Autohotkey 脚本
  • Shift + 右键单击​​文件可访问完整的上下文菜单,然后选择使用您喜欢的代码或文本编辑器打开它。Windows自带的Notepad  记事本就可以了。
    Shift 右键单击​​用编辑器打开
  • 尽管是“空脚本”,您的 AHK 文件已经预先填充了一些“内容”。这些是有用的 AutoHotkey 变量和标志,定义了它在桌面上的工作方式。忽略它们,让它们保持原样,并在它们下面完成所有未来的打字工作。
    vs Code 中的空白 Autohotkey 脚本

了解低语者的旗帜

由于我们正在为命令行应用程序制作 GUI,因此可以方便地引用我们将在项目中使用的主要变量和标志。您可以通过阅读 Whisper 的文档、访问其官方 Github 页面并在终端中运行来查看它们。

脚本中的耳语标记注释

为了方便起见,我们将列出将在该项目中使用的那些。我们建议您将它们作为注释添加到脚本中(在单独的行中,每行以“;”字符开头,后跟空格)。

; Whisper Flags:; 

使用 AutoHotkey 创建 GUI

我们建议您像我们一样使用注释将脚本分成几个部分,以保持脚本井井有条。我们将从定义一些变量开始,继续到实际的 GUI,最后定义其函数。

建立隐藏变量

我们从一个部分开始,我们将定义将来可能想要更改的变量,但不要太频繁,以至于我们希望通过 GUI 公开它们,从而使其过于复杂。您可以键入“Variable_Name = 变量的内容或值”,每行包含一个变量和值对。

对于这个项目,我们定义了一个OutputFormat变量,将其设置为“ txt ”值,以及一个WhisperExecutable变量,用于说明Whisper 的可执行文件名。这样,如果我们将来想使用相同的解决方案来创建 SRT 字幕文件而不是 TXT 文档或将 Whisper/switch 升级到替代应用程序,我们可以在该单个位置而不是在整个脚本中调整这些变量的值。

OutputFormat = txtWhisperExecutable = whisper
定义脚本变量

设置用户选项

在命令行上使用 Whisper 时,它的三个标志允许您定义:

  • 如果您正在进行translation翻译 transcription转录
  • 音频文件的language 语言
  • 您想要使用的语言model  模型(有多种大小可用,每种大小都会影响性能与结果质量)。

通过 GUI 提供相同功能的最简单方法是通过经过尝试和测试的下拉列表。将下拉列表添加到 AutoHotkey GUI 的语法如下:

Gui, Add, DropDownList, xPosition yPosition wWidth hHeight vVariable_that_will_hold_selected_value, optionA|optionB|default_optionC||optionD|

在此基础上,我们在脚本中添加三个下拉列表,用于选择 Whisper 的语言(英语/en 和希腊语/el 之间)、模型(小型、基础、小型、中型、大型)和任务类型(转录或翻译) 。

Gui, Add, DropDownList, x5 y5 w165 h50 vSelectedLanguage, en||el
Gui, Add, DropDownList, x175 y5 w165 h100 vSelectedModel, tiny|base|small||medium|large|
Gui, Add, DropDownList, x345 y5 w165 h100 vTaskType, transcribe||translate|

要将选项设置为默认选择,请在其后使用双管道符号(“|”)。您可以看到,在我们的示例中,我们将语言设置为en,将 SelectedModel 设置为Small,将 TaskType 设置为transcribe

定义 Gui 下拉列表

如何引导耳语

由于 Whisper 是基于人工智能的,因此无法绝对控制 Whisper 转录音频的方式。它可以自由选择它认为最佳的。

然而,与其他人工智能解决方案一样,Whisper 可以接受用户提示。通过制作提示,您可以“指导”它如何转录您的音频。

我们正在制定的解决方案是否无法正确转录某些内容?您可以尝试向 Whisper“解释”“语音文件的内容”,包括提示中的单词、首字母缩略词和短语的语法,因为您希望它们出现在转录中。为此,我们将添加一个 AutoHotkey 文本编辑字段。

语法与我们上面添加下拉列表所用的语法没有太大不同:

Gui, Add, Edit, x5 w505 h400 vPromptText, %PromptText%

末尾的“%PromptText%”“告诉”AHK 在文本字段中显示 PromptText 变量的内容(如果已经分配了值)。它不会在我们正在制作的脚本中显示任何内容,但当您将来最终调整脚本以保存和加载提示时,请将其视为占位符!

您愿意为PromptText变量分配预定义值吗?将如下内容添加到脚本的变量部分。请记住将“您的名字”替换为您的真实姓名。

PromptText = Transcription of Your Name's notes
定义提示文本编辑字段

设置操作按钮

在我们设置完所有内容后,选择文件、文件夹和运行 Whisper 时,最好使用按钮。您可以使用以下命令将按钮添加到 AHK 制作的界面:

Gui, Add, Button, xPosition yPosition wWidth hHeight gFunction_To_Perform, Button Text
添加操作按钮

请注意,与 GUI 元素中以字母“v”开头的变量不同,函数名称以“g”开头,表示“Go(到脚本的此位置)”。

AHK 界面的单个按钮也可以被视为“默认按钮”,如果您不单击 GUI 上的任何位置并按Enter 键,则会激活该按钮。这是通过在坐标和功能部分添加“默认”来定义的,正如您在我们的“确定”按钮中注意到的那样:

Gui, Add, Button, x5 w505 h50 gSelectFile, Load FileGui, Add, Button, x5 w505 h50 gSelectFolder, Choose Output Folder
​​​​​​​Gui, Add, Button, Default x5 w505 h50 gButtonSubmit, OK

通过以上内容,我们定义了三个按钮:

  • 一个标有“加载文件”的按钮,单击该按钮后将运行SelectFile函数。
  • 其中一个标有“选择输出文件夹”,它将运行SelectFolder函数。
  • 其中一个标有“ OK ”,默认选中,“调用” ButtonSubmit函数。

如何展示你的 GUI

我们的 GUI 已准备就绪,但不会出现在屏幕上,因为我们还没有“告诉”AutoHotkey 显示它或每个按钮应该做什么。

Autohotkey Gui 显示并返回

为此,请在定义 GUI 的行下方添加以下两行:

Gui, ShowReturn

第一行“告诉”AHK 显示 GUI 的窗口,而第二行则标记该部分的结束。

我们的应用程序的功能和功能

尽管我们已经完成了 GUI 部分,但如果您尝试运行该脚本,它将会崩溃。那是因为我们引用了其中不存在的函数。因此,我们的下一步就是创建这些功能。

按钮功能突出显示

我们想要的三个功能是:

  • 选择一个输入文件。
  • 选择将存储转录文件的输出文件夹。
  • 制作一个命令,将所有变量“组装”成可用的 Whisper 命令,类似于我们在终端中键入的命令,然后运行它。

输入文件选择

第一个函数,当我们将其按钮添加到 GUI 时,我们已经将其命名为“ SelectFile ”,它是:

SelectFile:FileSelectFile, SelectedFileReturn
添加故障排除消息框以选择文件

FileSelectFile是一个 AutoHotkey 函数,它显示典型的文件请求程序,允许用户选择文件。SelectedFile是我们脚本中的变量,它将“保存”用户选择的文件的路径。

但是,正如您将在我们的屏幕截图中看到的,我们还在函数结尾“return”的正上方添加了以下行:

MsgBox, %SelectedFile%

在我们选择文件后,AHK 将显示一个包含所选文件的消息框,这在对脚本进行故障排除时非常有用。如果此消息框显示您所选文件的路径和名称,则不需要修复文件选择按钮或功能。

输出文件夹选择

选择文件夹的函数几乎相同,只是命令的名称和变量发生了变化,以表明我们正在处理文件夹而不是文件:

SelectFolder:FileSelectFolder, SelectedFolderMsgBox, %SelectedFolder%Return
选择文件夹功能

最终函数

最终的函数将是最复杂的。映射到“确定”按钮,这将从 GUI“收集”所有变量值,将它们转变为可用的命令,然后运行它。

我们首先声明函数的开始和结束:

ButtonSubmit:Return
按钮提交空功能

要“获取”所有 GUI 的值,请在ButtonSubmit行下添加以下内容:

Gui Submit, nohide
按钮提交 GUI 提交

以下行创建一个名为“ WhisperFlags ”的新变量。然后它将所有 GUI 变量添加到其中作为 Whisper 命令的标志。

WhisperFlags = --initial_prompt "%PromptText%" --task %TaskType% --model %SelectedModel% --language %SelectedLanguage% --output_format %OutputFormat% -o "%SelectedFolder%" "%SelectedFile%"
按钮提交收集耳语标志

接下来,我们将“告诉”AHK 使用默认终端 (CMD.exe)与 GUI 变量(现在“组装”在单个WhisperFlags变量中)运行 Whisper 的可执行文件(我们使用 WhisperExecutable 变量定义) 。

RunWait, cmd.exe /c %WhisperExecutable% %WhisperFlags%
按钮提交运行等待Whisper可执行文件和标志

为了更轻松地进行故障排除,我们还像以前一样添加了一个消息框,但还添加了以下行:

Clipboard = %WhisperExecutable% %WhisperFlags%

这会将向 CMD 发出的完整命令复制到剪贴板。因此,如果出现问题,您不仅可以在 AHK 的消息框中看到该命令,还可以在剪贴板中看到该命令。

按钮提交故障排除复制命令到剪贴板

打开终端,粘贴剪贴板中的命令,然后检查弹出的错误以定位潜在问题。

检查 Cmd 中的命令

例如,在编写脚本时,我最初忘记将提示括在引号内。因此,该命令失败,因为 Whisper 尝试将提示解析为标志。

测试和最终调整

就是这样——我们刚刚使用 AutoHotkey 的 GUI 制作功能和即用型 AI 转录解决方案创建了一个转录应用程序。

尝试运行您的脚本(双击其文件),您应该在屏幕上看到 GUI。

  • 使用顶部的下拉列表更改 Whisper 的设置。
  • 在提示字段中输入转录的简短描述(以及一些术语)。
  • 单击“加载文件”按钮并选择要转录的音频文件。
  • 单击选择输出文件夹按钮并选择生成的文本文件的存储位置。
  • 单击“确定”,根据 GUI 的配置,对选定的音频文件释放 Whisper,并将其转录作为文本文件保存在您选定的文件夹中。

如果一切正常,请返回脚本并删除或注释掉(通过在开头添加“;”)所有故障排除功能(消息框和复制到剪贴板行)。

使用 AutoHotkey 进一步增强 Whisper

通过正确设置 GUI 的默认值并可能添加通用提示,您可以将 Whisper 转变为三键转录解决方案:无需为商业解决方案、第三方服务付费,无需摆弄复杂的界面或输入内容一个终端。

推荐:OpenAI推出语音转文本翻译Whisper API


发表评论