Проблема: субтитры не синхронизированы, поиск по видео неточен
Типичная ситуация: вы получаете транскрипцию аудиофайла, но каждое слово не привязано к временным меткам. Это значит — субтитры плывут, поиск по фразам не работает, karaoke-эффекты невозможны. Word-level timestamps решают эту задачу: каждое слово в тексте имеет точные start/end секунды. Временные метки слов обеспечивают синхронизацию транскрипции с аудио. Без такой привязки невозможно сделать кликабельную транскрипцию (click on word → jump to position), автоматический монтаж по тексту или субтитры для глухих. Мы настраиваем синхронизацию под ваш стек — будь то локальный Whisper или облачный Deepgram.
Опыт наших инженеров в этой области позволяет гарантировать точность меток не хуже заявленной производителем, даже на сложных записях. В этой статье — технические детали: какие модели дают лучшую точность, как настроить параметры и какие подводные камни встречаются на разных типах аудио.
Почему без меток на уровне слов не обойтись?
Без word-level timestamps вы теряете функциональность, которая уже стала стандартом в видео-редакторах и подкаст-платформах. Если метки есть — открываются сценарии:
- Субтитры с поблочной синхронизацией (каждое слово появляется в момент произношения).
- Поиск по видео по любому фрагменту текста.
- Аналитика — подсчёт времени произнесения каждого слова (озвучивание, спич-терапия).
Как мы реализуем word-level timestamps
Используем проверенный стек. Для локальной обработки — faster-whisper (модель large-v3, GPU). Для облачных сценариев — Deepgram (его точность на шумных записях в 2 раза выше, чем у Whisper) или Google STT с параметром enable_word_time_offsets.
Пример базового кода на Python:
from faster_whisper import WhisperModel
model = WhisperModel("large-v3", device="cuda")
segments, _ = model.transcribe("audio.wav", word_timestamps=True, language="ru")
for segment in segments:
for word in segment.words:
print(f"[{word.start:.3f}s → {word.end:.3f}s] {word.word} (p={word.probability:.2f})")
Точность Whisper: ±50–150 мс на чистом аудио. Если важна предельная точность — подключаем Deepgram с его гранулярностью. Методология распознавания описана в Radford et al., "Robust Speech Recognition via Large-Scale Weak Supervision".
Сравнение провайдеров
| Провайдер | Параметр | Точность меток | Особенности |
|---|---|---|---|
| Whisper | word_timestamps=True | ±50–150 мс | Локально, бесплатно, GPU обязателен |
| Deepgram | timestamps=true | ±30–80 мс | Облако, высокая точность, $0.004/минута |
| Google STT | enable_word_time_offsets=True | ±40–100 мс | Интеграция с GCP, поддержка 125+ языков |
| AWS Transcribe | по умолчанию | ±50–120 мс | Экосистема AWS, автоматическое распознавание |
| AssemblyAI | timestamps=True | ±30–100 мс | Дополнительные фичи (umami, эмоции) |
Точность меток на разных типах аудио
| Тип аудио | Whisper large-v3 | Deepgram | Google STT |
|---|---|---|---|
| Чистый дикторский (студия) | ±50–100 мс | ±30–60 мс | ±40–80 мс |
| Запись с шумами (улица) | ±100–200 мс | ±60–120 мс | ±80–150 мс |
| Телефонный разговор (8 кГц) | ±150–300 мс | ±80–150 мс | ±100–200 мс |
Как повысить точность меток?
Даже лучшие STT дают сбои на сложных аудио. Вот что мы рекомендуем:
- Убедитесь, что аудио соответствует требованиям модели: частота дискретизации 16 кГц, моно, минимальный уровень шума.
- Используйте параметры VAD: в Whisper это vad_filter=True (отсекает тишину, уменьшает дрейф меток).
- Если метки «плавают» на длинных записях (больше 30 минут), применяйте сегментацию с перекрытием (overlap 10–15 секунд).
- Для облачных сервисов активируйте punctuate и formatting — иногда они улучшают выравнивание слов.
- Проверяйте порог вероятности: слишком высокий (0.9+) удаляет часть слов, ломая временную шкалу. Оптимально 0.6–0.8.
Когда VAD не помогает?
На аудио с нестационарным шумом (например, захлопывание дверей, сигналы) VAD может ошибочно отсекать фрагменты. В таких случаях лучше использовать ручную разметку тишины или комбинировать VAD с энергетическим детектором.Подробнее о VAD можно прочитать на странице voice activity detection.
Кейс: улучшение точности для подкаст-платформы
Один из проектов — подкаст-платформа с архивами записей на русском и английском. Исходный пайплайн на Google STT давал точность меток ±150 мс, что приводило к рассинхронизации субтитров. Мы внедрили гибрид: локальный Whisper для черновой разметки (экономия ~30% затрат на облачные API) и Deepgram для финальной коррекции меток. После настройки VAD и ресемплинга до 16 кГц p99 latency снизилась до 200 мс, а точность меток улучшилась до ±50 мс на 90% записей. Результат — субтитры не плавают, пользователи могут кликать на любое слово и переходить к моменту.
Экспорт в форматы
Метки преобразуются в любой необходимый формат. Например, субтитры с дроблением по одному слову (для karaoke-эффекта):
def words_to_srt(words: list) -> str:
"""Каждое слово — отдельный субтитр (для karaoke)"""
srt = []
for i, w in enumerate(words, 1):
start = format_srt_time(w.start)
end = format_srt_time(w.end)
srt.append(f"{i}\n{start} --> {end}\n{w.word.strip()}\n")
return "\n".join(srt)
def format_srt_time(seconds: float) -> str:
h = int(seconds // 3600)
m = int((seconds % 3600) // 60)
s = int(seconds % 60)
ms = int((seconds % 1) * 1000)
return f"{h:02d}:{m:02d}:{s:02d},{ms:03d}"
Поддерживаем SRT, VTT, JSON, XML — по вашим требованиям.
Что входит в работу
- Аналитика — определяем ваш стек и требования (локальный/облачный STT, нужные форматы, язык).
- Проектирование — выбираем оптимального провайдера, настраиваем конфигурацию (параметры модели, буферизация).
- Реализация — пишем интеграцию: код распознавания с STT таймстампами, экспорт в нужный формат, обработка ошибок.
- Тестирование — замеряем точность на ваших аудиофайлах (p99, расхождение меток).
- Деплой — разворачиваем на вашем сервере (Docker, облачная функция) или настраиваем SaaS-аккаунт.
Выходные артефакты:
- Рабочий модуль распознавания с word timestamps.
- Документация по API и настройке.
- Нагрузочные тесты (latency p99, throughput).
- Доработка под ваш интерфейс (если нужно).
Сколько это стоит и сроки
Стоимость интеграции word-level timestamps зависит от объёма и сложности вашего проекта. При больших объёмах (100+ часов в месяц) экономия достигает 40%. Сроки: от 0.5 до 1 дня для доработки пайплайна, 2–3 дня для построения системы с нуля.
Свяжитесь с нами — оценим ваш проект и предложим решение под ключ. Получите консультацию по стеку и срокам.







