MacでWhisperをインストールして音声認識を試す(ローカル実行・Apple Silicon対応)

AI音声

Whisperとは(1分で把握)

WhisperはOpenAIが提供する音声→テキストの汎用ASR(Automatic Speech Recognition)モデル。多言語対応・雑音耐性が高く、ローカルでも動作します。

  • お手軽:Pythonパッケージで即動作
  • 速さ重視:faster-whisperwhisper.cpp
  • モデルはサイズ別(精度↔速度のトレードオフ)

Whisperは無料で使えます。オープンソース(MITライセンス)なので、Macなどでローカル実行する分には料金不要です。
プライバシー・コスト重視・少量処理の用途に向いており、逆にスピード・大量処理・安定性重視な業務用途では有料のAPI版もおすすめです。

本記事では、Macにローカル環境構築を行います。

前提環境と用語

  • Mac(Apple Silicon推奨:M1/M2/M3世代、Intel Macでも可)
  • Homebrew(パッケージ管理)
  • Python 3.10+(仮想環境での利用推奨)
  • FFmpeg(音声/動画のデコードに必須)

1. 最短ルート:Python版Whisperを入れて動かす

最新のPython環境が整っていれば、whisperはpip installで簡単に導入が可能です。
初めての場合など、必要に応じてPython環境の準備から行います。

1-1. Homebrew & Python仮想環境の準備

まずHomebrewを導入します。既に入っている場合はそのままで構いません。

# /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

次にPythonを導入します。

Macに標準で入っているものはとは別にインストールすると便利です。
バージョンは3.11以降など新しいもので問題ありません。

brew install python@3.11

また、検証用の作業ディレクトリ(例:~/Works/whisper_try)を用意しておくと便利です。

mkdir -p ~/Works/whisper_try && cd ~/Works/whisper_try

最後に仮想環境を作成・有効化します。仮想環境は無くてもOKです。

python3 -m venv .venv
source .venv/bin/activate

1-2. FFmpegの導入

Whisperは内部で音声を読み込む際にFFmpegを利用します。未導入の場合はインストールしましょう。

brew install ffmpeg

ここれはHomebrewを利用しています。導入済みでパスが通っていればOKです。

1-3. openai-whisper のインストール

whisperをインストールします。仮想環境を利用する場合は、念の為pipもupgradeしましょう。

pip install --upgrade pip
pip install openai-whisper

Apple Silicon環境ではPyTorchの準備で時間がかかる場合がありますが、そのまま待てばOKです。

1-4. はじめての文字起こし

CLIまたはPythonからWhisperを呼び出し、音声ファイルを変換します。

  • すでに手元の音声ファイル(.m4a / .mp3 / .wav)があればそれを使ってOK
  • ない場合は、QuickTime PlayerでMacのマイクから数十秒録音して保存
ボイスメモを使う場合

「ボイスメモ」アプリでも録音可能です。録音後、左側の一覧で対象を右クリック → 「書き出す」 を選ぶとデスクトップなど任意の場所に .m4a 形式で保存できます。

録音品質(マイク・環境)が大きく影響するため、外部マイクの利用、静かな環境での録音をお勧めします。

また長時間音声(30分以上)はWhisperのメモリ消費が増えるため、FFmpeg等で分割してから処理することをおすすめします。

試験用途のサンプルは、sayコマンドを使って生成することもできます。精度の確認に便利です。

1. AIFF形式で合成音声を作成

say -v Kyoko "これはWhisperのテスト用音声サンプルです。" -o sample.aiff

2. AIFF→WAV変換

ffmpeg -i sample.aiff sample.wav

3.テストで WAVファイルを再生

afplay sample.wav

1-4-2. CLIを使う方法

  • 最も軽量なtinyモデルで試すサンプルです。文字起こしの結果が sample.txt に出力されます
whisper sample.m4a --model tiny --language Japanese --task transcribe --output_format txt

※初回実行時は指定モデル(例: tiny)が自動ダウンロードされます(数百MB〜数GB)。2回目以降は再利用されるため高速です。

  • CPU動作では警告(FP16→FP32)が表示される場合がありますが、正常な動作です。
  • 言語自動判定に任せるなら –language は省略可能です。
  • 認識精度を上げたい場合は --model small--model medium もお試しください。
    (後述の「モデルの選び方」も参照)。
実行例(実際の出力ログ)

下記は、Sayコマンドで作成したWAVファイルを、tinysmall モデルで文字起こしした例です。
tinyでは一部、誤認識が見られますが、smallでは正確に認識できています。

$ whisper sample.wav --model tiny --language Japanese --task transcribe --output_format txt
[00:00.000 --> 00:03.200] これはウィスパーのテストようウォン生産プルです

$ whisper sample.wav --model small --language Japanese --task transcribe --output_format txt
[00:00.000 --> 00:05.000] これはウィスパーのテスト用音声サンプルです。

1-4-3. Pythonスクリプトで使う方法

smallモデルを試すサンプルです。結果を標準出力に出力します。

