Spec-Zone.ru › Web APIs

API WebVTT

Подписи к видеороликам веб-формата (WebVTT) — это текстовые дорожки, предоставляющие определённые текстовые «метки», которые синхронизированы по времени с другими медиа, такими как видео или аудио дорожки. API WebVTT предоставляет функциональность для определения и управления этими текстовыми дорожками. API WebVTT в первую очередь используется для отображения субтитров или титров, которые накладываются на видеоконтент, но у него есть и другие применения: предоставление информации о главах для удобной навигации и общая метаданные, которые необходимо синхронизировать по времени с аудио или видео контентом.

Концепции и использование

Текстовая дорожка — это контейнер для данных синхронизированного по времени текста, который может воспроизводиться параллельно с видео- или аудиодорожкой для предоставления перевода, транскрипции или обзора содержимого. Видео- или аудиоэлемент медиа может определять дорожки различных типов или на разных языках, что позволяет пользователям отображать соответствующие дорожки в зависимости от их предпочтений или потребностей.

Ниже перечислены различные типы текстовых данных, которые могут быть указаны. Обратите внимание, что браузеры не обязательно поддерживают все типы текстовых дорожек.

  • subtitles предоставляют текстовый перевод диалога. Это тип текстовой дорожки по умолчанию, и если она используется, необходимо указать исходный язык.
  • captions предоставляют транскрипцию разговорной речи и могут содержать информацию об другом аудио, таком как музыка или фоновый шум. Они предназначены для пользователей с нарушениями слуха.
  • chapters предоставляют информацию о высокой уровне навигации, позволяя пользователям легче переключаться на соответствующее содержимое.
  • metadata используется для других типов информации, синхронизированной по времени.

Индивидуальные временные единицы текстовых данных в пределах дорожки называются «метками». Каждая метка имеет начальное время, конечное время и текстовую нагрузку. Она также может иметь «настройки меток», которые влияют на область отображения, позицию, выравнивание и/или размер. Наконец, метка может иметь метку, которая может использоваться для её выбора для стилизации CSS.

Текстовую дорожку и метки можно определить в файле, используя формат файлов WebVTT, а затем связать с определенным <video> элементом с помощью <track> элемента.

В качестве альтернативы, вы можете добавить TextTrack к элементу медиа на JavaScript, используя HTMLMediaElement.addTextTrack(), а затем добавить отдельные VTTCue объекты в дорожку с помощью TextTrack.addCue().

::cue CSS псевдоэлемент можно использовать как в HTML, так и в файле WebVTT для стилизации меток для определенного элемента, для определенного тега внутри метки, для класса VTT или для метки с определённой меткой. ::cue-region псевдоэлемент предназначен для стилизации меток в определенной области, но не поддерживается ни в одном браузере.

Большинство важных функций WebVTT можно получить, используя либо формат файла, либо веб-API.

Интерфейсы

VTTCue

Представляет метку, текст, отображаемый в определённом временном интервале текстовой дорожки, связанной с элементом медиа.

VTTRegion

Представляет часть элемента видео, на которую может быть рендерирована VTTCue.

TextTrack

Представляет текстовую дорожку, которая содержит список меток для отображения вместе с связанным элементом медиа в различные моменты во время воспроизведения.

TextTrackCue

Абстрактный базовый класс для различных типов меток, таких как VTTCue.

TextTrackCueList

Объект, подобный массиву, который представляет динамически обновляемый список TextTrackCue объектов. Экземпляр этого типа получается из TextTrack.cues для получения всех меток в TextTrack объекте.

TextTrackList

Представляет список текстовых дорожек, определённых для элемента медиа, при этом каждая дорожка представлена отдельным TextTrack экземпляром в списке.

Связанные интерфейсы

TrackEvent

Часть API HTML DOM, это интерфейс для событий addtrack и removetrack, которые срабатывают, когда дорожка добавляется или удаляется из TextTrackList (или, более общим образом, когда дорожка добавляется/удаляется из элемента HTML медиа).

Связанные расширения CSS

Эти CSS псевдоэлементы используются для стилизации меток в медиа с дорожками VTT.

::cue

Сопоставляет метки внутри выбранного элемента в медиа с дорожками VTT.

Примечание: Спецификация определяет ещё один псевдоэлемент, ::cue-region, но он не поддерживается ни одним браузером.

Примеры

Использование API WebVTT для добавления субтитров

