SSubToolDesk
ru

Как извлечь чистый текст из файлов субтитров SRT или VTT

Вытащить обычный диалог из файла субтитров кажется тривиальной задачей, пока не наткнёшься на номера cue, временные метки и предложения, разорванные посередине строки. Разбираемся, как сделать это правильно.

Файлы субтитров хранят три вещи, перемешанные вместе: порядковый номер, диапазон времени и сам текст. Если вам нужен только текст (для цитаты в блоге, статьи, поискового индекса или для передачи в другой инструмент), тайминг и нумерация, это просто лишний шум, который нужно убрать.

Ручной подход и где он ломается

Быстрая замена по регулярному выражению для строк с таймингом (\d{2}:\d{2}:\d{2}[,.]\d{3}\s*-->\s*...) справляется с очевидным случаем. Но вот где всё разваливается:

  • Номера cue, похожие на текст. Строка, в которой просто 42, может быть индексом cue, а может, хотя и редко, быть частью самого диалога (персонаж произносит число вслух). Наивное удаление не всегда может надёжно отличить одно от другого в большом объёме данных.
  • Предложения, разбитые между cue. Субтитры нарезаны для удобства чтения на экране (примерно одна строка на несколько секунд), а не по границам грамматики. Одно предложение регулярно растягивается на два или три идущих подряд cue. Если просто удалить строки с таймингом без склейки фрагментов, получится рваный, несвязный набор кусков вместо связного текста.
  • Встроенные теги форматирования. <i>, <b>, а также теги голоса и цвета в VTT (<v Speaker>, <c.colorname>) тоже нужно убирать, иначе они появятся в выводе как буквальный текст в угловых скобках.
  • Смешанные символы конца строки. Файлы, экспортированные из разных инструментов или операционных систем, иногда смешивают \r\n и \n, что может ломать регулярные выражения, рассчитанные только на один из вариантов.

Как выглядит хороший результат

Правильно извлечённый текст читается как обычная проза: целые предложения, разбивка на абзацы там, где есть естественные паузы, никаких случайных чисел или обрывков временных меток, никакой оставшейся разметки. Цель, документ, который выглядит так, будто кто-то просто расшифровал диалог с самого начала, без единого следа формата субтитров, из которого он взят.

Как сделать это без ручной чистки

Наш конвертер SRT в TXT (и аналогичный конвертер VTT в TXT) делает всё это автоматически: номера cue и временные метки удаляются, теги убираются, предложения, разбитые между cue, склеиваются в связные абзацы. Всё работает полностью в браузере, так что ничего из файла никуда не отправляется.

Конвертировать SRT в TXT