azure-speech-to-text — скилл для Claude Code: обзор и установка
Транскрибирует аудио в текст через REST API Azure AI Speech с таймкодами слов и разделением по спикерам. Помогает собирать субтитры в пайплайнах OpenMontage без долгой локальной обработки.
npx skills add calesthio/OpenMontage --skill azure-speech-to-text -a claude-codeЧто делает azure-speech-to-text
Скилл подключает синхронное распознавание речи через Azure Fast Transcription REST API внутри OpenMontage. Инструмент azure_stt отправляет локальный аудиофайл обычным multipart POST-запросом через библиотеку requests. Для работы не нужны тяжёлые SDK или хранилище Azure Blob. В ответ приходят сегменты текста с таймкодами слов и разделением по спикерам.
Выходной формат полностью совпадает со схемой локального инструмента transcriber на базе faster-whisper. Поэтому результат сразу передаётся в генератор субтитров subtitle_gen без конвертации. Можно явно задавать язык вроде en-US или передавать список candidate_locales для автоопределения. Также доступна настройка фильтра ненормативной лексики profanity_filter.
Для работы обязательно требуются доступ в сеть и переменные AZURE_SPEECH_KEY с AZURE_SPEECH_REGION. Одиночный запрос рассчитан на аудио до 2 часов или объёмом в несколько сотен мегабайт. Без ключа сервис не запустится, поэтому наличие локального faster-whisper в проекте остаётся надёжной страховкой.
Какие задачи решает
- транскрибировать локальные аудиофайлы через облачный API Azure
- получать посекундные таймкоды слов для генерации субтитров
- разделять речь по спикерам без токенов HuggingFace
- автоматически определять язык речи по заданному списку локалей
Примеры запросов агенту
- Транскрибируй audio/interview.mp3 через azure_stt с разделением на 2 спикеров
- Распознай речь в projects/video/narration.mp3 с помощью azure_stt на английском языке
- Создай субтитры для voice.wav через azure_stt и сохрани таймкоды слов в artifacts
Как установить azure-speech-to-text
1Через Skills CLI (Vercel)
npx skills add calesthio/OpenMontage --skill azure-speech-to-text -a claude-code2Вручную: положить файлы
~/.claude/skills/azure-speech-to-text/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/azure-speech-to-text/
1Через Skills CLI (Vercel)
npx skills add calesthio/OpenMontage --skill azure-speech-to-text -a codex2Вручную: положить файлы
.agents/skills/azure-speech-to-text/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add calesthio/OpenMontage --skill azure-speech-to-text -a cursor2Вручную: положить файлы
.cursor/skills/azure-speech-to-text/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install calesthio/OpenMontage azure-speech-to-text2Вручную: положить файлы
.github/skills/azure-speech-to-text/SKILL.md1Через Skills CLI (Vercel)
npx skills add calesthio/OpenMontage --skill azure-speech-to-text -a gemini-cli2Командой платформы
gemini skills install https://github.com/calesthio/OpenMontage --path .claude/skills/azure-speech-to-textВручную: положить файлы
.devin/skills/azure-speech-to-text/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add calesthio/OpenMontage --skill azure-speech-to-text -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
Из того же набора28
Весь набор →Похожие
Вопросы о azure-speech-to-text
Как установить azure-speech-to-text в Claude Code?
Выполните команду npx skills add calesthio/OpenMontage --skill azure-speech-to-text -a claude-code. Файл навыка сохранится по пути ~/.claude/skills/azure-speech-to-text/SKILL.md.
Что делает azure-speech-to-text?
Скилл отправляет локальное аудио в сервис Azure Fast Transcription и возвращает текст с таймкодами слов, детекцией языка и спикерами. Он служит быстрой облачной альтернативой локальной модели faster-whisper в OpenMontage.
Какие переменные окружения нужны для работы?
Необходимо задать AZURE_SPEECH_KEY и AZURE_SPEECH_REGION (или AZURE_SPEECH_ENDPOINT). Если ключи не настроены, OpenMontage переключается на локальный transcriber на базе faster-whisper.
Исходный текст
SKILL.md · MIT
---
name: azure-speech-to-text
description: Transcribe audio to text using Azure AI Speech (Fast Transcription REST API). Use when converting audio/video to text, generating subtitles, or processing spoken content in OpenMontage. Optional cloud STT provider — preferred when AZURE_SPEECH_KEY is configured; the local faster-whisper `transcriber` is the default offline path.
license: MIT
compatibility: Requires internet access and an Azure AI Speech resource (AZURE_SPEECH_KEY + AZURE_SPEECH_REGION).
metadata: {"openclaw": {"requires": {"env": ["AZURE_SPEECH_KEY", "AZURE_SPEECH_REGION"]}, "primaryEnv": "AZURE_SPEECH_KEY"}}
---
# Azure AI Speech — Speech-to-Text
Transcribe audio to text with **Azure Fast Transcription** — synchronous,
word-level timestamps, speaker diarization, and multi-language identification.
In OpenMontage this is exposed through the `azure_stt` tool (`capability=analysis`,
`provider=azure`). It is an **optional cloud STT provider** — when
`AZURE_SPEECH_KEY` is configured, prefer it for cloud transcription. The local
`transcriber` tool (faster-whisper) remains the **default offline path** and the
fallback when Azure is unavailable.
> Docs: [Fast Transcription](https://learn.microsoft.com/azure/ai-services/speech-service/fast-transcription-create) · [Speech service overview](https://learn.microsoft.com/azure/ai-services/speech-service/spx-overview)
## Why Fast Transcription (not Batch)
Azure exposes three STT surfaces. OpenMontage uses **Fast Transcription** because
the pipeline transcribes **local audio files**:
| Surface | Input | Latency | Needs |
|---------|-------|---------|-------|
| **Fast Transcription** (used here) | local file, multipart POST | synchronous, sub-real-time | key + region |
| Batch Transcription | audio at a URL (Blob + SAS) | async job + polling | Blob storage plumbing |
| Speech SDK (`spx`) | mic / stream / file | streaming | native `azure-cognitiveservices-speech` package |
Fast Transcription needs no Blob storage, no SAS URLs, and no native SDK — just
`requests` and the two env vars.
## Setup
Create a **Speech** resource in the [Azure portal](https://portal.azure.com);
copy the key and region from its **Keys and Endpoint** page.
```bash
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_stt` reports `AVAILABLE` once `AZURE_SPEECH_KEY` plus either
`AZURE_SPEECH_REGION` or `AZURE_SPEECH_ENDPOINT` are set.
## Using it in a pipeline
Prefer `azure_stt` over `transcriber` unless the run must be offline. Its output
matches the `transcriber` schema exactly, so it is a drop-in for `subtitle_gen`
and any stage that consumes a transcript.
```python
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}]
```
If `azure_stt` is unavailable (no key) or errors, fall back to `transcriber`
(local whisper) — its `execute` signature and output are identical.
## Parameters that matter
- **`language`** — pass an ISO code (`"en"`) or a full locale (`"en-US"`). Pin it
when you know the language; it is faster and more accurate than auto-ID.
- **`candidate_locales`** — when `language` is omitted, Azure runs language
identification across this shortlist. Narrow it to the languages you actually
expect; a huge list slows detection and invites misclassification.
- **`diarize` / `max_speakers`** — enable for multi-speaker audio (interviews,
podcasts). Set `max_speakers` to the real upper bound.
- **`profanity_filter`** — `None` | `Masked` (default) | `Removed` | `Tags`.
## Response shape (mapped to the transcriber schema)
The raw Azure response (`phrases[]` with `offsetMilliseconds` / `words[]`) is
converted to seconds and the OpenMontage transcript schema:
```json
{
"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"
}
```
Note: Fast Transcription has no *per-word* confidence, so each word carries the
**phrase** confidence in `probability`.
## Limits & tips
- Single file up to ~2 hours / a few hundred MB per request. For longer or bulk
jobs, use Azure Batch Transcription instead.
- Send clean audio (16 kHz+ mono is plenty). Transcode video to audio first if
you only need speech — smaller upload, same result.
- Verify timing: word timestamps drive subtitle cues in `subtitle_gen`. Spot-check
the first and last cues against the source audio.
© calesthio · MIT · calesthio/OpenMontage