Timed Text Markup Language

ОткрытьСохранитьXMLОформленный

XML для субтитров и титров от W3C, который запрашивают телерадиовещатели и стриминговые сервисы. DFXP — название его первого профиля, и многие файлы до сих пор его несут. IMSC, EBU-TT-D и iTT от Apple тоже относятся к TTML, у каждого свои привычки.

Коротко

Расширение.ttml
Тип медиаapplication/ttml+xml
СпецификацияW3C, Timed Text Markup Language 1 (TTML1), рекомендация. TTML2 его расширяет; IMSC и EBU-TT-D — подмножества для распространения.
Точность времениЛюбая: доли секунды, кадры или тики
Кодировка текстаУказывается в XML. Почти всегда UTF-8.
ОформлениеИменованные стили и атрибуты tts:: шрифт, размер, цвет, фон, курсив, полужирный, подчёркивание, зачёркивание, обводка
ПоложениеОбласти (regions): рамки, которые можно разместить и задать по размеру где угодно на картинке
ГоворящиеАгенты (ttm:agent), названные в заголовке
В контейнерахВ MP4 как stpp (ISO/IEC 14496-30), в потоках DASH, CMAF и HLS

Строение файла

XML-документ: заголовок, в котором названы стили и области, и тело из абзацев, по одному на каждый субтитр.

<tt xml:lang="en" …>
<head>styles, regions</head>
<body><div>
<p begin="00:00:23.000"
   end="00:00:24.500">
You're a jerk,<br/>Thom.</p>
</div></body>
</tt>
  1. 1 · Корень

    <tt> с пространствами имён TTML, языком и тактовой частотой, по которой считается время: ttp:frameRate, ttp:tickRate.

  2. 2 · Заголовок

    Именованные стили, области экрана и говорящие.

  3. 3 · Тайминг

    begin каждого абзаца и его end или dur.

  4. 4 · Текст

    Субтитр. Элементы span задают стиль его частей, а <br/> переносит строку.

Время

TTML записывает время большим числом способов, чем любой другой формат субтитров:

Запись Что это
00:00:23.500 Часы, минуты, секунды и доля секунды
00:00:23:12 Кадры после секунд: двенадцать при ttp:frameRate файла
23.5s, 23500ms, 1h Смещение в часах, минутах, секундах или миллисекундах
564f Кадры
235000000t Тики, по ttp:tickRate в секунду

Время отсчитывается от того, что его содержит. begin абзаца отсчитывается от начала своего <div> и <body>, а абзац без собственного конца заканчивается вместе с ними.

Стили

Стиль — это набор атрибутов tts:. Текст берёт их по порядку: сначала из своей области, затем из body, div, абзаца и окружающего span. Каждый элемент берёт стили, которые он называет (style="s1 s2", а также те, что называют они), затем собственные атрибуты.

Атрибут Эффект В Subtitld
tts:fontStyle="italic" Курсив Сохраняется
tts:fontWeight="bold" Полужирный Сохраняется
tts:textDecoration="underline", "lineThrough" Подчёркивание, зачёркивание Сохраняется
tts:color Цвет текста: название, #rrggbb, #rrggbbaa или rgb() Сохраняется, без прозрачности
tts:displayAlign, tts:textAlign Где текст находится в области Сохраняется, как одно из девяти мест
tts:fontFamily, tts:fontSize Шрифт и размер Не сохраняется
tts:backgroundColor, tts:textOutline Рамка за текстом, обводка Не сохраняется
<set> Стиль, который меняется во времени Не сохраняется

Области

Область — это рамка на картинке, которую задают tts:origin (положение) и tts:extent (размер). Внутри неё tts:displayAlign ставит текст вверху, посередине или внизу (before, center, after), а tts:textAlign — у одного края или по центру.

<region xml:id="top"
        tts:origin="10% 10%"
        tts:extent="80% 80%"
        tts:displayAlign="before"/>

Subtitld определяет, куда попадает текст, измеряется ли область в процентах, пикселях или ячейках, и выбирает ближайшее из девяти мест, которые обозначают {\an1} — {\an9} в SubRip. При записи файла каждое используемое место становится областью с соответствующим именем: bottom, top, top-left…

Когда файл не указывает. Собственные значения TTML по умолчанию ставят текст в левый верхний угол области, но плееры показывают его внизу и по центру, так же делает и Subtitld. Он также читает textAlign="start" в области без размера и положения как центрирование: файлы, записанные через pycaption (в том числе файлы старых версий Subtitld), ставят его во всех областях.

