WhisperとAutoHotkeyであなた自身のWindows用文字起こしアプリを作る方法

w_y_z_oPEのWhisperは、音声からテキストに変換するための最も強力なソリューションの1つです。ただし、Whisperは音声ファイルをテキストに変換するためにコマンドを入力する必要があるため、使いにくいこともあります。しかし、AutoHotkeyがあるのに、なぜそんなことをするのでしょうか?

AutoHotkeyを使えば、Whisperのようなコマンドラインアプリの基本的なGUIを簡単に作成できます。では、AutoHotkeyのGUI作成の超能力とw_y_z_oPEのWhisperをボタンの背後にある「頭脳」として組み合わせることで、あなた自身の文字起こしアプリを作成する方法を見てみましょう。

WhisperとAutoHotkeyの基盤を築く

AutoHotkeyを使ってクールなスクリプトを作成することができますが、それはAutoHotkeyができることのすべてではありません。このプロジェクトでは、AutoHotkeyを使ってWhisperのGUIを作成します。これにより、コマンドを入力する代わりに、ボタンをクリックしたり、メニューを使って機能をカスタマイズしたりすることで、w_y_z_oPEの音声認識ツールを使用することができます。

しかし、これにはAutoHotkeyとWhisperの両方をインストールする必要があることを意味します。

最初のステップでは、AutoHotkeyを公式サイトからダウンロードし、インストーラーを実行して、表示される手順に従います。

新しいv2ではなく、古い「v1」バージョンのスクリプト言語を使用することに注意してください。これは、2つのバージョンでは構文が多少異なるため、重要です。ここでは、新しいv2を使用すると機能しない可能性があります。

2番目のステップはより複雑ですが、w_y_z_oPEのWhisperでWindowsの音声をテキストに変換する方法に関する記事を確認することで、その方法を学ぶことができます。

両方をインストールしたら、私たちのアクションプランは以下の通りです。

  1. Whisperの変数と値のための要素を持つGUIを作成します。
  2. インターフェースから値を取得し、ファイルとフォルダーを選択し、すべてを1つの使用可能なWhisperコマンドにまとめる関数を作成します。
  3. Whisperコマンドを実行して結果を生成します。

もちろん、Windows 11で音声入力の開始方法に関する記事で見たように、Windowsの組み込みの音声入力のサポートを常に使用することもできます。それでも、使用すればわかるように、Whisperははるかに正確です(ただし、速度は遅くなります)。

個人的な話になりますが、私はプログラマーではなく、このプロジェクトは個人的な使用のために作られたソリューションの「リミックス」であることを説明しておく必要があります。

新しいAutoHotkeyスクリプトを作成する方法

最初のステップは、新しい空白のスクリプトファイルを作成することです。後で微調整したり、拡張したり、さらに多くのファイルを作成したりすることにした場合に備えて、独自のフォルダーに保管してください。

  1. お気に入りのファイルマネージャーを実行(またはWindowsキー+Eを押してWindowsエクスプローラーを起動)し、好きな場所に文字起こしアプリ用のフォルダーを作成します。
  2. ウィンドウの空白部分を右クリックして、新規>AutoHotkeyスクリプトを選択して、空のスクリプトファイルを作成します。
  3. ファイルの上でShiftキーを押しながら右クリックして、フルコンテキストメニューにアクセスし、お気に入りのコードエディターまたはテキストエディターで開くことを選択します。Windows独自のNotepadで十分です。
  4. AHKファイルは「空のスクリプト」であるにもかかわらず、すでにいくつかの「内容」が事前に設定されています。これらは、デスクトップ上でどのように機能するかを定義する便利なAutoHotkeyの変数とフラグです。それらを無視してそのままにしておき、その下に将来の入力をすべて行います。

Whisperのフラグを知る

コマンドラインアプリのGUIを作成しているので、プロジェクトで使用する主要な変数とフラグを参照しておくと便利です。Whisperのドキュメントを読んだり、公式のGithubページにアクセスしたり、ターミナルで実行したりすることで、それらを確認することができます。

