Объяснение атрибутов синхронизации W3C TTML
В стандарте W3C TTML dfxp, div
элемент может содержать begin
, end
а также duration
атрибутов.
Как интерпретировать значение этих атрибутов синхронизации?
Пример:
<div begin="00:00:22.0 end ="00:00:30.0">
<p begin="0s" end="1s">Hi,</p>
<p begin="3s" end="5s">Hello</p>
<p begin="5s" end="10s">there?</p>
</div>
Когда представлять p
элементы?
Любые указатели на спецификацию / реализацию TTML будут полезны.
3 ответа
Последняя спецификация TTML находится по адресу http://www.w3.org/TR/ttml1/ Многие из семантики синхронизации взяты из SMIL 2.1.
Ваш ответ состоит из двух частей: во-первых, как рассчитать время для какого-либо конкретного элемента контента; во-вторых, как вы соотносите эти времена с какой-то другой временной шкалой для воспроизведения.
Вычисление значений времени
Расчет времени зависит от нескольких вещей. Во-первых, можем ли мы предположить, что вы работаете в timeBase и markerMode, которые позволяют рассчитывать время? Это относится ко всем, кроме одного сценария, так что если у вас есть timeBase="media"
или же timeBase="clock"
тогда ты можешь. Также, если у вас есть timeBase="smpte"
а также markerMode="continuous"
, Исключением является, если вы находитесь в smpte discontinuous
,
Во-вторых, вам нужно знать значение timeContainer
атрибут родительского элемента. По умолчанию это par
Это означает, что время вычисляется относительно времени родительского элемента. Если это seq
тогда времена вычисляются относительно их родных братьев или родителей для первого ребенка.
В вашем примере, давайте предположим, что по умолчанию используется par timeContainer с непрерывным маркерным режимом. Затем вычисленное время каждого p - это его время, добавляемое к времени начала родительского div и ограниченное временем окончания родительского div, давая:
<div begin="00:00:22.0 end ="00:00:30.0">
<p begin="0s" end="1s">Hi,</p> <-- 00:00:22 -> 00:00:23
<p begin="3s" end="5s">Hello</p> <-- 00:00:25 -> 00:00:27
<p begin="5s" end="10s">there?</p> <-- 00:00:27 -> 00:00:30 (cut off by parent)
</div>
Относительно времени для воспроизведения
Лучшая часть спецификации, на которую стоит обратить внимание, это, вероятно, Приложение N. Интерпретация ваших вычисленных значений времени зависит от значения ttp:timeBase
:
clock
означает, что они относятся к некоторым реальным часам где-то, например, к часам UTC или GPS.media
означает, что они связаны со временем в некоторых других средствах массовой информации, таких как видеофайл. Time 0 relates to the beginning of the media generally, and if you need to map to frame values then you need to know the frame rate etc.smpte
means they relate to time code in some other media. Если у тебя естьdiscontinuous
ttp:markerMode
then all times are just event markers: in that case when you see the time code value in the media, you begin or end the content element as needed.
Другие вещи
I haven't mentioned evaluating the time expressions themselves - there are several syntaxes available including ticks at a tickrate, frames at a framerate, hours minutes and fractions of minutes etc.
Local times are also allowed.
In seq timeContainers siblings cannot overlap in time; in seq timeContainers they can.
It's not required to put times on both the div and the p in the example given. Also you can put times on body and span if you like.
Метки времени считаются абсолютными. В вашем случае у вас есть родительский div, который будет отображаться с 22-й до 30-й секунды, однако, все дочерние элементы имеют временные интервалы до 22-й секунды.
Так что этот TTML вообще ничего не покажет.
Для формата выражений времени, посмотрите на этот раздел в спецификации - http://www.w3.org/TR/ttaf1-dfxp/
Отметки времени 00:00:30.0 означают 0 часов, 0 минут, 30 секунд и после "." это доля секунд. Вместо доли секунд может быть другое ":", которое будет означать номер кадра и если есть "." после номера кадра он будет указывать подкадр. Частота кадров и подкадры определяются как ttp:frameRate или ttp:subFrameRate (также см. Спецификацию для более подробной информации.
Обычно есть только атрибут "end" или "duration". Однако один или все из "begin"/"end"/"duration" могут быть не указаны, и в этом случае этот конец будет считаться открытым. Таким образом, если нет "начала", то временной интервал начнется с "0". Если есть "начало", но нет "конца" или "длительности", то оно начнется в указанное время и будет всегда показываться после этого.
Вот как это работает:
- TTML привязан к указанному аудио / видео клипу
- Аудио / видео клип начинается в 00: 00: 00.0
- Текстовые узлы в TTML отображаются в указанное время
- begin="0s" говорит игроку показать текст
Hi,
в 00:00:00 - end = "1s" говорит игроку скрыть текст
Hi,
в 00:00:01,0 - begin = "3s" говорит игроку показать текст
Hello
в 00:00:03,0 - end = "5s" говорит игроку показать текст
Hello
в 00:00:05,0 - begin = "5s" говорит игроку показать текст
there?
в 00:00:05,0 - end = "10s" говорит игроку показать текст
there?
в 00:00 - 10,0