Несовпадение таймкодов бывает постоянным, когда весь текст сдвинут на одно значение, и накопительным, когда ошибка растет к концу записи.

Эти случаи требуют разных исправлений: сначала нужно сравнить временную шкалу исходника, подготовленного аудио и сегментов распознавания.

Определите характер смещения

Три контрольные точки быстро показывают, где искать причину.

  • Все фразы запаздывают на одинаковое количество секунд.
  • В начале совпадение точное, но к концу появляется заметный дрейф.
  • Ошибка возникает только на границах аудиочанков.
  • Таймкод совпадает в плеере, но расходится после конвертации файла.

Почему возникает проблема

Временная шкала меняется при обрезке, ресемплинге, склейке и некорректном чтении длительности.

  • Перед распознаванием удалено начало или участки тишины без учета offset.
  • VBR-файл интерпретируется по неточным метаданным длительности.
  • Чанки создаются с округлением и перекрытием, которое прибавляется дважды.
  • После ресемплинга используется старая временная база.
  • Таймкоды каждого сегмента не переводятся в шкалу исходного файла.

Пошаговая диагностика

Не сравнивайте только общую длительность: отметьте реальные звуковые события в начале, середине и конце.

  1. Зафиксируйте длительность, sample rate и time base исходника через медиапробу.
  2. Сравните их с файлом, который фактически отправлен в speech-to-text.
  3. Проверьте формулу global timestamp для каждого чанка.
  4. Найдите постоянный offset и отдельно измерьте скорость накопления дрейфа.
  5. Проверьте, не вырезает ли preprocessing тишину или поврежденные участки.

Храните единую шкалу исходного аудио

Все преобразования должны возвращать однозначное соответствие между локальным временем сегмента и исходником.

  • Для каждого чанка хранится точное время начала в исходном аудио.
  • Перекрывающиеся фразы дедуплицируются по времени и тексту.
  • Обрезанные участки учитываются в карте преобразований.
  • Финальный таймкод вычисляется до округления для вывода.

Как исправить проблему

Нормализуйте входной файл и пересчитайте таймкоды через сохраненную карту сегментов.

  1. Создайте стабильный PCM-поток с известным sample rate для распознавания.
  2. Сохраняйте offset и длительность каждого чанка с достаточной точностью.
  3. Прибавляйте начало чанка к локальному таймкоду только один раз.
  4. Удаляйте дубли в зоне overlap, не сдвигая последующие сегменты.
  5. Для готовой расшифровки выполните коррекцию по контрольным аудиомаркерам.

Как проверить результат

  • Фразы совпадают с аудио в начале, середине и конце записи.
  • На границах чанков нет дублей и пропусков.
  • После экспорта в субтитры временная шкала не меняется.
  • Повторный запуск дает те же таймкоды в пределах выбранной точности.

Типичные ошибки

  • Компенсировать накопительный дрейф одним постоянным offset.
  • Суммировать округленные длительности чанков.
  • Удалять тишину без карты соответствия исходнику.
  • Доверять только метаданным длительности проблемного VBR-файла.

Как предотвратить повторение

  • Нормализуйте аудио одинаковым профилем перед обработкой.
  • Добавьте тесты на длинных записях и разных кодеках.
  • Храните технические параметры входа вместе с результатом.
  • Контролируйте максимальный дрейф по нескольким точкам файла.

Когда нужна помощь

Если таймкоды расшифровки расходятся с аудио, я проверю конвертацию, сегментацию и временную базу, устраню offset или дрейф и настрою стабильный экспорт субтитров.