ТранскрибаторТранскрибатор
Практическая инструкция

Python re: как проверить формат и порядок таймкодов в TXT-расшифровке

Скрипт для отметок [MM:SS] и [HH:MM:SS]: поиск кандидатов, проверка диапазонов и убывающего времени. Учебный пример без автоматического исправления текста.

Транскрибатор
ЗАПИСЬПЛАН РАБОТЫОпишите формат времениНайдите подозрительныеметкиСверьте места по аудиоПроверить результатОТ СЛОВ К РЕЗУЛЬТАТУ
Работа с реальной записьюНаглядный учебный примерШаблон для копирования
1Опишите формат времени2Найдите подозрительныеметки3Сверьте места по аудио
Форма отметки, порядок времени и соответствие аудио — самостоятельные проверки.

Уточните соглашение о времени

Пример рассчитан на TXT, где временные метки записаны как [02:15] или [01:02:15]. Первая форма означает минуты и секунды, вторая — часы, минуты и секунды. Во всех компонентах здесь нужны две цифры, а минуты и секунды находятся в диапазоне 00–59.

Если Ваш файл использует [75:10] как семьдесят пять минут или содержит миллисекунды, это другая схема. Не объявляйте такой файл ошибочным на основании чужого правила. Сначала выберите соглашение для проекта и адаптируйте код.

Сохраните исходник отдельно. Для получения текста записи можно использовать расшифровку аудио. Проверка формата полезна перед переносом отметок в редактор или подготовкой рабочих ссылок на реплики.

Разделите поиск кандидатов и проверку

Первое выражение находит квадратные скобки с цифрами и двоеточиями. Поэтому [00:99] попадёт в список кандидатов, хотя не пройдёт проверку допустимого времени. Если искать только заведомо правильные метки, неправильные могут незаметно остаться вне отчёта.

Второе выражение проверяет весь кандидат через fullmatch. Оно не разрешает лишние символы и неподходящее количество компонентов. finditer даёт также положение в тексте, по которому код вычисляет физическую строку TXT.

Отметки без квадратных скобок, незакрытые скобки и обычные примечания этот пример не проверяет. Сообщение «кандидатов: 0» может означать отсутствие выбранного формата, а не идеальное состояние файла. Просмотрите начало расшифровки вручную.

Запустите проверку на контрольном файле

Сохраните код как check_timecodes.py рядом с transcript.txt и выполните python check_timecodes.py или python3 check_timecodes.py. Сначала создайте учебные строки с [00:10], [00:99] и [00:05]. Ожидаются сообщение о формате второй метки и уменьшении времени третьей.

from pathlib import Path
import re

text = Path("transcript.txt").read_text(encoding="utf-8-sig")
candidates = re.compile(r"\[([0-9:]+)\]")
valid = re.compile(r"(?:[0-9]{2}:)?[0-5][0-9]:[0-5][0-9]")
previous = None
found = 0
for match in candidates.finditer(text):
    found += 1
    value = match.group(1)
    line = text.count("\n", 0, match.start()) + 1
    if not valid.fullmatch(value):
        print(line, value, "формат не подходит")
        continue
    parts = list(map(int, value.split(":")))
    if len(parts) == 2:
        parts.insert(0, 0)
    hours, minutes, seconds = parts
    total = hours * 3600 + minutes * 60 + seconds
    if previous is not None and total < previous:
        print(line, value, "время уменьшилось")
    previous = total
print("Кандидатов в скобках:", found)

Неподходящее значение не становится новой точкой сравнения. Следующая допустимая метка сравнивается с предыдущей допустимой. Одинаковые значения не считаются уменьшением: несколько реплик могут иметь один округлённый таймкод.

Скрипт только читает файл и печатает отчёт. Это позволяет сначала понять причину: ошибка записи времени, объединение фрагментов или намеренное начало новой части с нуля.

Проверьте причину каждого сообщения

Если время уменьшилось после объединения нескольких записей, проверьте, используется ли общий отсчёт или каждая часть начинается с нуля. Для независимых файлов запускайте проверку отдельно. Не прибавляйте длительности автоматически, пока не установлен порядок и наличие промежутков.

Неверные метки исправляйте по исходной записи. Перестановка цифр «на глаз» способна создать допустимое время, которое ведёт к другой реплике. Найдите место по тексту, прослушайте фрагмент и проверьте соседние метки.

После правок сравните версии через HTML-отчёт difflib. Если реплики хранятся в таблице, отдельно выполните проверку структуры CSV: допустимый таймкод не гарантирует заполненные поля.

Учебный пример

Учебный пример: правильный вид ещё не означает правильное место

Вымышленный TXT показывает три разных результата проверки выбранного соглашения.

МеткаРезультат кодаСледующее действие
[00:10]ДопустимаПроверить реплику по аудио
[00:99]Формат не подходитУточнить секунды
[00:05] после [00:10]Время уменьшилосьПроверить порядок фрагментов
СинтаксисДве цифры и диапазоныПроверить fullmatchПорядокСекунды не уменьшаютсяПроверить границы частейТочностьНужная репликаПрослушать запись
Чистый отчёт по синтаксису не доказывает точность временной привязки.

Повторите проверку после исправлений, затем откройте несколько контрольных реплик по времени. Отметьте отдельно проверенные и ещё спорные места.

Карточка проверки таймкодов

Рабочая заготовкаВыделите и скопируйте
Файл и версия: [имя]
Формат: [MM:SS / HH:MM:SS]
Отсчёт: [общий / отдельный по частям]
Строка и метка: [значение]
Сообщение: [формат / уменьшение]
Причина после проверки: [наблюдение]
Исправление по аудио: [время]
Контроль соседних меток: [результат]

Частые вопросы

[75:10] всегда ошибка?

Нет. Это может быть другой формат с минутами больше 59. Учебный скрипт рассчитан на другую схему.

Одинаковые таймкоды считаются ошибкой?

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

Скрипт найдёт незакрытую скобку?

Нет. Он проверяет выбранные кандидаты в парных квадратных скобках. Это ограничение нужно учитывать.

Отсутствие сообщений гарантирует синхронизацию?

Нет. Соответствие реплики времени проверяйте по исходной записи.