Перейти к содержимому
Free Subtitle Converter
Язык
Цветовая тема
Поддержать нас

XML-субтитры: TTML, DFXP и IMSC

Что такое файлы субтитров TTML, DFXP и IMSC, как в них работают тайминги и что именно конвертер этого сайта из них читает, а что отбрасывает.

Автор: Syed Peera Saheb · Опубликовано

Краткий ответ

TTML, DFXP и IMSC — XML-файлы субтитров на основе языка Timed Text Markup Language от W3C. DFXP — более раннее название TTML, а IMSC — его профиль, используемый в стриминге и телевещании.

Если у вас есть файл субтитров .ttml, .dfxp или .xml, а нужен SRT или VTT, конвертер на этом сайте прочитает его текст, тайминги, переносы строк, курсив, полужирный и подчёркивание. Позиции, цвета и шрифты он не сохраняет и читает не любой XML-файл с субтитрами.

Одно семейство, несколько названий

TTML — стандарт W3C для синхронизированного текста. Пока он разрабатывался, его называли DFXP (Distribution Format Exchange Profile), и в спецификации TTML 1 до сих пор отмечено, что старое название сохранилось в названиях профилей и расширениях файлов. На практике файл .dfxp и файл .ttml содержат документ одного и того же вида. TTML2 — вторая версия с дополнительными возможностями.

Поскольку TTML очень обширен, отрасли определяют профили — подмножества, которые указывают, какие возможности может использовать файл. IMSC (Internet Media Subtitles and Captions) — один из самых распространённых. Его текущие версии определяют текстовый профиль и профиль только для изображений. EBU-TT — профиль, используемый европейскими вещателями, а SMPTE-TT применяется в американском телевещании. Все они начинаются с корневого элемента <tt>.

Как выглядит файл TTML

Документ TTML состоит из head и body. В head можно задать стили, например шрифт или цвет, и регионы — области экрана. В body находятся абзацы, элементы <p>, у каждого из которых есть время начала и конца и текст субтитра. <br/> начинает новую строку, а элементы <span> задают стиль или время для частей строки.

Короткий файл 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" xmlns:ttp="http://www.w3.org/ns/ttml#parameter" ttp:tickRate="10000000">
  <head>
    <styling><style xml:id="it" tts:fontStyle="italic" tts:color="yellow"/></styling>
    <layout><region xml:id="top" tts:origin="10% 5%" tts:extent="80% 20%"/></layout>
  </head>
  <body>
    <div>
      <p begin="12000000t" end="35000000t" region="top">Hello<br/><span style="it">there</span></p>
    </div>
  </body>
</tt>

Как работают тайминги в TTML

TTML допускает несколько способов записи времени. Время на часах выглядит как 00:00:01.200 или 00:00:01:05 с номером кадра в конце. Время-смещение — это число с единицей измерения: 1.2s, 1200ms, 30f для кадров или 12000000t для тиков. Тики часто встречаются в файлах от стриминговых сервисов; атрибут tickRate корневого элемента указывает, сколько тиков в секунде, так что при tickRate 10 000 000 значение 12000000t — это 1.2 секунды.

Время также может быть относительным. У div может быть своё время начала, к которому прибавляется время абзацев внутри него, абзац может указывать длительность вместо времени конца, а абзац без времени может брать его у своих span. Поэтому простые инструменты поиска и замены часто неправильно обрабатывают тайминги TTML.

Что читает этот сайт

Конвертер распознаёт TTML по корневому элементу <tt>, независимо от расширения файла, поэтому открываются файлы .ttml, .dfxp и .xml. Пример выше превращается в один субтитр с 1.2 по 3.5 секунды из двух строк, вторая — курсивом. Подробно он читает:

  • Время на часах с долями секунды или кадрами и время-смещение в часах, минутах, секундах, миллисекундах, кадрах и тиках.
  • Параметры frameRate, frameRateMultiplier, subFrameRate и tickRate корневого элемента. Если tickRate не задан, он выводится из частоты кадров или принимается равным одному тику в секунду, как описано в спецификации.
  • Begin, end и dur у абзацев и span, с прибавлением времени начала охватывающих body и div.
  • Переносы строк, записанные как <br/>.
  • Курсив, полужирный и подчёркивание — заданные прямо на элементе или через именованный стиль.
  • Элементы с префиксом пространства имён, например <tt:p> в EBU-TT и некоторых файлах IMSC. Метаданные, например заметки для редакторов, пропускаются и никогда не становятся текстом субтитров.