HTML

В данном примере добавляется новая TextTrack к видео, затем добавляются метки с помощью вызовов метода TextTrack.addCue(), в качестве аргументов используются сконструированные VTTCue объекты.

<video
  controls
  src="https://interactive-examples.mdn.mozilla.net/media/cc0-videos/friday.mp4"></video>

CSS

video {
  width: 420px;
  height: 300px;
}

JavaScript

let video = document.querySelector("video");
let track = video.addTextTrack("captions", "Captions", "en");
track.mode = "showing";
track.addCue(new VTTCue(0, 0.9, "Hildy!"));
track.addCue(new VTTCue(1, 1.4, "How are you?"));
track.addCue(new VTTCue(1.5, 2.9, "Tell me, is the lord of the universe in?"));
track.addCue(new VTTCue(3, 4.2, "Yes, he's in - in a bad humor"));
track.addCue(new VTTCue(4.3, 6, "Somebody must've stolen the crown jewels"));
console.log(track.cues);

Результат

Отображение содержимого VTT, определённого в файле

Этот пример демонстрирует, как добавить тот же набор субтитров к видео, что и в примере Использование API WebVTT для добавления субтитров выше. В этот раз, однако, мы сделаем это декларативно, используя элемент <track>.

Сначала определим субтитры внутри файла "captions.vtt":

WEBVTT

00:00.000 --> 00:00.900
Hildy!

00:01.000 --> 00:01.400
How are you?

00:01.500 --> 00:02.900
Tell me, is the lord of the universe in?

00:03.000 --> 00:04.200
Yes, he's in - in a bad humor

00:04.300 --> 00:06.000
Somebody must've stolen the crown jewels

Затем мы можем добавить его в элемент <video> с помощью элемента <track>. Следующий HTML приведет к той же текстовой дорожке, что и в предыдущем примере:

<video controls src="video.webm">
  <track default kind="captions" src="captions.vtt" srclang="en" />
</video>

Мы можем добавить несколько элементов <track> для указания различных типов дорожек на нескольких языках, используя атрибуты kind и srclang. Обратите внимание, что если kind указан, srclang обязательно должен быть задан тоже. Атрибут default может быть добавлен только к одному <track>: именно он будет воспроизводиться, если настройки пользователя не указывают конкретный язык или тип.

<video controls src="video.webm">
  <track default kind="captions" src="captions.vtt" srclang="en" />
  <track kind="subtitles" src="subtitles.vtt" srclang="en" />
  <track kind="descriptions" src="descriptions.vtt" srclang="en" />
  <track kind="chapters" src="chapters_de.vtt" srclang="de" />
  <track kind="subtitles" src="subtitles_en.vtt" srclang="en" />
</video>

Стилизация WebVTT в HTML или стиле

Вы можете стилизовать метки WebVTT, сопоставляя элементы с помощью псевдоэлемента ::cue. Это позволяет изменять внешний вид всего текстового содержимого меток или только определённых элементов. В этом примере мы добавим немного стилей к первому примеру выше.

Примечание: Также можно определять стили в формате файлов WebVTT.

HTML

HTML для самого видео такой же, как мы видели ранее:

<video
  controls
  src="https://interactive-examples.mdn.mozilla.net/media/cc0-videos/friday.mp4"></video>

CSS

Сначала используем ::cue псевдоэлемент для выбора всех текстовых меток видео, давая им больший красный цвет и градиентный фон.

video::cue {
  font-size: 1.5rem;
  background-image: linear-gradient(to bottom, yellow, lightyellow);
  color: red;
}

Затем мы используем ::cue для выбора текста, который был разметкой с помощью элементов u и b, и стилизуем их зелёным и жёлтым соответственно.

video::cue(u) {
  color: green;
}

video::cue(b) {
  color: purple;
}

JavaScript

JavaScript такой же, как в первом примере, за исключением того, что мы поместили разметку некоторых текстовых меток с помощью <b> (жирный шрифт) и <u> (подчёркнутый) тегов. По умолчанию помеченный текст отображался бы жирным или подчёркнутым (в зависимости от тега), но мы использовали ::cue в предыдущем разделе, чтобы также стилизовать текст зелёным и фиолетовым соответственно.

