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:: шрифт, розмір, колір, фон, курсив, жирний, підкреслення, перекреслення, контур |
| Розташування | Регіони: рамки, розміщені й розмірені будь-де на кадрі |
| Мовці | Агенти (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 · Текст
Сам субтитр. Фрагменти можуть мати власні стилі, а
<br/>розриває рядок.
Час
TTML записує час більше способами, ніж будь-який інший формат субтитрів:
| Запис | Що це |
|---|---|
00:00:23.500 |
Години, хвилини, секунди і дробова частина |
00:00:23:12 |
Кадри після секунд: дванадцятий при ttp:frameRate файлу |
23.5s, 23500ms, 1h |
Зсув у годинах, хвилинах, секундах або мілісекундах |
564f |
Кадри |
235000000t |
Такти, ttp:tickRate на секунду |
Час відлічується від того, що його містить. begin абзацу відлічується від початку свого <div> і <body>, а абзац без власного кінця завершується разом із ними.
Стилі
Стиль — це набір атрибутів tts:. Текст бере їх у певному порядку: спочатку з регіону, потім з тіла, div, абзацу і фрагмента навколо нього. Кожен елемент бере стилі, названі в ньому (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 визначає, де опиниться текст, незалежно від того, чи виміряно регіон у відсотках, пікселях чи клітинках, і вибирає найближчу з дев’яти позицій, які в SubRip позначають {\an1}–{\an9}. Під час запису кожна використана позиція є регіоном з відповідною назвою: 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
- Текст кожного субтитра і розриви рядків
- Курсив, жирний, підкреслення, перекреслення і колір
- Місце на екрані
- Мовці як агенти
- Початок і кінець з точністю до мілісекунди, у порядку
- Шрифти, розміри, фони і контури по рядках
- Точний розмір і місце регіону
- Стилі, що змінюються з часом, ruby, субтитри-зображення
- Переклади поруч з оригіналом, озвучення, обличчя мовців
Збережіть проєкт .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 разом із відео та вирівняйте за хвилею.