【Mac対応】完全オフラインで使える無料文字起こしアプリ「Local Whisper」を開発した話
Macで無料&オフラインで使える文字起こしアプリを探していませんか?
- Web会議の相手の声も文字起こししたい
- サブスク料金は払いたくない
- データをクラウドに送信したくない
- 完全ローカルで安全に使いたい
この記事では、**Mac上で完全オフライン動作する無料文字起こしアプリ「Local Whisper」**を開発したので、その仕組み・技術構成・リアルタイム化の工夫を解説します。
Local Whisperとは?

Local Whisperは、Local 環境で Whisper(OpenAIが開発したSpeech To Textモデル)を動かすことから名づけました。Windows環境でも動かすことはできますが、CoreMLを使用できるMacOSの方が高速に動かすことができます。
特徴
- ✅ 完全オフライン動作(データ外部送信なし)
- ✅ サブスク不要・無料
- ✅ マイク音声+システム音声対応
- ✅ Web会議の相手の声も文字起こし可能
- ✅ Whisperベースで高精度
GitHub: https://github.com/y-dai20/local-whisper
なぜMacでオフライン文字起こしアプリを作ったのか
世の中には文字起こしアプリがたくさんあります。
しかし多くは:
- 月額課金(サブスク)
- クラウド送信必須
- Web会議ではBot参加が必要
正直、そこまで頻繁に使うわけでもないのに毎月課金するのは微妙。
また、音声データを外部に送ることに抵抗がある人も多いはず。
そこで、
ローカルで完結し、OSSベースで中身が分かる文字起こしアプリ
を作ることにしました。
Macで高速に動かす:whisper.cpp + CoreML
完全オフラインで高精度を実現するために採用したのが whisper.cpp です。
使用モデル
- Whisper large-v3-turbo
- Q5_0量子化
- CoreML最適化(Apple Silicon)
AppleのNeural Engineを利用することで、
約7秒の音声を1秒程度で文字起こし
できました。
Mac(Mシリーズ)環境であれば、十分リアルタイム運用可能です。
リアルタイム文字起こしを実現する工夫(Silero VAD + audio_ctx最適化)
そのままWhisperに長時間音声を渡すと、推論時間が蓄積し、徐々に遅延が大きくなってしまいます。
そこで、以下の2つを中心に最適化しました。
1. Silero VADによる無音区間の削除
まず、Silero VAD(Voice Activity Detection) を使って無音区間を事前に除去しています。
Whisperは無音部分もそのまま処理してしまうため、
- 無駄なEncoder処理が発生する
- レイテンシが蓄積する
- リアルタイム性が落ちる
という問題があります。
そこで、
- 音声を小さなチャンクに分割
- Silero VADで発話区間のみ抽出
- 無音部分はWhisperに渡さない
という構成にしました。
さらに、1秒以上の無音が続いた場合はセッションを終了し、 次の発話を新しいセッションとして扱うようにしています。
これだけでも、体感レベルで遅延はかなり改善します。
2. audio_ctxの削減でEncoder時間を半減
Whisperは推論時間のほとんどをEncoder部分が占めています。
デフォルトでは audio_ctx = 1500(約30秒相当)になっていますが、
リアルタイム用途ではそこまでのコンテキストは不要です。
そこで、
audio_ctx: 1500 → 750
に削減しました。
これにより、
- Encoder処理時間が約1000ms → 約500msに短縮
- レイテンシが半減
- リアルタイムにかなり近づく
という結果になりました。
リアルタイム文字起こしでは、
「少し長いコンテキスト」よりも「低遅延」の方が重要
なので、このトレードオフは非常に有効でした。
この2つの最適化によって、 Mac(Apple Silicon)上でもリアルタイムに近い低遅延文字起こしが実現できています。
Macでシステム音声を取得する方法(ScreenCaptureKit)
Macで一番難しかったのがシステム音声の取得。
通常は仮想オーディオデバイス(BlackHoleなど)を使いますが、 配布アプリとしては扱いづらい。
そこで採用したのが:
- Apple公式 ScreenCaptureKit
- Swift実装
- Rust(Tauri)からブリッジ呼び出し
この構成で、
- マイク音声
- Web会議の相手の声(システム音声)
- 画面録画
を同時取得できるようになりました。
結果的に、文字起こし付きWeb会議ツールのような状態になっています。
他の文字起こしアプリとの違い
| 比較項目 | Local Whisper | 一般的なクラウド型 |
|---|---|---|
| オフライン動作 | ✅ | ❌ |
| サブスク不要 | ✅ | ❌ |
| データ外部送信 | なし | あり |
| Web会議相手音声 | ✅ | △ |
| OSSベース | ✅ | ❌ |
技術構成
- 音声認識:whisper.cpp
- モデル:large-v3-turbo(Q5_0)
- 高速化:CoreML
- VAD:Silero VAD
- UI:Tauri(Rust + Web)
- システム音声取得:ScreenCaptureKit(Swift)
ElectronではなくTauriを選択した理由:
- 軽量
- Rustで実装可能
- ビルドが高速
開発期間
約3日。
Claude + Codexを活用し、POCを高速実装。
AIアシストによるプロトタイピングのスピードはかなり強力でした。
今後の予定
- ローカルLLMと連携し、要約機能を追加
- リアルタイム翻訳
- 文字起こし+翻訳の同時表示
完全ローカルで「会議しながら即翻訳」が目標。
まとめ:Macで無料&オフライン文字起こしは実現できる
現在の環境(Apple Silicon + whisper.cpp)なら、
サブスク不要・完全ローカルで実用的な文字起こしアプリは作れる
セキュリティ重視の方や、 コストを抑えたい方には特におすすめです。
ダウンロード・リポジトリ
GitHub: https://github.com/y-dai20/local-whisper
デモ動画も公開しています。