はじめに
以前の記事では、OpenAIのWhisperをPythonコンソール上で利用し、文字起こしを行いました。
今回はその拡張版であるWhisperXを使い、「誰が、いつ、何を話したか」まで自動で判別できる文字起こしを試してみます。
WhisperXとは?
WhisperXは、OpenAIのWhisperをベースに
- 話者分離(Speaker Diarization)
- 精密なタイムスタンプ補正
- GPU(MPS)対応による高速化
などを追加したツールで、ローカル環境でもAPIキー不要で動作します。
実行環境
| 項目 | 内容 |
|---|---|
| デバイス | Mac Studio (M2 Max) |
| OS | macOS Sonoma |
| Python | 3.11.8 (Homebrew) |
| WhisperX | 3.4.3 |
| Torch | 2.2.2 (MPS有効) |
インストール手順
WhisperXはGitHubから直接インストール可能です。
Apple Silicon (M1/M2) 環境では、HomebrewのPython 3.11を利用するのが安定します。
# 仮想環境作成
/opt/homebrew/bin/python3.11 -m venv ~/venvs/whisperx
source ~/venvs/whisperx/bin/activate
# 依存の導入
pip install -U pip wheel setuptools
pip install torch==2.2.2 torchaudio==2.2.2
pip install "git+https://github.com/m-bain/whisperX.git" --no-deps
# 追加依存(WhisperXで必要)
pip install numpy pandas==2.2.3 onnxruntime nltk==3.9.1 transformers==4.48.0 faster-whisper==1.1.1 ctranslate2==4.4.0 pyannote.audio==3.3.2
実行例
python -m whisperx /path/to/sample.wav --model large --compute_type float16 --diarize --output_format srt
上記のコマンドを実行すると、自動的にモデルをダウンロードし、文字起こし+話者分離付きの .srt / .txt ファイルが生成されます。
パラメータについて
WhisperXのCLIコマンドでは、いくつかのオプションを指定することで動作を細かく制御できます。
主なパラメータの意味を以下に整理します。
| パラメータ | 説明 | 推奨値 / 備考 |
|---|---|---|
audio_file |
入力する音声ファイルのパス(.wav, .mp3, .flacなど) | 例:/path/to/sample.wav
|
--model |
使用するモデルサイズ |
tiny, base, small, medium, large など。日本語精度を重視する場合は large 推奨 |
--compute_type |
計算精度の指定 | GPU使用時は float16、CPUのみの場合は int8 または float32
|
--device |
使用デバイス | 明示的に指定する場合は cpu, cuda, mps(Apple Silicon) |
--output_dir |
出力ファイルの保存ディレクトリ | デフォルトはカレントディレクトリ |
--output_format |
出力形式 |
txt, srt, vtt, json などを指定可能。複数指定もOK(例:--output_format txt,srt) |
--diarize |
話者分離を有効化 | 話者ラベル(SPEAKER_00など)を自動で付与 |
--min_speakers |
話者の最小数を指定 | 例:--min_speakers 2。自動判定の精度向上に有効 |
--max_speakers |
話者の最大数を指定 | 長い会議音声などで有効 |
--align_model |
タイムスタンプ補正モデル | 通常は自動選択されるが、精度を微調整したい場合に指定 |
--vad_onset / --vad_offset
|
無音判定の閾値 | デフォルトで十分だが、音の切れ目がズレる場合に調整可能 |
--batch_size |
一度に処理するチャンクサイズ | デフォルトは自動調整。GPUメモリが潤沢なら大きくして高速化可 |
💡 モデルサイズ別の目安
| モデル名 | 精度 | 処理速度(5分音声) | 日本語対応 | 備考 |
|---|---|---|---|---|
tiny |
△ | 約15秒 | △ | 軽量・試験向け |
base |
○ | 約30秒 | ○ | テスト・英語中心 |
small |
◎ | 約1分 | ◎ | 実用バランス |
medium |
◎◎ | 約2分 | ◎◎ | 精度重視 |
large |
オススメ! | 約3〜5分 | オススメ! | 最精度・商用利用向け |
時間はかかりますが、日本語音声ではlargeモデルの精度が圧倒的に高いと感じました。
もしお時間に余裕があり、あまり長い音声等でない場合にはlargeを利用されることをオススメします。
出力結果例(抜粋)
1
00:00:00,000 --> 00:00:02,300
SPEAKER_00: おはようございます。
2
00:00:02,500 --> 00:00:04,200
SPEAKER_01: 今日の会議、10時からですよね?
WhisperXでは、話者ごとに発言を区別し、タイムスタンプもより精密になります。
所感
WhisperXを使うことで、従来のWhisperよりも会議録・対談・インタビューの自動文字起こしが圧倒的に現実的になりました。
特に以下の点が印象的です。
- 精度の高い話者分離(会話形式のデータに最適)
- SRT形式の自動生成で動画字幕にもそのまま利用可能
- GPU(MPS)対応により、5分音声でも1〜2分程度で完了
注意点
- 初回実行時にモデル・依存ファイルのダウンロード(数GB)が発生します
- 話者分離(
--diarize)はCPU寄りの処理で、多少時間がかかります - 長時間音声を扱う場合は
--min_speakers/--max_speakersの指定も有効です
まとめ
WhisperXは、Whisperの「精度+速度」に「話者識別」を加えた、現時点で最も完成度の高いローカル文字起こしツールです。
議事録、インタビュー、ポッドキャストなど、複数人が話す音声データを扱う場面では非常に強力な選択肢と言えるでしょう。
さいごに
この手の機能が本当に便利になってきましたね。
Whisper単体では得られなかった「話者ごとのリアルな構成」が自動で得られるのはまさに感動ものです。
もしお時間に余裕があるようでしたら是非、ぜひ試してみてください!