Перейти к основному содержимому
SubtitleMatrix

Формат субтитров TTML

Что умеет этот формат

Оформление текста
Шрифты, цвет, обводка, тень
Положение на экране
Да
Тайминг караоке
Нет
Переносы строк внутри реплики
Да
Таймлайн
Начало и конец для каждой реплики
Точность тайминга
1 мс
Тайминг хранится в номерах кадров
Нет
Текст справа налево
Да

Примеры

Типичный файл TTML и то, что сайт из него читает

Файл

<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling" xml:lang="en">
  <head>
    <styling>
      <style xml:id="s1" tts:color="#FFFF00" tts:fontWeight="bold"/>
    </styling>
    <layout>
      <region xml:id="bottom" tts:origin="10% 80%" tts:extent="80% 20%"/>
    </layout>
  </head>
  <body>
    <div>
      <p begin="00:00:01.000" end="00:00:03.500" region="bottom" style="s1">Hello <span tts:fontStyle="italic">there</span>.</p>
      <p begin="00:00:03.500" end="00:00:06.000" region="bottom">How are you?<br/>Fine, thanks.</p>
    </div>
  </body>
</tt>

Что в нём

2 cues, 3 lines of text

  00:00:01.000 → 00:00:03.500
    Hello there.   [italic ×1]
    [region="bottom" style="s1"]
  00:00:03.500 → 00:00:06.000
    How are you?
    Fine, thanks.
    [region="bottom"]

Outside the cues:
  prolog     an XML declaration and the namespace bindings, kept as they came in
  styling    1 × <style> — "s1", the colour and weight a paragraph points at by name
  layout     1 × <region> — "bottom", the origin and extent a paragraph points at by name
  resolved   the head is kept as it was written and is not applied here — a paragraph's style="s1" region="bottom" stays an attribute, not a colour or a screen position

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

Неаккуратный файл TTML: что всё равно читается

Файл

<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling">
  <body>
    <div begin="00:00:01.000" end="00:00:05.000">
      <p>Inherits its timing from the div, which we do not resolve.</p>
      <p begin="00:00:06.000" end="00:00:07.000">This one has its own timing.</p>
    </div>
    <!-- <p begin="00:00:08.000" end="00:00:09.000">commented out</p> -->
    <div>
      <p begin="00:00:10.000"/>
      <p begin="00:00:11.000" end="00:00:12.000">Last one.</p>
    </div>
  </body>
</tt>

Что в нём

3 cues, 2 lines of text

  00:00:06.000 → 00:00:07.000
    This one has its own timing.
  00:00:10.000 → 00:00:12.000
    (no text)
  00:00:11.000 → 00:00:12.000
    Last one.

Outside the cues:
  prolog     an XML declaration and the namespace bindings, kept as they came in
  head       none — no <styling> and no <layout>, and no paragraph points at one either
  comments   the commented-out <p> stays a comment, in the place it was written
  divs       the timings on an enclosing <div> are not pushed down onto the paragraphs inside it

Reported while reading — repaired or skipped, never silently:
  1 × paragraphs with no readable begin time of their own (they were skipped — see the note about timing inherited from an enclosing div)
  1 × paragraphs with neither an end time nor a duration of their own (their end times were generated)

Второй файл намеренно неаккуратный: BOM, смешанные переводы строк и пустые поля. Сайт всё равно дочитывает его до конца, а пропущенные фрагменты перечисляет в отчёте.

Конвертировать TTML (Timed Text) в другой формат

Каждая страница работает целиком в вашем браузере. Подписи говорят, чего стоит это направление, ещё до того, как вы его откроете.

TTML → CSV в браузере. Потери: стили, позиции, поля формата.
  • Оформление
  • Позиционирование
  • Содержимое формата
TTML → LRC в браузере. Потери: тайминг, стили, позиции, точность, поля формата.
  • Тайминг
  • Оформление
  • Позиционирование
  • Точность
  • Содержимое формата
TTML → MICRODVD в браузере. Потери: стили, позиции, fps, поля формата.
  • Оформление
  • Позиционирование
  • Частота кадров
  • Содержимое формата
TTML → SBV в браузере. Потери: стили, позиции, поля формата.
  • Оформление
  • Позиционирование
  • Содержимое формата
TTML → SRT в браузере. Потери: стили, позиции, поля формата.
  • Оформление
  • Позиционирование
  • Содержимое формата
TTML → TXT в браузере. Потери: тайминг, стили, позиции, переносы, поля формата.
  • Тайминг
  • Оформление
  • Позиционирование
  • Переносы строк
  • Содержимое формата
TTML → VTT в браузере. Потери: стили, позиции, поля формата.
  • Оформление
  • Позиционирование
  • Содержимое формата

Конвертация в этот формат

TTML — XML-формат для вещания и стриминга, где время и оформление заданы атрибутами. Внутри файла — XML-дерево tt, body, div и p, где у каждого элемента p есть начало и конец; время записывается как begin="00:00:01.000", то есть часы, минуты, секунды и миллисекунды через точку в атрибутах begin и end.

TTML хранит полное оформление через tts-атрибуты, стили и регионы, а время задаётся атрибутами begin и end у элементов p. Конвертация идёт на вашем устройстве, без регистрации и загрузки файлов на сервер.

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

Что хранит TTML помимо текста реплик?

Структура TTML: XML-дерево tt, body, div и p, где у каждого элемента p есть начало и конец. Дополнительно: пролог и раздел head со стилями, регионами и метаданными. Оформление — полное оформление через tts-атрибуты, стили и регионы.

Как TTML записывает начало и конец реплики?

TTML пишет время как begin="00:00:01.000" (часы, минуты, секунды и миллисекунды через точку в атрибутах begin и end). Полный интервал выглядит так: begin="00:00:01.000" end="00:00:03.500".

Насколько богатое оформление поддерживает TTML?

Оформление TTML — полное оформление через tts-атрибуты, стили и регионы. Сильнее всего это заметно при сравнении с ASS: там есть шрифт, цвет, обводка, тень и караоке, а TTML такие поля либо не хранит, либо записывает упрощённо.

Что теряется при переводе TTML в более простой формат?

При переводе TTML в SRT или VTT теряются стили, регионы и раздел head; в ASS и JSON сохраняется больше, но регионы всё равно приходится пересобирать.

Можно ли перевести TTML в другие форматы в браузере?

Да: на сайте открыто 11 направлений перевода из TTML — в SRT, VTT, ASS, SSA, SBV, SMI, LRC, MicroDVD, JSON, TXT, CSV. Файл разбирается и записывается в текущей вкладке, не отправляется на сервер, а пакет можно скачать одним архивом.

Как TTML читает повреждённый файл?

TTML читается как XML: незакрытые элементы и незнакомые расширения не роняют разбор, а p без времени пропускается и попадает в отчёт.