Это особенность браузеров: TextTrack привязывается к таймлайну в момент добавления, поэтому при смене во время play() тайминги могут плыть. Обычно либо пересоздают track на паузе с возвратом currentTime, либо вообще отказываются от и синхронизируют субтитры вручную через timeupdate, так стабильнее. Во многих обучающих сервисах с интерактивными субтитрами используют именно этот подход.
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.