let video = document.querySelector("video");
let track = video.addTextTrack("captions", "Captions", "en");
track.mode = "showing";
track.addCue(new VTTCue(0, 0.9, "Hildy!"));
track.addCue(new VTTCue(1, 1.4, "How are you?"));
track.addCue(
  new VTTCue(1.5, 2.9, "Tell me, is the <u>lord of the universe</u> in?"),
);
track.addCue(new VTTCue(3, 4.2, "Yes, he's in - in a bad humor"));
track.addCue(
  new VTTCue(4.3, 6, "Somebody must've <b>stolen</b> the crown jewels"),
);
console.log(track.cues);

Результат

Больше примеров стилизации меток

Этот пример демонстрирует дополнительные примеры того, как вы можете форматировать текст субтитров с помощью тегов и затем стилизовать их. Такую же разметку и стили можно использовать в формате файла WebVTT.

HTML и CSS для отображения самого видео такие же, как и в первом примере выше, поэтому здесь мы показываем только код, специфичный для разметки и стилизации текста.

Стилизация по типу тега

Первый субтитр будет отображаться в течение всех 6 секунд видео и содержать текст, разметку которого выполняют теги b, u, i и c.

let video = document.querySelector("video");

let track = video.addTextTrack("captions", "Captions", "en");
track.mode = "showing";

track.addCue(
  new VTTCue(
    0,
    6,
    "Styles: Normal <b>bold</b> <u>underlined</u> <i>italic</i> <c>class</c>",
  ),
);

Сначала добавим правило, чтобы все субтитры были на 1,2 размера больше обычного.

video::cue {
  font-size: 1.2rem;
}

Затем мы стилизуем каждый из перечисленных тегов разными цветами.

video::cue(u) {
  color: green;
}

video::cue(b) {
  color: purple;
}

video::cue(i) {
  color: red;
}

video::cue(c) {
  color: lavender;
}

Стилизация по классу

Второй субтитр отображается сразу после первого и содержит те же теги. Однако все они имеют применённый класс myclass.

track.addCue(
  new VTTCue(
    1,
    6,
    "Styles: Class markup: <b.myclass>bold</b> <u.myclass>underlined</u> <i.myclass>italic</i> <c.myclass>class</c>",
  ),
);

Мы стилизуем все элементы с классом .myclass светло-голубым цветом текста, за исключением конкретного случая c.myclass, которому задаётся синий цвет текста.

video::cue(.myclass) {
  color: lightblue;
}

video::cue(c.myclass) {
  color: blue;
}

Стилизация с помощью атрибутов

Следующие два субтитра отображаются после двух, а затем трёх секунд. Первый отображает текст, разметку которого выполняет тег lang для трёх вариантов английского языка, а второй отображает тег <v> (голос) с атрибутом "Bob".

track.addCue(
  new VTTCue(
    2,
    6,
    "<lang en>Lang markup: 'en'</lang>  <lang en-GB>Text: 'en-GB'</lang> <lang en-US>Text: 'en-US'</lang>",
  ),
);

track.addCue(new VTTCue(3, 6, "<v Bob>Bob's voice</v>"));

Мы используем селектор атрибута lang для задания разному варианту языка разного цвета текста.

video::cue([lang="en"]) {
  color: lightgreen;
}

video::cue([lang="en-GB"]) {
  color: darkgreen;
}

video::cue(:lang(en-US)) {
  color: #6082b6;
}

Затем мы используем селектор тега v и атрибута для voice , чтобы окрасить текст голосом "Bob" в оранжевый цвет.

video::cue(v[voice="Bob"]) {
  color: orange;
}

Результат

В примере должны отображаться субтитры с цветовым кодированием, соответствующим вышеуказанной стилизации (если текст не окрашен, значит ::cue не поддерживается вашим браузером).

Спецификации

Спецификация
Формат Web Video Text Tracks
# the-vttcue-interface
HTML
# texttrack
Формат Web Video Text Tracks
# the-vttregion-interface

Совместимость с браузерами