Pythonからの呼び出しは、自動化等でスクリプト内で処理をカスタマイズしたい場合に便利です。

transcribe.py

import whisper
import sys

# "tiny" "base" "small" "medium" "large-v3" など
MODEL_NAME = "small"    # 日本語は small 以上がバランス良

def main(audio_path: str):
  model = whisper.load_model(MODEL_NAME)
  
  # 実用では、句読点やカナ表記はポスト処理で整えるのがおすすめ
  result = model.transcribe(audio_path, task="transcribe", language="Japanese")
  print(result["text"]) 

if __name__ == "__main__":
  if len(sys.argv) < 2:
    print("Usage: python transcribe.py ")
    sys.exit(1)
  
  main(sys.argv[1]) 

実行例は下記の通り。

$ python transcribe.py sample.m4a
これはウィスパーのテスト用音声サンプルです。

CPU動作では警告(FP16→FP32)が表示される場合がありますが、正常な動作です。

モデルの選び方(tiny/base/small/medium/large)

本記事ではtinyとsmallのみ紹介していますが、他にも下記のような選択肢があります。

  • tiny / base:速い・軽い。まずは動かす用/ノート取り/会議の要点拾い
  • small:バランス良い。日本語でも実務の下書きに耐えることが多い
  • medium:精度↑。下処理や長時間に強い
  • large/large-v3:最上位の精度。ただし重い(メモリ・時間)

録音品質(マイク・環境)が良ければsmallモデルでも驚くほど読めます。
小さめのモデルから始め、必要時により大きなモデルを試す、という運用が効率的です。

ファイルサイズと用途の目安をまとめておきます。(2025年10月時点)

モデル名サイズ目安精度用途例
tiny~75MB動作確認/要点拾い
base~142MBやや低ノート/会議メモ
small~461MB実務下書き/議事録
medium~1.5GB長時間/高精度
large-v3~2.9GB最高校正/重要用途

実用のためのTIPS(句読点・話者分離・長時間)

  • 句読点:Whisperは基本つけてくれますが、校正スクリプトで整えると読みやすさが段違い。
  • 話者分離(ダイアライゼーション):Whisper単体では話者区別が弱め。pyannote.audioinsanely-fast-whisper 等のツール併用が有効。
  • 長時間音声5〜15分程度ならそのまま。1時間超は分割処理(FFmpegでチャンク化)を推奨します。恒常的に長時間音声を扱う場合は、faster-whisper等の利用も検討の対象となります。
    • 分割例:
      • ffmpeg -i long.m4a -f segment -segment_time 600 -c copy out_%03d.m4a

よくあるエラーと対処

  • ffmpeg not foundbrew install ffmpeg を忘れていないか確認。which ffmpeg でパスを確認します。
  • ModuleNotFoundError: torchopenai-whisper は内部でPyTorchを使います。仮想環境を作り直し、pip install --upgrade pip の上で再度インストールし直してみましょう。
  • メモリ不足/遅い:モデルを小さく(small→base)、もしくはfaster-whisper(int8)へ切替え。
  • 文字化け/記号が多い:録音品質の見直し(マイク距離、雑音)。語尾処理はポストプロセスで整形。

FAQ(よくある質問)

Q1. API版(クラウド)と何が違う?
A. この記事はローカル実行(APIキー不要)の方法です。クラウド版はサーバで処理されるため速度・精度が安定しやすい一方、コストとプライバシーの考慮が必要です。

Q2. Apple Silicon(M1/M2/M3/M4/M5)でも実行可能ですか?
A. はい。Apple Siliconは、CPUでも実用的な速度が出ます。

Q3. 日本語の精度を上げるには?
A. モデルをsmall/medium以上に、録音品質を改善(外部マイク、静かな環境)。長音・固有名詞は後編集で辞書補正する運用が現実的です。

Q4. 句読点や段落分けがいまいち…
A. ポスト処理で句点ごとに改行見出し付与を自動化しましょう。将来的に話者分離の併用で読み物品質が上がります。

Q5. 動画(.mp4)からも文字起こしできますか?
A. 可能です。WhisperはFFmpegで音声抽出→文字起こしを行います。CLIでもPythonでも拡張子は気にせずOKです。

Q6. 商用利用は可能?
A. Whisperやモデル自体はオープンソースでMITライセンスで商用利用も可能ですが、法務観点(音源の権利・機密性)は別途ご確認ください。

Q7. GPUは使える?
A. Macでは基本CPU実行ですが、Linux/Windows環境ではGPU(CUDA)対応のPyTorchで高速化可能です。

Q8. 文字起こし結果の自動整形方法は?
A. ポストプロセスで句点ごとに改行、見出し付与、カナ表記補正などをPythonスクリプト等で自動化可能です。

まとめ

  • 最短ルートbrew install ffmpegpip install openai-whisperwhisper sample.m4a --model tiny
  • 実用small 以上 + 録音品質の改善
  • 高速化faster-whisper(int8)whisper.cpp も用途に応じて検討
  • 長時間音声:分割処理・後編集・話者分離の導入

タイトルとURLをコピーしました