WebVTT
Формат субтитров веба: то, что браузер показывает через HTML-тег <track>. Блоки SubRip, но с заголовком, точкой перед миллисекундами и местом для оформления, положения и говорящих.
Коротко
| Расширение | .vtt |
|---|---|
| Тип медиа | text/vtt |
| Спецификация | W3C, WebVTT: The Web Video Text Tracks Format, кандидат в рекомендации |
| Точность времени | Миллисекунды |
| Кодировка текста | UTF-8, всегда: этого требует спецификация. Subtitld читает и другие кодировки. |
| Оформление | Теги курсива, полужирного и подчёркивания; цвета через классы и CSS (::cue). Зачёркивания нет. |
| Положение | Настройки блока (line, position, align, size, vertical) и области (regions) |
| Говорящие | Теги голоса: <v Thom> |
| В контейнерах | В Matroska как S_TEXT/WEBVTT; в MP4 как wvtt (ISO/IEC 14496-30); в потоках HLS и DASH |
Строение блока
Файл — это заголовок, а затем блоки. Каждый блок похож на блок SubRip, но у него две необязательные части.
WEBVTT intro 00:00:23.000 --> 00:00:24.500 line:0 <v Celia>You're a jerk, <i>Thom</i>.
- 1 · Заголовок
WEBVTT, одно или с пробелом и названием, затем пустая строка. Без него браузер отказывается от всего файла. - 2 · Идентификатор
Необязательный. Имя блока на отдельной строке: число, как в SubRip, или слово.
- 3 · Тайминг
Начало, стрелка
-->, конец. Точка перед миллисекундами. - 4 · Настройки
Необязательные. Где показать блок, после времени конца.
- 5 · Текст
Строки текста с тегами оформления и голосов. Пустая строка завершает блок, поэтому внутри блока её быть не может.
Таймкод
Часы можно опустить. 00:27.000 — то же самое время, и многие файлы короче часа записаны именно так. Запятая перед миллисекундами — привычка SubRip, а не WebVTT; Subtitld её всё равно читает.
Блоки помимо субтитров
| Блок | Что содержит |
|---|---|
NOTE |
Комментарий для людей. Плееры его пропускают. |
STYLE |
CSS для блоков через ::cue. Перед первым блоком. |
REGION |
Именованная область экрана, в которой могут прокручиваться блоки. |
Текст блока
| Тег | Эффект |
|---|---|
<i>…</i>, <b>…</b>, <u>…</u> |
Курсив, полужирный, подчёркивание |
<c.yellow>…</c> |
Класс, который может окрасить CSS (или встроенные цветовые классы WebVTT) |
<v Thom>… |
Голос: кто говорит. Закрывающий тег необязателен. |
<lang pt>…</lang> |
Язык фрагмента текста |
<ruby>漢<rt>kan</rt></ruby> |
Чтение над текстом, для японского и китайского |
<00:00:28.500> |
Метка времени внутри блока, для караоке |
& < > |
Амперсанд, <, > и неразрывный пробел, которые иначе читались бы как разметка |
Цвета
Восемь классов окрашивают текст без единой строчки CSS: white, lime, cyan, red, yellow, magenta, blue и black, а также те же восемь с bg_ для фона. Любой другой цвет требует собственного класса и блока STYLE:
STYLE
::cue(.gold) { color: #ffd700; }
00:00:30.800 --> 00:00:34.000
<c.gold>Why don't you just admit that</c>
Не каждый плеер читает блоки STYLE; встроенные цветовые классы WebVTT надёжнее. Subtitld использует их всякий раз, когда цвет входит в восемь.
Настройки блока
| Настройка | Что делает |
|---|---|
line:0 |
Строка на экране: число отсчитывает строки сверху (отрицательное — снизу), процент — от верхнего края |
position:10% |
Где рамка блока стоит по ширине экрана |
align:start |
Выравнивание текста в рамке: start, center, end, left, right |
size:50% |
Ширина рамки |
vertical:rl |
Вертикальный текст, справа налево или слева направо |
region:fred |
Показать блок в REGION |
Subtitld читает line, position и align как место субтитра на экране — те же девять мест, что и {\an1} — {\an9} в SubRip — и записывает их обратно: line:0 для верха, line:50%,center для середины, position:10% align:start и position:90% align:end для боковых мест.
WebVTT в Subtitld
- Текст каждого субтитра и переносы строк
- Курсив, полужирный, подчёркивание и цвет
- Где субтитр стоит на экране
- Говорящие, как теги голоса
- Начало и конец с точностью до миллисекунды, по порядку
- Зачёркивание: в WebVTT для него нет тега
- Лица говорящих и их цвета
- Переводы рядом с оригиналом (перевод может его заменить или стоять под ним)
- Озвучка и метаданные
Сохраните проект .usfx, чтобы всё это не потерялось.
Открытие файла WebVTT
Subtitld находит каждый блок по строке тайминга и читает:
- заголовок и блоки
NOTE,STYLEиREGIONкак то, чем они являются, а не как субтитры, а идентификаторы блоков как имена; - времена с часами и без них, с точкой или запятой;
- голоса как говорящих субтитров, готовых к озвучке;
- цветовые классы WebVTT и цвета, которые блок
STYLEзадаёт другим классам; line,positionиalignкак место субтитра на экране;- любую кодировку, хотя WebVTT требует UTF-8.
Того, для чего у Subtitld нет места, — областей, размера блока, вертикального текста, чтений ruby и меток времени караоке — в файле не будет. Сам текст остаётся.
Экспорт WebVTT
Экспорт, затем Субтитры и VTT, предлагает:
- ТекстОригинал, перевод или оба варианта, с переводом под оригиналом.
- Имена говорящихНе выводятся, ставятся перед текстом (Thom: …) или записываются как теги голоса (
<v Thom>), собственным способом WebVTT. - ОформлениеСохраняется или удаляется.
- Сдвиг времениВсе субтитры смещаются раньше или позже на одну и ту же величину.
Файл всегда в UTF-8, как того требует WebVTT: WEBVTT, затем блоки в порядке начала, и у каждого времени есть часы. Символы, которые могли бы читаться как разметка, записываются как сущности, а пустые субтитры пропускаются.
На веб-странице
<video controls src="tears-of-steel.mp4">
<track kind="subtitles" src="tears-of-steel.en.vtt"
srclang="en" label="English" default>
</video>
Отдавайте файл с типом text/vtt. Если видео и файл на разных доменах, видео нужен атрибут crossorigin, а серверу — заголовок Access-Control-Allow-Origin, иначе браузер не загрузит дорожку.
WebVTT или SubRip?
SubRip — для плееров, редакторов и загрузок; WebVTT — для видео в вебе. На странице SubRip они сравниваются бок о бок.
Интересные факты
Начинался как WebSRT: его набросали в WHATWG для нового элемента <track> HTML5 на основе SubRip, и лишь потом он получил название WebVTT.
Шесть букв в самом начале каждого файла. Если браузер их не находит, он отказывается от всей дорожки.
Цвета, которые плеер знает без CSS: белый, лаймовый, голубой, красный, жёлтый, пурпурный, синий и чёрный, для текста и для фона.
Похожие форматы
Откройте его в Subtitld вместе с видео и поправьте тайминг по осциллограмме.