便宜上、このプロジェクトで使用するフラグをリストアップします。それらをスクリプトにコメントとして(別々の行に、それぞれがスペースに続く「;」文字で始まるように)追加することをお勧めします。

; Whisper Flags:; --initial_prompt PROMPT_TEXT; --output_format txt; -o OUTPUT_FOLDER; --model MODEL_TO_USE; --task TRANSCRIBE/TRANSLATE; --language EN/EL

AutoHotkeyでGUIを作成する

スクリプトを整理するために、私たちのようにコメントを使ってセクションに分割することをお勧めします。まず、いくつかの変数を定義し、実際のGUIに進み、最後にその関数を定義します。

隠れた変数を確立する

将来変更したい可能性があるが、GUIを介して公開して複雑にしすぎるほど頻繁に変更する必要のない変数を定義するセクションから始めます。「Variable_Name = Content or value of the variable」と入力し、1行に1つの変数と値のペアを指定します。

このプロジェクトでは、OutputFormat変数を「txt」の値に設定し、WhisperExecutable変数をWhisperの実行ファイル名に設定しました。このようにしておけば、将来同じソリューションを使ってTXTドキュメントの代わりにSRT字幕ファイルを作成したり、Whisperをアップグレードしたり、別のアプリに切り替えたりしたい場合、スクリプト全体ではなく、その1か所にある変数の値を調整することができます。

OutputFormat = txtWhisperExecutable = whisper

ユーザーオプションの設定

