Речевые эпизоды в длинной записи¶
«В записи двенадцать часов, но разговора — сорок минут» — пример задачи, для которой предназначен отдельный раздел Речевые эпизоды в кабинете. Сервис находит предполагаемые речевые участки, собирает компактную аудиоподборку и расшифровывает выбранные фрагменты с привязкой к исходному времени.
Режим подходит для диктофонных записей, мероприятий и рабочих сессий с большими перерывами. Число эпизодов и их длительность вычисляются по загруженному файлу; пример «37 эпизодов, 46 минут» не является результатом анализа или гарантией.
Как работать¶
- Откройте Речевые эпизоды, выберите язык и загрузите исходный файл.
- Дождитесь поиска речи. Декодирование и просмотр охватывают всю запись.
- Прослушайте найденные участки и проверьте исключённые интервалы. Их можно вернуть в подборку; нужный диапазон можно указать вручную по исходному времени.
- Проверьте пересчитанную стоимость и запустите сборку и распознавание выбранной речи.
- Скачайте компактный WAV, транскрипт и карту исходного времени.
Для прослушивания сервер готовит браузерную WAV-копию. Поэтому распознавание M4A, Opus, CAF и других поддерживаемых FFmpeg контейнеров не зависит от того, умеет ли браузер воспроизводить оригинал. Загрузка передаёт исходный файл без предварительной конвертации на стороне пользователя.
Проверка тихой речи¶
Разметка автоматическая: тихая или далёкая речь может быть пропущена, а шум или музыка — ошибочно включены. Поэтому результат называется предполагаемыми речевыми эпизодами. Начальные настройки поиска консервативны: низкий порог входа в речь, запас 800 мс по границам и объединение коротких промежутков. Это уменьшает риск обрезать начало или окончание реплики, но не гарантирует обнаружение каждой реплики.
Исключённые участки не объявляются достоверной тишиной. Они сохраняются для прослушивания до удаления задания или истечения срока хранения. Перед окончательной сборкой можно изменить выбор и вернуть пропущенный диапазон.
Две шкалы времени¶
Транскрипт использует время исходной записи. Отдельная карта связывает каждый выбранный диапазон с его положением в компактном аудио:
| Поля | Смысл |
|---|---|
original_start_ms, original_end_ms |
Границы в исходной записи |
compact_start_ms, compact_end_ms |
Границы в аудиоподборке |
Карта также содержит точные границы в отсчётах PCM 16 кГц:
source_start_sample, source_end_sample, compact_start_sample,
compact_end_sample. Они позволяют восстановить границы без округления до
миллисекунд.
Интервалы объединяются перед сборкой: перекрытия не повторяют звук и не увеличивают оплачиваемую длительность. В подборку входят также защитные отступы вокруг речи. Если речь не обнаружена, сервис не создаёт выдуманный транскрипт; исходник остаётся доступен для проверки и ручного выбора.
Тариф¶
Стоимость состоит из двух частей:
- просмотр всей фактически декодированной записи по отдельной ставке за час;
- распознавание длительности выбранных фрагментов, включая отступы, по тарифу выбранной локальной модели.
Длительность каждой части округляется вверх до секунды накопительно, а не отдельно для каждого небольшого фрагмента. Декодирование и поиск речи используют ресурсы, поэтому исключённые интервалы не обещаются бесплатными.
Ставка сканирования задаётся в SPEECH_EPISODES_SCAN_CREDITS_PER_HOUR.
Числовое значение намеренно не установлено по умолчанию: при включённом
кредитном биллинге новые платные задания недоступны, пока ставка не согласована.
Отключение общего биллинга предназначено для тестовой среды, а не является
публичным тарифом услуги.
После изменения выбора сервер пересчитывает стоимость; кнопка сборки доступна после получения актуальной оценки. Уже списанные кредиты показаны отдельно. Повторная сборка не сканирует исходник заново, но повторно оплачивается распознавание всех выбранных фрагментов. Перед ней следует скачать нужный предыдущий результат: новая сборка заменяет его.
API¶
Все методы требуют API-ключ или вход в кабинет. Задания, исходное аудио, подборка и транскрипт доступны только владельцу (и администратору).
| Метод | Путь | Назначение |
|---|---|---|
GET |
/api/speech-episodes/config |
Доступность, языки, лимиты и тариф |
POST |
/api/speech-episodes/jobs |
Создать задание: filename, file_size, language |
PUT |
/api/speech-episodes/jobs/{id}/source |
Передать исходные байты и начать анализ |
GET |
/api/speech-episodes/jobs/{id} |
Состояние, найденные/исключённые интервалы, результат |
POST |
/api/speech-episodes/jobs/{id}/quote |
Оценить выбранные intervals с текущей revision без запуска |
POST |
/api/speech-episodes/jobs/{id}/render |
Подтвердить intervals и текущую revision |
POST |
/api/speech-episodes/jobs/{id}/cancel |
Остановить работу |
DELETE |
/api/speech-episodes/jobs/{id} |
Удалить содержимое задания |
GET |
/api/speech-episodes/jobs/{id}/source |
WAV исходной записи для просмотра |
GET |
/api/speech-episodes/jobs/{id}/audio |
Компактная аудиоподборка |
GET |
/api/speech-episodes/jobs/{id}/transcript |
Транскрипт |
start_ms и end_ms в запросе сборки относятся к исходной записи.
Сервер проверяет диапазоны и версию выбора, не доверяет клиентскому расчёту цены
и самостоятельно пересчитывает объединение интервалов.
Развёртывание и ограничения¶
По умолчанию принимается один файл до 10 ГиБ и до 24 часов. Исходник сначала загружается полностью, затем декодируется последовательно. Локальная модель Silero ONNX уже включена в репозиторий; отдельный VAD-сервис не нужен.
Один час mono PCM16 16 кГц занимает около 115 МБ на диске; 12 часов — около
1,38 ГБ. Память ограничена размером обрабатываемых блоков. Нужен запас диска
для исходника, декодированной копии и подборки. По умолчанию задания хранятся
24 часа в runtime/speech-episodes; доступны удаление и очистка по сроку.
Параметры: SPEECH_EPISODES_ENABLED, SPEECH_EPISODES_STORAGE_DIR,
SPEECH_EPISODES_MAX_FILE_BYTES, SPEECH_EPISODES_MAX_DURATION_SECONDS,
SPEECH_EPISODES_MAX_CONCURRENCY, SPEECH_EPISODES_TTL_SECONDS,
SPEECH_EPISODES_MIN_FREE_BYTES.
Один процесс API владеет каталогом заданий. После перезапуска незавершённая работа помечается прерванной; автоматического повторного платного распознавания нет. Текст, карта и аудио завершённых блоков сохраняются как частичный результат, включая восстановление последней сохранённой аудиограницы после перезапуска. Для нескольких реплик нужен общий планировщик, а не общий каталог без координации. Процесс, которому не удалось получить блокировку каталога, отключает только эту услугу и продолжает запуск остального API.
В шаблоне Windows Nginx для /api/speech-episodes/ задан лимит 10 ГиБ и отключена
буферизация загрузки. Другие reverse proxy должны разрешать соответствующий
размер запроса; стандартный лимит 2 ГиБ в Helm нужно отдельно согласовать
с целевым развёртыванием. Изменения API и Windows proxy применяются ручным
перезапуском из обычного терминала: E:\five-api, ./run_dual_domain.ps1.