Whisperを自前でホストすれば、文字起こしデータを管理下にあるハードウェアに留めることができますが、「ローカル」であることは「自動的にプライバシーが保護される」こととは限りません。信頼できる環境には、適切なWhisperの実装、ダウンロード済みのモデルファイル、再現可能なオーディオ処理パイプライン、および一時ファイル、ログ、バックアップ、公開するローカルAPIをカバーするセキュリティ境界の4つが必要です。
本ガイドでは、現在利用可能な3つの方法を紹介します。OpenAIのリファレンスPythonパッケージ、最適化されたPython推論用のfaster-whisper、軽量なC/C++環境向けのwhisper.cppです。以下のコマンドとモデルに関する情報は、2026年8月28日に各プロジェクトの公式ドキュメントと照合済みです。
クイック推奨
- OpenAI Whisperから始める:リファレンス実装と、最もシンプルな公式CLIが必要な場合。
- faster-whisperを選ぶ:Pythonサービス、バッチ処理、量子化、統合された音声アクティビティ検出(VAD)が必要な場合。
- whisper.cppを選ぶ:コンパクトなネイティブビルド、Apple Siliconサポート、CPU重視の展開、公式Dockerイメージ、または小規模なローカルHTTPサーバーが必要な場合。
Whisperを自前でホストすることの意味と、そうでないこと
Whisperは音声認識モデルであり、オープンソースのコードベースです。自分のコンピュータで実装を実行すれば、録音データをホスト型の文字起こしAPIに送信することなく推論できます。必要なパッケージとモデルアセットが揃っていれば、インターネットに接続していなくても文字起こしを実行できます。
これは有用なプライバシー境界ですが、完全なセキュリティプログラムではありません。ローカル推論は、一時ファイル、コマンド履歴、アプリケーションログ、エクスポートされた文字起こし、OSバックアップ、共有フォルダ、ネットワークポートで待機するサービスを自動的に保護するものではありません。モデルインストーラーも、モデル名が最初に要求されたときに重みをダウンロードする場合があります。
ワークフローを「オフライン」と呼ぶ前に、ネットワークを無効にしてテストし、以下を確認してください。
- アプリケーションがパッケージやモデルを取得しようとせずに起動する
- 選択したモデルが既知のローカルパスから読み込まれる
- 入力オーディオと生成されたテキストが承認されたディレクトリに留まる
- 一時ファイルが保持ポリシーに従って削除される
- 意図したインターフェース以外からHTTPサーバーにアクセスできない
モデルを選ぶ前に実装を選ぶ
3つすべての方法でWhisperファミリーのモデルを実行できますが、依存関係、コマンド名、モデル形式、パフォーマンス特性は同一ではありません。他の実装向けに書かれたコマンドをコピーするのではなく、オペレーティング環境に合うランタイムを選択してください。
| 実装 | 最適な用途 | 主な依存モデル | 重要な境界 |
|---|---|---|---|
| OpenAI Whisper | リファレンスCLIとPython API | Python、PyTorch、FFmpeg | 適切なPyTorch CPU/CUDAビルドを選択 |
| faster-whisper | 最適化されたPythonサービス、バッチ処理、INT8、VAD | PythonとCTranslate2 | GPUライブラリ要件はインストールされたリリースにより異なる |
| whisper.cpp | ネイティブCPU/Appleビルド、量子化、Docker、ローカルサーバー | CMakeとサポートされているコンパイラ | 変換済みのGGMLモデルファイルと異なるCLI名を使用 |
モデルを選択し、ハードウェアのサイズを決定する
OpenAIは現在、6つのモデルサイズを公開しています。READMEには、特定の基準GPUで測定された推定VRAM要件と相対速度が記載されています。これらの数値はスクリーニングには有用ですが、保証ではありません。実際のメモリ使用量と速度は、実装、精度、バッチサイズ、ビームサイズ、言語、オーディオの長さ、ハードウェアに依存します。
| 公式モデル名 | パラメータ | OpenAIの表における推定VRAM | 実用的な出発点 |
|---|---|---|---|
| tiny | 39 M | ~1 GB | 高速なパイロットまたは制約のあるデバイス |
| base | 74 M | ~1 GB | 軽量な英語または多言語文字起こし |
| small | 244 M | ~2 GB | バランスの取れたCPUまたは控えめなGPUパイロット |
| medium | 769 M | ~5 GB | より高精度な多言語作業 |
| large | 1,550 M | ~10 GB | ハードウェアが許す場合の基準モデルの最大容量 |
| turbo | 809 M | ~6 GB | 高速な文字起こし、ただし翻訳は不可 |
OpenAIの表では、テスト比較においてturboはlargeの基準速度のおよそ8倍と説明されています。それを「すべてのコンピュータで8倍速い」という約束に変換しないでください。Turboは翻訳用にトレーニングされていません。英語以外の音声を英語に翻訳することが目的の場合は、代わりにmediumやlargeなどの多言語モデルを使用することをOpenAIは推奨しています。
英語のみの録音には、tiny、base、small、mediumの.enバリアントを試す価値があります。本番環境のサイズを決めるには、同じ代表的なファイルを2つの候補モデルで実行し、ピークメモリ、実時間、文字起こしエラー、修正時間を記録してください。
システムとクリーンなテストファイルを準備する
パッケージバージョンを可視化し、元に戻せるように、専用のプロジェクトディレクトリと仮想環境を作成してください。GPUでOpenAIのPython実装を使用する場合は、公式PyTorchインストーラーから、オペレーティングシステムとCUDAセットアップに対応する最新のPyTorchコマンドを選択してください。チュートリアルから古いCUDAホイールのURLをコピーするのは避けてください。
OpenAI WhisperにはFFmpegコマンドラインツールが必要です。サポートされているパッケージマネージャーまたは公式FFmpegダウンロードページからインストールし、以下で確認してください。
ffmpeg -version
python --version
FFmpegはすべてのWhisper実装において普遍的に必須の依存関係ではありません。たとえば、whisper.cppは独自のサンプルツールを通じてサポートされている入力をデコードできますが、オプションのFFmpeg統合によりフォーマットサポートが広がります。whisper.cpp用に予測可能な16 kHzモノラル16ビットWAVテストファイルを作成するには、以下を使用してください。
ffmpeg -i input.mp3 -ar 16000 -ac 1 -c:a pcm_s16le output.wav
名前、数字、2人の話者、静かな間、および1つのドメイン固有の用語を含む、同意を得た短いサンプルを使用してください。その1つのテスト用ファイルは、完璧にクリーンなデモクリップよりも多くの展開上の問題を明らかにします。
方法1: OpenAI Whisperをインストールする
プロジェクトディレクトリ内でターミナルを開き、仮想環境を作成してアクティブにし、最新のパッケージをインストールしてください。
python -m venv .venv
# Windows PowerShell
.\.venv\Scripts\Activate.ps1
# macOSまたはLinux
source .venv/bin/activate
pip install -U openai-whisper
公式CLIで最初の文字起こしを実行してください。
whisper audio.mp3 --model turbo
最初の実行では選択したモデルがダウンロードされる場合があります。完了後、期待される出力ファイルが作成されたことを確認し、ソースオーディオと照らし合わせていくつかのタイムスタンプを確認してください。英語以外の同言語文字起こしでは、自動検出が信頼できない場合は言語を指定してください。
whisper japanese.wav --language Japanese --model turbo
英語への翻訳にはturboを使用しないでください。
whisper japanese.wav --model medium --language Japanese --task translate
最小限のPython呼び出しも同様に直接です。
import whisper
model = whisper.load_model("turbo")
result = model.transcribe("audio.mp3")
print(result["text"])
方法2: faster-whisperをインストールする
faster-whisperはCTranslate2を介してWhisperモデルを実行します。設定可能な精度、バッチ処理、単語タイムスタンプ、または組み込みのVADフィルタリングを備えたPython統合が必要な場合に有用です。
python -m venv .venv
source .venv/bin/activate # Windows: .\.venv\Scripts\Activate.ps1
pip install faster-whisper
GPUパスを前提とするのではなく、明示的なデバイスと計算タイプから始めてください。
from faster_whisper import WhisperModel
model = WhisperModel("small", device="cpu", compute_type="int8")
segments, info = model.transcribe(
"audio.mp3",
beam_size=5,
vad_filter=True,
)
print("Detected language:", info.language)
for segment in segments:
print(f"[{segment.start:.2f} - {segment.end:.2f}] {segment.text}")
返されるセグメントは遅延生成されるため、それらを反復して文字起こしを実行してください。NVIDIA展開では、ブログ記事の古いCUDA/CUDNNの組み合わせに頼るのではなく、現在のfaster-whisperリポジトリのGPUライブラリ要件に従い、インストールされたバージョンを確認してください。
ベンチマークにはその条件が必要です。faster-whisperプロジェクトは現在、large-v2をINT8で使用した場合、RTX 3070 Ti 8GBで2,926 MBを使用し、ビームサイズ5およびリポジトリに記載されたソフトウェアスタックを使用した例を報告しています。その結果はテストされた構成を示しています。すべてのモデル、GPU、バッチサイズ、オーディオファイルが同じメモリを使用することを保証するものではありません。
方法3: whisper.cppをビルドする
現在のプロジェクトはggml-org/whisper.cppの下にあり、ドキュメント化されたクイックスタートではCMakeを使用しています。リポジトリをクローンし、変換済みモデルをダウンロードし、CLIをビルドしてください。
git clone https://github.com/ggml-org/whisper.cpp.git
cd whisper.cpp
sh ./models/download-ggml-model.sh base.en
cmake -B build
cmake --build build -j --config Release
明示的なモデルパスで文字起こしを実行してください。
./build/bin/whisper-cli \
--model models/ggml-base.en.bin \
--file output.wav
Windowsでは、実行ファイルはbuild\bin\Releaseのような構成固有のフォルダ内にある場合があります。実際のビルド出力からwhisper-cli --helpを使用して、バージョンのフラグを確認してください。
whisper.cppは量子化されたGGMLモデルもサポートしており、メモリとディスクの使用量を削減できます。量子化は品質と速度を変化させる可能性があるため、標準化する前に自分のテスト用ファイルで量子化された候補を非量子化の対応するものと比較してください。
エアギャップ環境の展開を準備する
エアギャップシステムは、不足しているPythonホイール、GPUライブラリ、モデルの重み、VADアセット、コンテナレイヤーを取得できません。まず接続されたステージングマシンで完全なマニフェストを作成してください。
- オペレーティングシステム、CPUアーキテクチャ、GPUモデル、ドライバーバージョン、Pythonバージョンを記録する。
- 正確なパッケージ、モデルファイル、オプションのVADモデル、およびそれらのチェックサムをダウンロードする。
- 組織の承認されたプロセスを通じてアセットを転送する。
- ローカルパスからインストールし、明示的なローカルモデルディレクトリを設定する。
- 受け入れテストの前にネットワークを切断する。
- テスト用ファイルを文字起こしし、出力を確認し、接続失敗の試行を監視する。
オンラインでの最初の実行が成功したからといって、オフライン展開が証明されたとは想定しないでください。ユーザー固有のキャッシュが満たされていた可能性がありますが、サービスアカウントや新しいコンテナでは存在しない可能性があります。本番で使用するのと同じID、ディレクトリ、起動方法を使用してテストしてください。
ローカルAPIまたはDockerサービスを安全に実行する
whisper.cppには、OpenAIのような文字起こしルートを持つHTTPサーバーであるwhisper-serverが含まれています。まずプロジェクトをビルドし、次にサーバーの現在のオプションを確認してください。
./build/bin/whisper-server --help
./build/bin/whisper-server \
--host 127.0.0.1 \
--port 8080 \
--model models/ggml-base.en.bin
他のマシンが本当にアクセスする必要がない限り、サービスをlocalhostにバインドしてください。Dockerのドキュメントでは、広くバインドされた場合、公開されたポートがホストの外からアクセス可能になる可能性があると警告しています。LAN上で意図的に文字起こしを公開する場合は、認証、TLS、リクエストサイズ制限、タイムアウト、アップロードの分離、および保持ポリシーを追加してください。ローカルプロセスはアクセス制御レイヤーではありません。
whisper.cppプロジェクトはプロジェクトDockerイメージも公開しています。コンテナを再作成したときにアセットを再度ダウンロードしないように、モデルディレクトリを永続化してください。
docker run --rm \
-v /absolute/path/models:/models \
-v /absolute/path/audio:/audios \
ghcr.io/ggml-org/whisper.cpp:main \
"whisper-cli -m /models/ggml-base.en.bin -f /audios/output.wav"
本番環境では、イメージのダイジェストまたはテスト済みのリリースを固定してください。コミュニティ製のラッパーは別のプロジェクトとして扱い、公式のOpenAIサービスとして提示するのではなく、リポジトリ、APIスキーマ、イメージのパブリッシャー、ライセンス、アップデート頻度、デフォルトのネットワーク設定を確認してください。
実際の音声を見逃さずにVADを使用する
音声以外の長いセクションは、自動文字起こしで不要な出力を生成する可能性があります。音声活動検出(VAD)を使用すると、デコード前に無音または音声以外の領域をスキップできるため、無駄な処理や無音に関連するエラーを減らせます。すべてのハルシネーションが解消されるとは限らず、しきい値を高く設定しすぎると、小さな声が削除される可能性があります。
faster-whisperでは、vad_filter=TrueでSilero VADを利用できます。まずはプロジェクトのデフォルト設定から始め、パラメータを変更する前に、一時停止、小さな声、音楽、ノイズの多い録音でテストしてください。
現在のwhisper.cppドキュメントでは、ダウンロード可能なSileroモデルと明確なVADフラグが提供されています:
./models/download-vad-model.sh silero-v6.2.0
./build/bin/whisper-cli \
--file output.wav \
--model models/ggml-base.en.bin \
--vad \
--vad-model models/ggml-silero-v6.2.0.bin
波形とカットポイントを照らし合わせて確認してください。一時停止の後の最初の音節が消えている場合は、見た目がすっきりしていても不完全な文字起こしを受け入れるのではなく、しきい値を緩めるか、検出された音声の前後に追加の余白を設けてください。
出力、タイムスタンプ、品質を確認する
コマンドが正常終了するだけでは不十分です。元の音声データを保存し、以下の簡単な受け入れチェックリストで文字起こしを確認してください:
- 完全性: 最初と最後の単語は含まれていますか?小さな声のフレーズがカットされていませんか?
- 名前と数字: 人名、製品名、日付、測定値、金額を確認してください。
- 言語: 検出された言語と、タスクが文字起こしか翻訳かを確認してください。
- タイムスタンプ: いくつかのセグメント境界に移動し、位置が合っているか確認してください。
- 無音時の挙動: 長い一時停止で、フレーズが繰り返されたり捏造されたりしていないか確認してください。
- 再現性: 実装バージョン、モデル、精度、フラグ、ハードウェア、ランタイムを記録してください。
字幕の場合は、行の長さポリシーを設定し、プレイヤーで最終的なSRTまたはVTTを確認してください。検索可能なメモの場合は、確認者が音声に戻れるようにタイムスタンプまたはセグメントIDを保持してください。機密性の高い素材については、変更不可能な元の録音と生成されたテキストを分離し、両方に明確な保持期間を適用してください。
オフラインのキャプチャから文字起こしまでのワークフローを構築する場合は、オフラインAIエッジ処理の仕組みおよびオフラインAI音声レコーダーの比較も参照してください。
一般的な失敗のトラブルシューティング
| 症状 | 確認すべき可能性のある原因 | 次のアクション |
|---|---|---|
| FFmpegが見つからない | 実行ファイルが不足しているか、PATHに含まれていない | 同じシェルでffmpeg -versionを実行し、PATHを修正する |
| CUDAが利用できない | CPU専用のPyTorchまたは互換性のないGPUライブラリ | ライブのPyTorchセレクターとプロジェクト固有のGPU要件を使用する |
| メモリ不足エラー | モデル、精度、バッチ、または同時ジョブがメモリを超過している | より小さなモデル、小さいバッチサイズ、またはサポートされている量子化計算タイプを試す |
| whisper.cppが音声を拒否する | ビルドされた例でサポートされていない形式 | 16 kHzモノラル16ビットWAVに変換するか、より幅広いデコードサポートをビルドする |
| 無音部分でテキストが繰り返される | 音声以外の部分がデコーダーに到達した | VADをテストし、カットポイントを確認し、モデル/デコード設定を比較する |
| 翻訳結果が元の言語で返される | 翻訳タスクにTurboが使用された |
--task translateとともにmediumまたはlargeなどの多言語モデルを使用する |
| オフライン起動時にダウンロードを試みる | モデル、ホイール、VADアセット、またはコンテナレイヤーが不足している | アセットマニフェストを完成させ、本番環境のIDでテストする |
よくある質問
Whisperは完全にオフラインで実行できますか?
はい、必要なソフトウェアとモデルアセットがローカルに保存されていれば、推論はインターネット接続なしで実行できます。ネットワークを無効にしてテストし、ダウンロード漏れ、一時ファイル、ログ、公開サービスがないか確認して、境界を証明してください。
どのWhisper実装を自ホストすべきですか?
標準のPython CLIにはOpenAI Whisper、量子化またはVADを備えた最適化されたPythonサービスにはfaster-whisper、ネイティブビルド、量子化されたGGMLモデル、Apple/CPUへの展開、Docker、または同梱のローカルサーバーにはwhisper.cppを使用してください。
WhisperにはFFmpegが必要ですか?
OpenAIのPython実装にはFFmpegコマンドラインツールが必要です。そのため、すべての実装にFFmpegが必須というわけではありません:whisper.cppは独自のサポートされているデコードパスと、より幅広い形式のためのオプションのFFmpeg統合を備えています。
turboモデルにはどのくらいのVRAMが必要ですか?
OpenAIのモデルテーブルでは、turboは約6 GBと記載されています。これは標準実装の計画見積もりとして扱ってください。実際の使用量は、ランタイム、精度、バッチサイズ、ハードウェア、同時ワークロードによって変化します。
turboモデルは音声を英語に翻訳できますか?
いいえ。OpenAIはturboは翻訳用にトレーニングされていないと述べています。英語以外の音声を英語に翻訳する場合は、mediumまたはlargeなどの多言語モデルを使用してください。
VADはすべてのWhisperハルシネーションを防げますか?
いいえ。VADはモデルに送られる音声以外の部分を減らし、無音に関連する出力を減らせる可能性がありますが、設定を攻撃的にしすぎると小さな音声も削除する可能性があります。代表的な音声でしきい値とセグメント境界を検証してください。
ローカルのWhisper APIはデフォルトでプライベートですか?
いいえ。ローカル処理はホストされた文字起こしAPIを回避できますが、サービスには依然としてインターフェースのバインド、共有時の認証、適切な場合のエンドツーエンド暗号化、アップロードの分離、ログ制御、保持ポリシーが必要です。

0件のコメント