コマンドラインでWhisperを使用する場合、3つのフラグで以下を定義することができます。

  • 音声ファイルの言語
  • 使用する言語モデル(さまざまなサイズがあり、それぞれがパフォーマンスと結果の質に影響します)。
  • GUIを通じて同じ機能を提供する最も簡単な方法は、試行錯誤されたドロップダウンリストを使用することです。AutoHotkey GUIにドロップダウンリストを追加する構文は以下の通りです。

    Gui, Add, DropDownList, xPosition yPosition wWidth hHeight vVariable_that_will_hold_selected_value, optionA|optionB|default_optionC||optionD|
    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に設定していることがわかります。

    Whisperをガイドする方法

    WhisperはAIベースなので、Whisperがどのように音声を文字起こしするかを完全に制御することはできません。Whisperは、最適と考えるものを自由に選択します。

    しかし、他の AI ソリューションと同様に、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」で始まることに注意してください。これは、「(スクリプトのこの場所に)移動する」という意味です。

    AHKインターフェースの1つのボタンは「デフォルトのボタン」とみなすこともでき、GUIのどこもクリックせずにEnterを押すと、そのボタンがアクティブになります。これは、「OK」ボタンのように、座標と関数セクションに「default」を追加することで定義されます。

    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

    上記のコードでは、3つのボタンを定義しています。

    • Load File」というラベルのボタンは、クリックするとSelectFile関数が実行されます。
    • Choose Output Folder」というラベルのボタンは、SelectFolder関数が実行されます。
    • デフォルトで選択されている「OK」というラベルのボタンは、ButtonSubmit関数を「呼び出し」ます。

    GUIの表示方法

    私たちのGUIは準備ができていますが、AutoHotkeyにそれを表示する方法や各ボタンが何をするべきかを「伝えて」いないので、画面には表示されません。

    そのためには、GUIを定義するものの下に次の2行を追加します。

    Gui, ShowReturn

    1行目はAHKにGUIのウィンドウを表示することを「伝えて」おり、2行目はセクションの終わりを示しています。

    私たちのアプリの機能と機能

    GUIセクションは完成しましたが、スクリプトを実行しようとするとクラッシュします。これは、存在しない関数が参照されているためです。したがって、次のステップはこれらの関数を作成することです。

    必要な3つの関数は以下の通りです。

    • 入力ファイルを選択する。
    • 文字起こしされたファイルを保存する出力フォルダーを選択する。
    • すべての変数を1つの使用可能なWhisperコマンドに「組み立て」、ターミナルで自分自身で入力するのと同じように作成し、それを実行するコマンドを作成する。

    入力ファイルの選択

    GUIにボタンを追加したときにすでに「SelectFile」と名付けた最初の関数は以下の通りです。

    SelectFile:FileSelectFile, SelectedFileReturn

    FileSelectFileは、ユーザーがファイルを選択できるようにする典型的なファイルリクエストを表示するAutoHotkey関数です。SelectedFileは、ユーザーが選択したファイルへのパスを「保持」するスクリプト内の変数です。

    しかし、スクリーンショットで見られるように、関数終了の「return」のすぐ上に次の行を追加しました。

    MsgBox, %SelectedFile%

    これにより、AHKは選択したファイルを選択後にメッセージボックスを表示します。これは、スクリプトのトラブルシューティングに役立ちます。このメッセージボックスに選択したファイルのパスと名前が表示されている場合、修正が必要なのはファイル選択ボタンまたは関数ではありません。

    出力フォルダーの選択

    フォルダーを選択する関数はほとんど同じで、コマンドの名前と変数だけが変更され、ファイルではなくフォルダーを扱っていることを示しています。

    SelectFolder:FileSelectFolder, SelectedFolderMsgBox, %SelectedFolder%Return

    最終的な関数

    最終的な関数は最も複雑なものになります。OKボタンにマッピングされたこの関数は、GUIからすべての変数値を「収集」し、それらを使用可能なコマンドに変換してから実行します。

    関数の始まりと終わりを次のように記述します。

    ButtonSubmit:Return

    GUIのすべての値を「取得」するには、ButtonSubmit行の下に以下を追加します。

    Gui Submit, nohide

    次の行は「WhisperFlags」という新しい変数を作成します。次に、Whisperコマンドのフラグとして、GUIのすべての変数をそれに追加します。

    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%

    さらに簡単なトラブルシューティングのために、以前のようにmsgboxを追加しましたが、次の行も追加しました。

    Clipboard = %WhisperExecutable% %WhisperFlags%

    これにより、CMDに発行された完全なコマンドがクリップボードにコピーされます。したがって、何かが失敗した場合、AHKのメッセージボックスの1つにコマンドが表示されるだけでなく、クリップボードでも使用できるようになります。

    ターミナルを開き、クリップボードからコマンドを貼り付け、ポップアップするエラーを確認して、潜在的な問題を見つけます。

    たとえば、スクリプトに取り組んでいる間、最初はプロンプトを引用符で囲むのを忘れていました。そのため、Whisperがプロンプトをフラグとして解析しようとしたため、コマンドは失敗しました。

    テストと最終的な微調整

    これで完了です。AutoHotkeyのGUI作成機能とすぐに使用できる AI 文字起こしソリューションを使用して、文字起こしアプリを作成しました。

    スクリプトを実行してみて(ファイルのダブルクリック)、GUIが画面に表示されるはずです。

    • 上部のドロップダウンリストを使用してWhisperの設定を変更します。
    • プロンプトフィールドに文字起こしの簡単な説明(およびいくつかの用語)を入力します。
    • ファイルの読み込みボタンをクリックし、文字起こしする音声ファイルを選択します。
    • 出力フォルダーの選択ボタンをクリックし、生成されたテキストファイルを保存する場所を選択します。
    • OKをクリックして、GUIで設定した構成でWhisperを音声ファイルに適用し、選択したフォルダーにテキストファイルとして文字起こしを保存します。

    すべて正常に動作したら、スクリプトに戻り、すべてのトラブルシューティング機能(メッセージボックスとクリップボードへのコピー行)を削除するか、コメントアウトします(行頭に「;」を追加します)。

    AutoHotkeyでWhisperをさらに活用する

    GUIの既定値を正しく設定し、一般的なプロンプトを追加することで、Whisperを3クリックで文字起こしできるソリューションに変えることができます。商用ソリューションにお金を払ったり、サードパーティのサービスを使用したり、複雑なインターフェースをいじったり、ターミナルに入力したりする必要はありません。