WhisperX は、Max Bain とコミュニティが保守する長時間音声向けのオープンソース処理パイプラインです。音声区間検出、faster-whisper/CTranslate2 によるバッチ文字起こし、言語別の強制アラインメント、任意の pyannote 話者ダイアライゼーションを組み合わせます。価値は単なる「高速な Whisper」ではなく、単語に細かな時刻を与え、匿名話者ラベルを語や区間へ割り当てる点にあります。各工程は別モデルで、別の誤りを持ちます。
WhisperX は Whisper を新しい万能 ASR に置き換えません。VAD で分割し、faster-whisper で認識し、音素モデルで認識済みテキストを音声へ戻して整列し、必要なら話者区間と統合します。誤認識は時刻が細かくても正しくなりません。数字、記号、混在文字がアラインモデルの辞書にないと時刻は欠落または補間になります。発話が重なる場面では、整った SPEAKER_00 表示も誤り得ます。
WhisperX が Whisper に追加する工程
| 工程 | 実装 | 価値 | 失敗境界 |
|---|---|---|---|
| 音声区間 | pyannote/Silero VAD と Cut & Merge | 発話部分をバッチ化 | 小声を切る、別ターンを結合 |
| 文字起こし | faster-whisper/CTranslate2 | バッチと量子化 | 上流 Whisper とデコード差 |
| 強制整列 | 言語別 wav2vec2/音素 ASR | 単語を細かな時刻へ対応 | 文字、数字、記号、言語モデルで失敗 |
| 話者分離 | pyannote.audio Community-1 | 匿名話者IDを割当 | 重複、短ターン、似た声に弱く実名ではない |
| 出力 | SRT/VTT/TSV/TXT/JSON | 字幕と後処理 | 改行、読速度、内容は人が確認 |
原論文は長時間音声の三問題を扱います。Whisper のバッファ/スライド処理はドリフト、反復、幻覚を起こし得ること、逐次デコードは単純なバッチ化を妨げること、発話単位の時刻は編集に粗いことです。VAD Cut & Merge はバッチ推論を可能にし、音素強制整列は認識後に単語時刻を追加します。論文の速度・精度値は特定のモデル、データ、GPU条件の結果なので、現行版に普遍的な倍率や WER として転記しません。
保守状況と依存関係
プロジェクトは保守中です。確認時の最新安定リリースは v3.8.6、main のメタデータは 3.8.7rc1 でした。近年のリリースは整列不能文字の単語時刻、進捗コールバック、Torch/TorchCodec互換性を修正しています。活発さの証拠である一方、mainを毎回直接インストールせず、検証済みリリースとモデルを固定すべき理由でもあります。
| 依存境界 | 現行要件 | 運用への影響 |
|---|---|---|
| Python | 3.10以上3.14未満 | 分離環境が必要 |
| ASR | faster-whisper≥1.2、CTranslate2≥4.5 | CUDA、変換、デコード差を回帰 |
| PyTorch | Torch/Torchaudio約2.8 | GPU wheel、ドライバ、CUDAを一致 |
| 話者分離 | pyannote.audio≥4 | TorchCodec、ゲートモデル、別モデル管理 |
| ライセンス | WhisperX BSD-2、モデルは別条件 | 通知と利用条件を個別保存 |
導入と制御された初回実行
python -m venv .venv
source .venv/bin/activate
pip install whisperx
whisperx meeting.wav --model large-v2 --batch_size 4 --output_format json
whisperx meeting.wav --diarize --hf_token "$HF_TOKEN"README は通常利用に PyPI 安定版を推奨し、開発版には実験的変更とバグがあり得ると明記します。GPU手順は現在CUDA 12.8です。CPUは --device cpu --compute_type int8 で動かせますが、速度と品質を実測してください。GPUメモリ不足ではまずbatchを下げ、その後に小モデルやint8を比較します。後二つは認識を変え得ます。Hugging Face tokenは門付き話者モデルの取得用で、履歴、コード、出力へ残してはいけません。
長時間音声の本番手順
- 録音と転記の同意を得る。目的、取得元、保持、閲覧者を記録します。
- 原本を保存する。一定条件で作業コピーをデコードし、モノラル化前のチャンネルを残します。
- 非公開評価セットを作る。無音、雑音、音楽、重複、割込み、固有名詞、数値、言語切替、最大尺を含めます。
- スタック全体を固定する。WhisperX、faster-whisper、ASR、整列、VAD、pyannote、Torch/CUDA、compute typeを記録します。
- VADとbatchを調整する。欠落した小声、誤検出、GPUメモリ、実時間係数を同時に測ります。
- 整列前のASRを残す。整列失敗で元の仮説を失わないようにします。
- 整列の例外を明示する。真の整列、補間、未整列を区別し、長尺の先頭・中間・末尾を点検します。
- 必要な場合だけ話者分離する。tokenは安全に使い、人数が既知なら範囲を指定し、重複と短い割込みを確認します。
- 公開ゲートを通す。名前、数字、否定、幻覚、時刻、話者切替、字幕可読性を確認します。
- manifestと共に出力する。JSON、SRT/VTT、モデル設定、レビュー状態、削除日を保存します。
対応言語とアラインメント失敗
強制整列には言語別モデルが必要です。READMEは英・仏・独・西・伊のtorchaudio標準パイプラインを挙げ、さらに DEFAULT_ALIGN_MODELS_HF に多数のHugging Faceマッピングがあります。検出言語が表にない場合は、音素ASRを --align_model で指定し、対象音声で検証します。Whisperが言語を転記できても、WhisperXが全単語を整列できるとは限りません。
数字、通貨、記号、混在スクリプト、コードスイッチ、特殊綴りは辞書外になり得ます。最近の修正で時刻処理は改善しましたが、nearest/linear補間は便利な推定であって音響的に整列した証拠ではありません。ignoreは欠落を残します。下流データに aligned/interpolated を保持し、全時刻を同じ確度に見せないでください。
| ケース | リスク | 確認 |
|---|---|---|
| 数値・通貨 | 文字表現が辞書外 | 年、価格、日付、単位を個別確認 |
| 言語切替 | 単一整列モデルが両文字を覆わない | 言語区間で分けるか検証済みモデル |
| 固有名詞 | ASR綴りと音素辞書の不一致 | 人手正解で文字と時刻を採点 |
| 音楽・無音 | VADとASRが発話判定で不一致 | 誤発話と幻覚を標識 |
| 重複発話 | 三工程が同時に劣化 | 重複例を多く入れ不明話者を許す |
| 短い割込み | 語と話者区間の重なり不足 | 割込み境界を人が確認 |
pyannoteのアクセス、ライセンス、意味
現行CLIの既定は pyannote/speaker-diarization-community-1 です。利用者は門付き条件に同意しHugging Face access tokenを作ります。モデルカードはCommunity-1をCC-BY-4.0とし、ディスクへ取得後のローカル・オフライン利用を説明します。これはWhisperXのBSD-2-ClauseやWhisper/faster-whisperとは別の条件です。
Diarizationは『どの匿名クラスタがいつ話すか』を推定し、実名を識別しません。SPEAKER_00はファイル間で入れ替わり、一人を二つに分け、似た声を統合し得ます。min/max人数は制約であって正解保証ではありません。重なり発話は公式の制限です。法律、研究、通話品質、臨床記録では原音を保持し、話者割当を再確認可能なメタデータとして扱います。
隣接する選択肢との比較
| 選択肢 | 適する場合 | 主な代償 |
|---|---|---|
| WhisperX | 長尺にbatch、単語整列、任意のローカル話者ID | 複数モデル依存と複合誤り |
| OpenAI Whisper | 上流Python基準と単純な挙動 | 粗い時刻、標準話者分離/長尺batchなし |
| faster-whisper | CTranslate2転記スループットのみ必要 | 整列/話者を別途追加 |
| whisper.cpp | C/C++、CPU、Apple Silicon、edge/offline | 別の展開系でWhisperX工程は標準でない |
| ホステッドAPI | 運用、スケール、現行モデルを委託 | データ外送、課金、時刻/話者機能差 |
独立判断:WhisperXはASR後工程であり、精度を自動的に上げるスイッチではありません。単語時刻と匿名話者が編集時間を大きく減らすときに有効です。普通の文字だけで十分、言語に検証済み整列器がない、重複発話が中心、またはPython/Torch/CUDA/モデル行列を保守できないなら、faster-whisper、上流Whisper、whisper.cpp、APIの方が運用上堅実です。
よくある質問
Whisperとは別の音声モデルですか?
通常の意味では違います。faster-whisperでWhisper系を使い、VAD、強制整列、任意のpyannoteを加えます。
単語時刻は必ず正確ですか?
いいえ。辞書外文字、数字、記号、混在文字、言語不一致で失敗し、補間は推定です。
話者の実名が分かりますか?
分かりません。SPEAKER_00等の匿名クラスタで、実在人物との対応には別の証拠が必要です。
HF tokenは必須ですか?
基本転記には不要です。既定pyannoteモデル取得には条件同意とtokenが必要で、秘密として扱います。
オフラインで動きますか?
全ASR・整列・話者モデルを取得後は可能です。ただしアプリ通信、ログ、キャッシュ、出力も確認します。
なぜGPUメモリ不足になりますか?
batch、ASR、compute type、整列、話者モデルが資源を使います。まずbatchを下げ、品質を測りながら小モデル/int8を検討します。
重複話者に信頼できますか?
真値にはできません。公式に重複と不完全なdiarizationが制限として挙げられています。
どの言語を整列できますか?
torchaudio標準とalignment.pyのHFマッピングがあります。ない場合は音素モデルを検証するか透明に整列を省略します。
確認した情報源
- WhisperX公式リポジトリ
- 公式READMEと制限
- WhisperX論文
- 公式リリース
- 依存メタデータ
- 整列コードと言語表
- CLI既定値
- 話者割当コード
- pyannote Community-1モデルカード
- faster-whisper
- OpenAIホステッド転記資料
- WhisperX BSD-2ライセンス
独立技術レビュー:2026-08-20。版、依存、モデルアクセス、言語表は変わります。固定した一次情報と私有評価を確認してください。



