mcpField
A
azure-speech-to-text

azure-speech-to-text

github.com/calesthioクリエイティブ・メディア72.7k808 回インストール今日更新
リポジトリ

azure-speech-to-text について

azure-speech-to-textは、Azure Fast Transcriptionでローカル音声ファイルを文字起こしするOpenMontage向けスキルです。単語単位のタイムスタンプ、話者識別、言語判定が必要なクラウド処理に向き、オフラインではローカルのtranscriberを代替として使えます。

主な機能

  1. 01ローカルファイルの同期文字起こし
  2. 02単語単位のタイムスタンプ
  3. 03話者ダイアライゼーション
  4. 04自動言語識別
  5. 05transcriber互換の出力

活用シーン

  1. 01字幕ワークフロー向けの文字起こし生成
  2. 02インタビューやポッドキャストの話者ラベル付け
  3. 03クラウド処理を優先する文字起こし
  4. 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 · Speech service overview

Fast Transcription を使う理由(Batch ではなく)

Azure には音声認識のインターフェイスが 3 つあります。OpenMontage のパイプラインではローカルの音声ファイルを文字起こしするため、Fast Transcription を使います。

インターフェイス入力レイテンシー必要なもの
Fast Transcription(ここで使用)ローカルファイル、マルチパート POST同期、リアルタイム未満キーとリージョン
Batch TranscriptionURL 上の音声(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 の字幕キューに使われます。最初と最後のキューを元の音声と照らし合わせて確認してください。

コメント