Рабочие столы Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на IOS Samsung Internet WebView Android
VTTRegion Нет Нет 59 Нет 7 Нет 59 Нет 7 Нет Нет
WebVTT_API Нет Нет 59 Нет 7 Нет 59 Нет 7 Нет Нет
id Нет Нет 59 Нет 7 Нет 59 Нет 7 Нет Нет
lines Нет Нет 59 Нет 12.1 Нет 59 Нет 12.2 Нет Нет
regionAnchorX Нет Нет 59 Нет 7 Нет 59 Нет 7 Нет Нет
regionAnchorY Нет Нет 59 Нет 7 Нет 59 Нет 7 Нет Нет
scroll Нет Нет 59 Нет 7 Нет 59 Нет 7 Нет Нет
viewportAnchorX Нет Нет 59 Нет 7 Нет 59 Нет 7 Нет Нет
viewportAnchorY Нет Нет 59 Нет 7 Нет 59 Нет 7 Нет Нет
width Нет Нет 59 Нет 7 Нет 59 Нет 7 Нет Нет
Настольный Мобильный
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari на IOS Samsung Internet WebView Android
WebVTT_API 23 12
31Версии Firefox до Firefox 50 не отображали субтитры при воспроизведении медиа без одного или нескольких воспроизводимых видеодорожек.
≤12.1 6 25 31 ≤12.1 7 1.5 4.4
activeCues 23 12
31Начиная с Firefox 69, заголовки больше не загружаются некорректно, когда TextTrack mode является disabled; в этом случае возвращается пустой список.
≤12.1 6 25 31 ≤12.1 7 1.5 4.4
addCue 23 12 31 ≤12.1 6 25 31 ≤12.1 7 1.5 4.4
cuechange_event 23 12 31 ≤12.1 6 25 31 ≤12.1 7 1.5 4.4
cues 23 12
31Начиная с Firefox 69, заголовки больше не загружаются некорректно, когда TextTrack mode является disabled; в этом случае возвращается пустой список.
≤12.1 6 25 31 ≤12.1 7 1.5 4.4
id 33 18 31 20 8 33 31 20 8 2.0 4.4.3
inBandMetadataTrackDispatchType Нет 12–79 31 Нет 8 Нет 31 Нет 8 Нет Нет
kind 23 12 31 ≤12.1 6 25 31 ≤12.1 7 1.5 4.4
label 23 12 31 ≤12.1 6 25 31 ≤12.1 7 1.5 4.4
language 23 12 31 ≤12.1 6 25 31 ≤12.1 7 1.5 4.4
mode 23 12
31До Firefox 52 использование JavaScript для изменения режима текстовой дорожки, которая является частью медиаэлемента, отправляло одно событие изменения в TextTrackList TextTrack элемента для каждого изменения, даже если несколько изменений были внесены за один проход через цикл событий Firefox. Начиная с Firefox 52, эти изменения отражаются одним событием.
≤12.1 6 25 31 ≤12.1 7 1.5 4.4
removeCue 23 12 31 ≤12.1 6 25 31 ≤12.1 7 1.5 4.4
sourceBuffer Нет Нет Нет Нет 8 Нет Нет Нет
13Доступно в Mobile Safari на iPad, но не на iPhone.
Нет Нет
Рабочий стол Мобильный
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari на IOS Samsung Internet WebView Android
VTTCue 33 79 31 20 8 33 31 20 8 2.0 4.4.3
WebVTT_API 23 12 31 ≤12.1 6 25 31 ≤12.1 8 1.5 4.4
align 23 79 31 ≤12.1 6 25 31 ≤12.1 8 1.5 4.4
getCueAsHTML 23 12 31 ≤12.1 6 25 31 ≤12.1 8 1.5 4.4
line 23 79 31 ≤12.1 6 25 31 ≤12.1 8 1.5 4.4
lineAlign Нет Нет 31 Нет 14.1 Нет 31 Нет 14.5 Нет Нет
position 23 79 31 ≤12.1 6 25 31 ≤12.1 8 1.5 4.4
positionAlign Нет Нет 31 Нет 14.1 Нет 31 Нет 14.5 Нет Нет
region Нет Нет 59 Нет 14.1 Нет 59 Нет 14.5 Нет Нет
size 23 79 31 ≤12.1 6 25 31 ≤12.1 8 1.5 4.4
snapToLines 23 79 31 ≤12.1 6 25 31 ≤12.1 8 1.5 4.4
text 23 12 31 ≤12.1 6 25 31 ≤12.1 8 1.5 4.4
vertical 23 79 31 15 6 25 31 14 8 1.5 4.4

api.VTTCue

Таблицы BCD загружаются только в браузере

api.TextTrack

Таблицы BCD загружаются только в браузере

api.VTTRegion

Таблицы BCD загружаются только в браузере

См. также

  • Псевдоэлементы CSS ::cue и ::cue()

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/WebVTT_API

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API