azure-speech-to-text について
azure-speech-to-textは、Azure Fast Transcriptionでローカル音声ファイルを文字起こしするOpenMontage向けスキルです。単語単位のタイムスタンプ、話者識別、言語判定が必要なクラウド処理に向き、オフラインではローカルのtranscriberを代替として使えます。
主な機能
- 01ローカルファイルの同期文字起こし
- 02単語単位のタイムスタンプ
- 03話者ダイアライゼーション
- 04自動言語識別
- 05transcriber互換の出力
活用シーン
- 01字幕ワークフロー向けの文字起こし生成
- 02インタビューやポッドキャストの話者ラベル付け
- 03クラウド処理を優先する文字起こし
- 04Azureが使えない場合のローカル処理への切り替え
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ calesthio/ openmontage --skill azure-speech-to-textインストール後、Claude Code で/azure-speech-to-textを入力して読み込まれたか確認します。
詳細
Azure AI Speech — 音声認識
Azure Fast Transcription を使って音声をテキストに変換します。同期処理、単語単位のタイムスタンプ、話者ダイアライゼーション、多言語識別に対応しています。
OpenMontage では、azure_stt ツール(capability=analysis、provider=azure)を通じて利用できます。これはオプションのクラウド音声認識プロバイダーです。AZURE_SPEECH_KEY が設定されている場合は、クラウドでの音声認識にこちらを優先してください。ローカルの transcriber ツール(faster-whisper)は、引き続きオフライン時の既定の手段であり、Azure を利用できない場合のフォールバックです。
Fast Transcription を使う理由(Batch ではなく)
Azure には音声認識のインターフェイスが 3 つあります。OpenMontage のパイプラインではローカルの音声ファイルを文字起こしするため、Fast Transcription を使います。
| インターフェイス | 入力 | レイテンシー | 必要なもの |
|---|---|---|---|
| Fast Transcription(ここで使用) | ローカルファイル、マルチパート POST | 同期、リアルタイム未満 | キーとリージョン |
| Batch Transcription | URL 上の音声(Blob と SAS) | 非同期ジョブとポーリング | Blob ストレージの設定 |
Speech SDK(spx) | マイク/ストリーム/ファイル | ストリーミング | ネイティブの azure-cognitiveservices-speech パッケージ |
Fast Transcription に Blob ストレージや SAS URL、ネイティブ SDK は不要です。requests と 2 つの環境変数だけで利用できます。
セットアップ
Azure portal で Speech リソースを作成し、Keys and Endpoint ページからキーとリージョンをコピーします。
export AZURE_SPEECH_KEY=your_speech_resource_key
export AZURE_SPEECH_REGION=eastus # your resource's region
# export AZURE_SPEECH_ENDPOINT=https://... # optional: overrides region
AZURE_SPEECH_KEY と AZURE_SPEECH_REGION または AZURE_SPEECH_ENDPOINT のいずれかが設定されると、azure_stt は AVAILABLE を返します。
パイプラインでの使用
実行をオフラインにする必要がない限り、transcriber よりも azure_stt を優先してください。出力は transcriber のスキーマと完全に一致するため、subtitle_gen や文字起こし結果を使うあらゆるステージにそのまま置き換えて使えます。
from tools.tool_registry import registry
registry.discover()
stt = registry._tools["azure_stt"]
result = stt.execute({
"input_path": "projects/my-video/assets/audio/narration.mp3",
# "language": "en", # ISO 639-1 or BCP-47 ("en-US"); omit for auto-ID
# "diarize": True, # speaker labels, no HuggingFace token needed
# "max_speakers": 4,
"output_dir": "projects/my-video/artifacts",
})
if result.success:
segs = result.data["segments"] # [{id,start,end,text,words:[...]}]
words = result.data["word_timestamps"] # flat [{word,start,end,probability}]
azure_stt を利用できない場合(キーがない場合)やエラーが発生した場合は、transcriber(ローカルの whisper)にフォールバックしてください。execute のシグネチャと出力は同一です。
重要なパラメーター
language— ISO コード("en")または完全なロケール("en-US")を指定します。言語がわかっている場合は指定してください。自動識別より高速で、精度も高くなります。candidate_locales—languageを省略すると、Azure はこの候補リストを使って言語を識別します。実際に想定される言語に絞ってください。リストが大きすぎると検出が遅くなり、誤分類も起きやすくなります。diarize/max_speakers— 複数の話者がいる音声(インタビュー、ポッドキャスト)で有効にします。max_speakersには実際の最大人数を設定してください。profanity_filter—None|Masked(既定)|Removed|Tags。
レスポンスの形式(transcriber スキーマへのマッピング)
Azure の生レスポンス(offsetMilliseconds / words[] を含む phrases[])は、秒単位に変換され、OpenMontage の文字起こしスキーマにマッピングされます。
{
"segments": [
{"id": 0, "start": 0.0, "end": 2.4, "text": "Hello world",
"speaker": 1,
"words": [{"word": "Hello", "start": 0.0, "end": 0.5, "probability": 0.98}]}
],
"word_timestamps": [{"word": "Hello", "start": 0.0, "end": 0.5, "probability": 0.98}],
"language": "en-US",
"duration_seconds": 2.4,
"provider": "azure"
}
注:Fast Transcription には単語ごとの信頼度がないため、各単語の probability にはフレーズの信頼度が設定されます。
制限とヒント
- 1 回のリクエストで処理できるファイルは、最大約 2 時間、数百 MB 程度です。より長い音声や一括処理には、代わりに Azure Batch Transcription を使ってください。
- クリアな音声を送信してください(16 kHz 以上のモノラルで十分です)。音声だけが必要な場合は、先に動画を音声に変換してください。アップロードサイズを小さくしても、結果は同じです。
- タイミングを確認してください。単語のタイムスタンプは
subtitle_genの字幕キューに使われます。最初と最後のキューを元の音声と照らし合わせて確認してください。