Профили

Большая часть TTML записывается по профилю: подмножеству языка со своими правилами. Subtitld читает каждый из них как TTML.

Профиль Где используется Особенности
DFXP Первый профиль TTML, расширение .dfxp Старые файлы с пространством имён http://www.w3.org/2006/10/ttaf1
IMSC 1 Стриминг через DASH, CMAF и HLS Профиль W3C для субтитров и титров в сети
EBU‑TT‑D Онлайн-плееры европейских вещателей Элементы часто пишутся с префиксом: <tt:p>
SMPTE‑TT Онлайн-титры американского телевидения Дополнения SMPTE для титров, перенесённых из эфира
iTT (.itt) Поставки в iTunes Store и Apple TV Время в кадрах (ttp:timeBase="smpte")

TTML в Subtitld

Сохраняется в .ttml
  • Текст каждого субтитра и переносы строк
  • Курсив, полужирный, подчёркивание, зачёркивание и цвет
  • Где субтитр стоит на экране
  • Говорящие, как агенты
  • Начало и конец с точностью до миллисекунды, по порядку
Некуда записать
  • Шрифты, размеры, фоны и обводки построчно
  • Точные размер и место области
  • Стили, которые меняются во времени, руби, картиночные субтитры
  • Переводы рядом с оригиналом, озвучка, лица говорящих

Сохраните проект .usfx, чтобы сохранить то, что относится к Subtitld.

Открытие файла TTML

Subtitld открывает .ttml, .dfxp, .itt и .xml, и:

  • читает TTML в любом виде: в своём пространстве имён, в старом пространстве DFXP или с tt: перед каждым элементом;
  • читает любые формы времени, каждое отсчитывается от содержащих его div и body;
  • следует стилям так, как их применяет TTML, сохраняя курсив, полужирный, подчёркивание, зачёркивание и любой цвет, кроме белого;
  • ставит каждый субтитр туда, где его показывает область;
  • принимает агентов за говорящих, готовых к озвучке, а xml:lang файла — за язык проекта;
  • читает кодировку, которую объявляет файл, и HTML-сущности, например &nbsp;.

Файл, который не является корректным XML, открывается с сообщением, указывающим строку и столбец. Файл, который вовсе не TTML, так и сообщает об этом.

Экспорт TTML

Диалог экспорта Subtitld с выбранным TTML; говорящие записаны как агенты

Экспорт, затем Субтитры и TTML или DFXP, предлагает:

  • ТекстОригинал, перевод или оба варианта, с переводом под оригиналом.
  • Имена говорящихНе выводятся, ставятся перед текстом (Thom: …) или записываются как агенты (ttm:agent), собственным способом TTML.
  • ОформлениеСохраняется или удаляется.
  • Сдвиг времениВсе субтитры смещаются раньше или позже на одну и ту же величину.
  • ВидБелый с чёрной обводкой или как в предпросмотре Subtitld: его шрифт, цвет и полупрозрачная подложка.

Файл — TTML 1 в UTF-8. Время записывается как 00:00:23.000, каждое место субтитров — как область, оформление — как span, а переносы строк — как <br/>. Его xml:lang — язык текста, который он содержит. TTML и DFXP получают один и тот же файл; отличается только расширение.

TTML или WebVTT?

WebVTT — для <track> на веб-странице: браузеры читают его сами. TTML — для телерадиовещателей, для стриминговых сервисов, которые его запрашивают, и для плееров, которые его читают, например dash.js и Shaka Player. Остальное — на странице WebVTT.

Интересные факты

2010

TTML 1.0 стал рекомендацией W3C в ноябре 2010 года, после черновиков, названных по его первому профилю: Distribution Format Exchange Profile, DFXP.

ttaf1

Старое пространство имён http://www.w3.org/2006/10/ttaf1 взято из черновиков 2006 года, когда TTML назывался Timed Text Authoring Format. Файлы до сих пор его несут.

Emmy

В 2016 году W3C получила премию Technology & Engineering Emmy за TTML наряду с HBO, Netflix, Telestream и SMPTE.

Похожие форматы

Нужно исправить файл .ttml?

Откройте его в Subtitld вместе с видео и поправьте тайминг по осциллограмме.

Скачать Subtitld