Timed Text Markup Language
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 · Корень
<tt>с пространствами имён TTML, языком и тактовой частотой, по которой считается время:ttp:frameRate,ttp:tickRate. - 2 · Заголовок
Именованные стили, области экрана и говорящие.
- 3 · Тайминг
beginкаждого абзаца и егоendилиdur. - 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
- Текст каждого субтитра и переносы строк
- Курсив, полужирный, подчёркивание, зачёркивание и цвет
- Где субтитр стоит на экране
- Говорящие, как агенты
- Начало и конец с точностью до миллисекунды, по порядку
- Шрифты, размеры, фоны и обводки построчно
- Точные размер и место области
- Стили, которые меняются во времени, руби, картиночные субтитры
- Переводы рядом с оригиналом, озвучка, лица говорящих
Сохраните проект .usfx, чтобы сохранить то, что относится к Subtitld.
Открытие файла TTML
Subtitld открывает .ttml, .dfxp, .itt и .xml, и:
- читает TTML в любом виде: в своём пространстве имён, в старом пространстве DFXP или с
tt:перед каждым элементом; - читает любые формы времени, каждое отсчитывается от содержащих его div и body;
- следует стилям так, как их применяет TTML, сохраняя курсив, полужирный, подчёркивание, зачёркивание и любой цвет, кроме белого;
- ставит каждый субтитр туда, где его показывает область;
- принимает агентов за говорящих, готовых к озвучке, а
xml:langфайла — за язык проекта; - читает кодировку, которую объявляет файл, и HTML-сущности, например
.
Файл, который не является корректным XML, открывается с сообщением, указывающим строку и столбец. Файл, который вовсе не TTML, так и сообщает об этом.
Экспорт 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.
Интересные факты
TTML 1.0 стал рекомендацией W3C в ноябре 2010 года, после черновиков, названных по его первому профилю: Distribution Format Exchange Profile, DFXP.
Старое пространство имён http://www.w3.org/2006/10/ttaf1 взято из черновиков 2006 года, когда TTML назывался Timed Text Authoring Format. Файлы до сих пор его несут.
В 2016 году W3C получила премию Technology & Engineering Emmy за TTML наряду с HBO, Netflix, Telestream и SMPTE.
Похожие форматы
Откройте его в Subtitld вместе с видео и поправьте тайминг по осциллограмме.