# Whisper: пословная синхронизация без выдуманного текста

## Почему обычного SRT недостаточно

Сегмент Whisper может длиться несколько секунд. Если показывать весь текст сегмента с его начала, слова в конце фразы появляются раньше речи. Поэтому нужны метки **каждого слова**.

## Настройки

Рекомендуемый Faster-Whisper:

```python
segments, info = model.transcribe(
    audio,
    language="ru",
    beam_size=5,
    temperature=0.0,
    word_timestamps=True,
    vad_filter=True,
    condition_on_previous_text=False,
    initial_prompt=glossary,
)
```

`condition_on_previous_text=False` снижает риск продолжения придуманной фразы через паузу. Словарь должен содержать только имена, бренды, числа и термины, а не весь сценарий.

## Защита от галлюцинаций

- Не создавать слова в участках, где фильтр тишины не нашёл речь.
- Не добавлять пользовательский заголовок, если его нет в аудио.
- Помечать слова с низкой вероятностью.
- Проверять первые и последние 5 секунд отдельно.
- Сравнивать нормализованный текст субтитров с набором распознанных слов.
- Если модель Small не помещается в память, использовать Base, но не заменять распознавание ручным распределением сценария.

## Правильная группировка

Блок заканчивается при одном из условий:

- пауза ≥ 350–500 мс;
- знак окончания предложения;
- 6–7 слов;
- превышена безопасная ширина строки;
- начинается новый смысловой акцент.

Время блока:

- `start` = начало первого слова;
- `end` = конец последнего слова + 40–100 мс;
- анимация появления не должна скрывать первое слово.

## Проверка

Проверять кадры ровно на временных метках слов. Контактный лист раз в пять секунд не доказывает синхронизацию, он просто красиво маскирует проблему.