Что отбрасывается

Конвертер сохраняет слова и тайминги и отбрасывает оформление. Регионы и позиции, цвета, шрифты, размеры, фоны, обводка и настройки направления текста не переносятся. Если в файле два абзаца показываются одновременно в разных регионах, например два говорящих вверху и внизу, они станут двумя перекрывающимися субтитрами; проверка субтитров их укажет.

Некоторые XML-файлы субтитров вовсе не являются TTML, и страница сообщает, что не распознаёт их как субтитры. Это относится и к собственному XML timedtext от YouTube, корневой элемент которого — <timedtext> или <transcript>, а не <tt>. Файлы IMSC на основе изображений, которые хранят картинки с текстом, не содержат текста для чтения. Необычные режимы таймингов, например таймкоды SMPTE drop-frame, особо не обрабатываются, поэтому сверьте несколько субтитров ближе к концу предпросмотра с видео.

Что записывается

При конвертации в TTML или DFXP конвертер записывает простой документ TTML 1: каждый субтитр становится абзацем со временем begin и end в миллисекундах, переносы строк — <br/>, а курсив, полужирный и подчёркивание — span с соответствующим атрибутом оформления. Раздела head со стилями или регионами нет, поэтому плееры используют своё оформление по умолчанию. Вариант DFXP записывает тот же документ с расширением .dfxp.

Атрибут языка у корневого элемента остаётся пустым, потому что конвертер не может знать, на каком языке ваши субтитры. Некоторым платформам он обязателен. Если это ваш случай, откройте файл в текстовом редакторе и перед загрузкой заполните xml:lang кодом, например en или es.

Файл, который конвертер записывает из примера
<?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="">
  <body>
    <div>
      <p begin="00:00:01.200" end="00:00:03.500">Hello<br/><span tts:fontStyle="italic">there</span></p>
    </div>
  </body>
</tt>

Конвертация TTML или DFXP в SRT или VTT

Конвертация занимает несколько секунд, а файл остаётся на вашем устройстве.

  • Откройте конвертер TTML в SRT или DFXP в SRT либо основной конвертер и выберите файл .ttml, .dfxp или .xml.
  • Посмотрите сводку. В ней указано, сколько субтитров найдено и были ли абзацы с нечитаемыми таймингами.
  • Выберите выходной формат, например SRT или VTT, и просмотрите предпросмотр.
  • Воспроизведите результат с видео и сравните субтитр в начале и субтитр в конце — на случай, если в файле использован режим таймингов, который конвертер не поддерживает.
  • Скачайте файл. Он сохраняется в UTF-8.

Когда использовать TTML, а когда нет

Используйте TTML или DFXP, когда их требует платформа, стриминговый сервис или вещатель; в их спецификациях сдачи обычно указан профиль, и простой файл TTML 1 может ему соответствовать, а может и нет. Для повседневного использования в плеерах, редакторах и на видеоплатформах SRT или WebVTT проще и шире поддерживаются. Если вы получили файл TTML и хотите только посмотреть или отредактировать его, конвертируйте его в SRT.

В любом случае сохраните исходный файл. При конвертации в SRT регионы и оформление теряются безвозвратно, поэтому, если позже снова понадобится сдать TTML с исходными позициями, вам нужен будет оригинал, а не TTML, пересобранный из SRT.

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

DFXP — это то же самое, что TTML? На практике да. DFXP — название, которое использовалось, пока TTML был черновиком, и конвертер обрабатывает оба одинаково.

Почему мой файл .xml не распознаётся как файл субтитров? Либо это не TTML, например XML timedtext от YouTube, либо в нём нет корневого элемента <tt>. Такие файлы конвертер не читает.

Сохранит ли конвертированный SRT позицию каждого субтитра? Нет. В SRT нет стандартного способа размещать субтитры, и конвертер не переносит регионы TTML ни в один формат.

Открыть конвертер субтитров
Угостить кофе