Несовпадение таймкодов бывает постоянным, когда весь текст сдвинут на одно значение, и накопительным, когда ошибка растет к концу записи.
Эти случаи требуют разных исправлений: сначала нужно сравнить временную шкалу исходника, подготовленного аудио и сегментов распознавания.
Определите характер смещения
Три контрольные точки быстро показывают, где искать причину.
- Все фразы запаздывают на одинаковое количество секунд.
- В начале совпадение точное, но к концу появляется заметный дрейф.
- Ошибка возникает только на границах аудиочанков.
- Таймкод совпадает в плеере, но расходится после конвертации файла.
Почему возникает проблема
Временная шкала меняется при обрезке, ресемплинге, склейке и некорректном чтении длительности.
- Перед распознаванием удалено начало или участки тишины без учета offset.
- VBR-файл интерпретируется по неточным метаданным длительности.
- Чанки создаются с округлением и перекрытием, которое прибавляется дважды.
- После ресемплинга используется старая временная база.
- Таймкоды каждого сегмента не переводятся в шкалу исходного файла.
Пошаговая диагностика
Не сравнивайте только общую длительность: отметьте реальные звуковые события в начале, середине и конце.
- Зафиксируйте длительность, sample rate и time base исходника через медиапробу.
- Сравните их с файлом, который фактически отправлен в speech-to-text.
- Проверьте формулу global timestamp для каждого чанка.
- Найдите постоянный offset и отдельно измерьте скорость накопления дрейфа.
- Проверьте, не вырезает ли preprocessing тишину или поврежденные участки.
Храните единую шкалу исходного аудио
Все преобразования должны возвращать однозначное соответствие между локальным временем сегмента и исходником.
- Для каждого чанка хранится точное время начала в исходном аудио.
- Перекрывающиеся фразы дедуплицируются по времени и тексту.
- Обрезанные участки учитываются в карте преобразований.
- Финальный таймкод вычисляется до округления для вывода.
Как исправить проблему
Нормализуйте входной файл и пересчитайте таймкоды через сохраненную карту сегментов.
- Создайте стабильный PCM-поток с известным sample rate для распознавания.
- Сохраняйте offset и длительность каждого чанка с достаточной точностью.
- Прибавляйте начало чанка к локальному таймкоду только один раз.
- Удаляйте дубли в зоне overlap, не сдвигая последующие сегменты.
- Для готовой расшифровки выполните коррекцию по контрольным аудиомаркерам.
Как проверить результат
- Фразы совпадают с аудио в начале, середине и конце записи.
- На границах чанков нет дублей и пропусков.
- После экспорта в субтитры временная шкала не меняется.
- Повторный запуск дает те же таймкоды в пределах выбранной точности.
Типичные ошибки
- Компенсировать накопительный дрейф одним постоянным offset.
- Суммировать округленные длительности чанков.
- Удалять тишину без карты соответствия исходнику.
- Доверять только метаданным длительности проблемного VBR-файла.
Как предотвратить повторение
- Нормализуйте аудио одинаковым профилем перед обработкой.
- Добавьте тесты на длинных записях и разных кодеках.
- Храните технические параметры входа вместе с результатом.
- Контролируйте максимальный дрейф по нескольким точкам файла.
Когда нужна помощь
Если таймкоды расшифровки расходятся с аудио, я проверю конвертацию, сегментацию и временную базу, устраню offset или дрейф и настрою стабильный экспорт субтитров.