Menu

Видео в HTML: тег video, autoplay, poster и субтитры

Элемент <video> воспроизводит видеофайлы встроенным плеером браузера. Разберем разметку, важные атрибуты (controls, autoplay, muted, loop, playsinline, poster, preload), запасные форматы через <source>, субтитры через <track>, адаптивный размер и управление воспроизведением из JavaScript.

На этой странице есть исполняемые редакторы: меняйте, запускайте и сразу видите результат.

Как вставить видео

Укажите элементу <video> видеофайл и добавьте controls, чтобы читатель мог его запустить:

<video src="movie.mp4" controls width="640"></video>

controls показывает встроенный плеер браузера: воспроизведение и пауза, шкала времени, громкость и полноэкранный режим. Без него видео просто стоит на месте. Это превью не может загружать видеофайлы, поэтому примеры на этой странице подают в элемент небольшую анимацию на canvas, которую рисует скрипт; атрибуты работают точно так же, как с файлом:

Источник здесь это живой поток, а не файл, поэтому шкалу времени нельзя перетаскивать, и фиксированной длины нет. С настоящим .mp4 тот же плеер получает полноценную шкалу перемотки.

Атрибуты video

АтрибутЧто делает
controlsПоказывает элементы управления плеера браузера
autoplayНачинает воспроизведение, как только сможет (на практике только с muted)
mutedЗапускает видео без звука
loopНачинает сначала, когда видео заканчивается
playsinlineВоспроизводит на странице на iPhone, а не переключается в полноэкранный режим
poster="thumb.jpg"Картинка, которая показывается до начала воспроизведения
preloadnone, metadata (только размер и длительность) или auto (браузер сам решает, сколько скачать)
width, heightРазмер в пикселях; если задать оба, место резервируется до загрузки видео

Autoplay, muted и loop

Браузеры блокируют видео, которые запускаются сами со звуком. Беззвучное видео может воспроизводиться автоматически, и так работают фоновые видео и короткие зацикленные ролики:

Четыре атрибута работают вместе: autoplay для запуска, muted, чтобы браузер это разрешил, loop для ролика и playsinline, чтобы iPhone не открывал его на весь экран. Автовоспроизведение видео со звуком не только блокируется, но и мешает пользователям программ чтения с экрана, чью речь оно заглушает. Если ролик длится дольше пяти секунд, дайте возможность поставить его на паузу.

Постер и preload

poster показывает картинку до начала воспроизведения, как обложку. Здесь у видео вообще нет источника, поэтому видно только постер:

С preload="none" браузер ничего не скачивает, пока читатель не нажмет воспроизведение, а постер не дает месту выглядеть пустым. Используйте preload="metadata", если хотите показать длительность до воспроизведения. Без постера большинство браузеров показывают первый кадр, когда загрузят его.

Форматы и запасные варианты через source

Вместо src можно перечислить несколько файлов в элементах <source>. Браузер воспроизводит первый поддерживаемый:

<video controls width="640" poster="thumb.jpg">
  <source src="movie.webm" type="video/webm">
  <source src="movie.mp4" type="video/mp4">
  <track kind="captions" src="captions.vtt" srclang="en" label="English">
  <p>Your browser cannot play this video. <a href="movie.mp4">Download it</a>.</p>
</video>

MP4 с видео H.264 воспроизводится во всех современных браузерах, поэтому это надежный выбор, когда файл один. Атрибут type позволяет браузеру пропускать форматы, которые он не умеет воспроизводить, не скачивая их. Текст в конце показывается только в браузерах, которые вообще не поддерживают <video>.

Субтитры через track

<track kind="captions"> загружает файл WebVTT, обычный текстовый файл со строками и временными метками. Браузер добавляет в элементы управления кнопку субтитров и выводит текст поверх видео:

WEBVTT

00:00:00.000 --> 00:00:03.000
Welcome to the course.

00:00:03.000 --> 00:00:06.500
Today we build our first web page.

Субтитры помогают глухим и слабослышащим зрителям, людям, которые смотрят без звука, и всем, кто смотрит видео на неродном языке. Добавьте дорожке default, чтобы она показывалась без клика. Файлу субтитров с другого домена нужны заголовки CORS и crossorigin у видео.

Оформление и управление из JavaScript

Видео это замещаемый элемент, как картинка: width: 100% с height: auto делает его адаптивным, а object-fit решает, как оно заполняет блок другой формы. JavaScript получает play(), pause(), currentTime, volume и события вроде play, pause и ended:

play() возвращает промис, который отклоняется, когда браузер блокирует воспроизведение (например, автовоспроизведение со звуком), поэтому в рабочем коде его нужно обрабатывать через catch. Делать собственные элементы управления необязательно; встроенные controls доступны с клавиатуры и переведены, а собственным кнопкам придется это воспроизвести. Видео с YouTube или Vimeo встраивают через их плеер в iframe.

Частые ошибки

  • Autoplay без muted. Браузер его блокирует. Добавьте muted и playsinline.
  • Забытый controls. Если вы не сделали свои элементы управления, читателю нечем запустить видео.
  • Нет width и height. Страница прыгает, когда загружается видео. Задайте оба, а затем масштабируйте через CSS.
  • Огромные файлы. Сжимайте видео для веба и используйте preload="none" или "metadata" для видео ниже на странице.
  • Нет субтитров у видео с речью. Добавьте <track kind="captions">.

Часто задаваемые вопросы

Как вставить видео в HTML?

Используйте <video src="movie.mp4" controls width="640"></video>. Атрибут controls показывает кнопку воспроизведения, шкалу времени и громкость браузера. Без него видео показывает первый кадр (или постер), и пользователь не может его запустить.

Почему не работает autoplay у видео?

Браузеры блокируют автовоспроизведение со звуком. Добавьте muted рядом с autoplay, а также playsinline, чтобы iPhone воспроизводил видео на странице, а не на весь экран: <video autoplay muted loop playsinline>.

Какой формат видео использовать для веба?

MP4 с видео H.264 воспроизводится во всех современных браузерах, поэтому это надежный выбор по умолчанию. Можно первым указать через <source> более легкий файл WebM, и браузер выберет первый поддерживаемый формат.

Как добавить обложку к видео?

Используйте атрибут poster с URL картинки: <video poster="thumb.jpg" controls>. Картинка показывается, пока видео не начнет воспроизводиться.

Как добавить субтитры к видео в HTML?

Добавьте внутрь video <track kind="captions" src="captions.vtt" srclang="en" label="English">. Файл использует формат WebVTT, а браузер показывает кнопку субтитров в своих элементах управления.

Как сделать видео адаптивным?

Задайте в CSS width: 100% и height: auto (или max-width: 100%). Видео масштабируется вместе с контейнером и сохраняет пропорции.

Coddy programming languages illustration

Учитесь программировать с Coddy

НАЧАТЬ