CLI-утилита для распознавания длинных аудиозаписей (до 8--10 часов) через Yandex SpeechKit API v3 с диаризацией (разделением по спикерам).
- GHC >= 9.0, cabal
- ffmpeg, ffprobe (в
$PATH) - Аккаунт Yandex Cloud:
- сервисный аккаунт с ролью
ai.speechkit-stt.user - IAM-токен или API-ключ
- сервисный аккаунт с ролью
cabal buildyspeech (-i|--input FILE) [-o|--output FILE] [--folder-id ID]
[--iam-token TOKEN] [--api-key KEY] [--language LANG]
[--model MODEL] [--chunk-hours HOURS] [--timestamps] [-v|--verbose]
| Опция | Описание | По умолчанию |
|---|---|---|
-i, --input FILE |
Входной MP3-файл | (обязательно) |
-o, --output FILE |
Файл для записи результата | stdout |
--folder-id ID |
Folder ID в Yandex Cloud | env YANDEX_FOLDER_ID |
--iam-token TOKEN |
IAM-токен для аутентификации | env YANDEX_IAM_TOKEN |
--api-key KEY |
API-ключ (альтернатива IAM) | env YANDEX_API_KEY |
--language LANG |
Язык распознавания | ru-RU |
--model MODEL |
Модель распознавания | general |
--chunk-hours HOURS |
Макс. длительность чанка (часы) | 3.5 |
--timestamps |
Добавлять таймкоды [HH:MM:SS] |
выключено |
-v, --verbose |
Подробный вывод | выключено |
Каждую опцию с пометкой env ... можно задать через переменную окружения вместо флага.
Базовое использование с API-ключом:
yspeech -i lecture.mp3 \
--folder-id b1gabcdef123 \
--api-key AQVNabcdef... \
-o lecture.txtС переменными окружения и таймкодами:
export YANDEX_FOLDER_ID=b1gabcdef123
export YANDEX_API_KEY=AQVNabcdef...
yspeech -i interview.mp3 -o result.txt --timestampsСпикер 1: Здравствуйте, я хотел бы обсудить...
Спикер 2: Да, конечно, давайте начнём с...
Спикер 1: Первый вопрос касается...
С флагом --timestamps:
[00:00:15] Спикер 1: Здравствуйте, я хотел бы обсудить...
[00:00:22] Спикер 2: Да, конечно, давайте начнём с...
[00:01:03] Спикер 1: Первый вопрос касается...
- Входной MP3 разрезается на чанки по ~3.5 часа (лимит SpeechKit -- 4 часа)
- Каждый чанк отправляется напрямую в SpeechKit API (base64 в теле запроса)
- Для каждого чанка запускается асинхронное распознавание с включённой диаризацией
- Утилита опрашивает API до завершения распознавания (~10 сек на 1 мин аудио)
- Результаты склеиваются с коррекцией таймкодов и выводятся с метками спикеров
- Диаризация SpeechKit поддерживает не более 2 спикеров
- На вход принимается любой медиафайл, который умеет читать ffmpeg (аудио, видео). Стерео-аудио и видео автоматически конвертируются в mono MP3; при нарезке на чанки файл также перекодируется в mono MP3. Если файл уже моно и укладывается в один чанк, он передаётся в API без перекодирования