2000 часов аудиозаписей колл-центра — задача, с которой real-time ASR не справится: задержки растут, качество падает. Real-time системы рассчитаны на поток речи с низкой задержкой, но при пакетной загрузке сотен файлов они либо встают в очередь, либо теряют точность из-за неоптимального управления памятью. Batch STT решает проблему иначе: файлы попадают в очередь (Celery/SQS), параллельно обрабатываются на GPU с int8 квантизацией, на выходе транскрипт с точностью >95%. Мы реализуем под ключ такое решение — от простого скрипта до прод-пайплайна с мониторингом в Prometheus и дашбордом в Grafana. За 3–5 дней вы получаете систему, переваривающую сотни часов без участия инженера. Экономия по сравнению с ручной расшифровкой достигает 5 раз, а с облачными ASR-сервисами — до 70%. Вложение окупается в среднем за 2–3 месяца за счёт сокращения ручного труда. Стоимость рассчитывается индивидуально под ваш объём и требования.
Как batch STT решает проблему масштабирования?
Batch STT использует очередь (Celery или SQS) для асинхронной обработки. Это позволяет горизонтально масштабироваться: добавлять воркеры под нагрузкой, не меняя код. В отличие от real-time ASR, где каждый новый поток требует отдельного инстанса модели, batch-режим эффективно использует GPU за счёт группировки задач. Мы наблюдали ускорение в 10 раз при переходе от последовательной обработки к очереди с 8 воркерами на кластере. Оптимизация загрузки GPU достигается int8 квантизацией и нарезкой длинных файлов.
Что делать с шумными и низкокачественными записями?
Whisper large-v3 устойчив к шуму, но на сильно зашумленных записях (улица, заводской цех) точность падает. Мы применяем предобработку: нормализацию громкости, фильтр низких частот, VAD для удаления тишины. Для сложных случаев подключаем дополнительный audio enhancement — спектральное вычитание или модели Denoiser (RNNoise). На практике это повышает WER на 5–15%.
Почему int8 квантизация стала стандартом для продакшена?
На Faster-Whisper с compute_type="int8_float16" мы получаем 4-кратное ускорение на GPU при потере точности менее 1% (по данным LibriSpeech benchmark). Потребление памяти снижается вдвое, что позволяет на одной RTX 4090 обрабатывать до 4 потоков параллельно (batch size=4). Для критичных проектов включаем VAD-фильтр и beam search с 5 лучами.
Архитектура batch-пайплайна
Upload → S3/Local Storage → Queue (Celery/SQS) → Worker → STT → Post-Processing → Storage
Ключевые решения:
- Нарезка длинных файлов на сегменты по 5–10 минут (улучшает точность)
- Параллельная обработка нескольких файлов
- Retry-логика для сбойных задач
- Хранение промежуточных результатов
Как настроить pipeline для оптимальной производительности?
Каждый воркер запускает модель с int8 квантизацией. При переполнении очереди автоматически поднимаются дополнительные воркеры через Kubernetes HPA. Мониторинг — Prometheus + метрики длины очереди, времени выполнения p99, загрузки GPU.
| Оборудование | Модель | Скорость |
|---|---|---|
| RTX 3080 | medium (int8) | 6–8x RT |
| RTX 4090 | large-v3 (int8) | 3–4x RT |
| A10G | large-v3 (int8) | 4–5x RT |
| CPU (16 cores) | medium | 0.3–0.5x RT |
1 час аудио на RTX 4090 с large-v3: ~15–20 минут обработки — в 3–4 раза быстрее реального времени.
Полный pipeline обработки
import os
from pathlib import Path
from faster_whisper import WhisperModel
from celery import Celery
import ffmpeg
app = Celery('batch_stt', broker='redis://localhost:6379/0',
backend='redis://localhost:6379/1')
model = WhisperModel("large-v3", device="cuda", compute_type="int8_float16")
def convert_to_wav(input_path: str) -> str:
output_path = input_path.rsplit('.', 1)[0] + '_converted.wav'
ffmpeg.input(input_path).output(
output_path,
ar=16000,
ac=1,
acodec='pcm_s16le'
).overwrite_output().run(quiet=True)
return output_path
@app.task(bind=True, max_retries=3, time_limit=3600)
def process_audio_file(self, file_path: str, options: dict = None):
options = options or {}
try:
wav_path = convert_to_wav(file_path)
segments, info = model.transcribe(
wav_path,
language=options.get('language'),
vad_filter=True,
word_timestamps=options.get('word_timestamps', False),
beam_size=5
)
result = {
"file": file_path,
"language": info.language,
"language_probability": info.language_probability,
"duration": info.duration,
"segments": []
}
for seg in segments:
segment_data = {
"start": round(seg.start, 3),
"end": round(seg.end, 3),
"text": seg.text.strip()
}
if options.get('word_timestamps'):
segment_data["words"] = [
{"word": w.word, "start": w.start, "end": w.end, "probability": w.probability}
for w in (seg.words or [])
]
result["segments"].append(segment_data)
os.unlink(wav_path)
return result
except Exception as exc:
raise self.retry(exc=exc, countdown=60 * (self.request.retries + 1))
Обработка сбоев в пайплайне
Система автоматически повторяет упавшие задачи (max_retries=3) с экспоненциальной задержкой. Для критичных файлов настраиваем dead-letter очередь и алерты в Telegram/Slack. Все этапы логируются — от загрузки до выдачи результата.
Поддерживаемые форматы
| Формат | Конвертация |
|---|---|
| MP3, WAV, FLAC | Прозрачная — нормализуем до WAV 16kHz,16 бит, моно |
| M4A, AAC, OGG, OPUS | Через FFmpeg с пересэмплингом |
| MP4, MKV | Извлечение аудиодорожки, затем конвертация |
Как запустить batch STT на своих данных
- Установите зависимости:
pip install faster-whisper celery redis ffmpeg-python. - Запустите Redis и Celery worker.
- Загрузите файлы в указанную директорию или S3.
- Запустите скрипт отправки задач в очередь.
- Получите результаты в JSON или субтитрах (SRT).
Что входит в работу
- Скрипт для одиночных файлов — протестированный локально, готовый к запуску.
- Пайплайн с очередью — на Celery или SQS, с retry и логированием.
- API для загрузки и получения результатов — REST/gRPC, документация Swagger.
- Дашборд статусов — Grafana + дашборд с метриками очереди и точности.
- Интеграция с вашим хранилищем — S3, MinIO, локальная ФС.
- Обучение команды — 2 часа воркшопа по эксплуатации.
Сроки реализации
- Скрипт для одиночных файлов: 1 день
- Пайплайн с очередью и API: 3–5 дней
- Полная система с дашбордом статусов: 1 неделя
Оценим ваш проект: свяжитесь с нами, чтобы обсудить объём, требуемую точность и инфраструктуру. Закажите внедрение batch STT — получите консультацию инженера. Опыт — более 5 лет в ASR, свыше 30 успешных внедрений.







