Accessible Videos: Captions and Transcripts
AI generated
A11Y
WCAG
Accessibility · WCAG · Video · Captions
Accessible Videos: Captions and Transcripts
WebVTT, the track element, and audio description in practice

Product videos without captions exclude deaf and hard-of-hearing users, while missing audio description withholds key visual information from blind users. This article shows how developers add WebVTT captions, the HTML track element, and searchable transcripts to Magento and Hyva stores, including a real production workflow.

14 min read WebVTT · track element · audio description · transcript WCAG 2.2 · Magento 2 · Hyva Theme

1. Why video accessibility solves two separate problems

Video accessibility is often reduced in practice to a single measure: add captions, done. In reality, captions and audio description address two completely different user groups with opposing needs. Captions make spoken language and important sounds readable for deaf and hard-of-hearing users. Audio description makes visual information that is not conveyed through the original audio audible for blind and severely visually impaired users. Anyone who delivers only captions has solved half of the barrier.

The difference becomes concrete in a product video: a narrator explains a feature while an animation simultaneously displays a size chart that is never mentioned in the audio. A deaf user needs the spoken text as a caption. A blind user needs an additional description of the size chart being displayed, inserted during a pause in speech or provided as extended audio description. Both requirements are governed by different success criteria in WCAG 2.2 and must be planned separately, not treated as a single task on one ticket.

2. WCAG requirements for video: what law and standard demand

WCAG 2.2 requires several success criteria simultaneously for prerecorded video with audio. Criterion 1.2.2 (Captions, Level A) requires synchronized captions for all spoken content and relevant sounds. Criterion 1.2.3 (Audio Description or Media Alternative, Level A) requires either audio description or a complete transcript that also describes visual information. Criterion 1.2.5 (Audio Description, Level AA) goes further and requires audio description as a standalone audio track for all videos, regardless of whether a transcript exists.

For companies in Germany this is no longer an optional recommendation: the Barrierefreiheitsstarkungsgesetz (BFSG, Accessibility Strengthening Act) obligates providers of certain products and services in electronic commerce, including online stores, to comply with WCAG 2.1 Level AA as of June 28, 2025. Product videos without captions and without audio description or a transcript are therefore a direct compliance violation, not merely a usability shortfall. Anyone embedding videos in a Magento store must account for these requirements from the outset in the technical concept, not as a retrofit.

3. Understanding WebVTT: format, timing, and cue settings

WebVTT (Web Video Text Tracks) is the standard format for timed text on the web and is natively supported by all modern browsers without any additional JavaScript library. A WebVTT file always begins with the header WEBVTT, followed by individual cues: a timestamp range in the format hours:minutes:seconds.milliseconds and the associated text. Unlike captions for speech alone, important non-speech sounds such as [chime] or [applause] should also be captured as cues, because they can be relevant for understanding the video.

WebVTT additionally supports cue settings for position, alignment, and size (position, align, size), which allow spatial attribution when multiple people speak at the same time. Important for readability: a cue should not remain on screen for longer than two lines and roughly seven seconds, since longer text exceeds the average reading speed. The maximum character count per line is around 37 characters so the text stays readable without wrapping even on smaller screens.


WEBVTT

NOTE
Caption file for product demo video "wireless-headphone-setup.mp4"
Generated and manually reviewed for accuracy

00:00:00.000 --> 00:00:03.500
Welcome to the setup guide for our
wireless over-ear headphones.

00:00:03.600 --> 00:00:07.200
[Chime sound] First, press and hold
the power button for three seconds.

00:00:07.300 --> 00:00:11.000
The LED indicator will flash blue,
signaling pairing mode is active.

00:00:11.100 --> 00:00:15.800 position:50%,line:80% align:center
Open your device's Bluetooth settings
and select "MS Headphone Pro".

00:00:15.900 --> 00:00:19.400
[Confirmation beep] The headphones
are now successfully connected.

4. The HTML track element: adding captions correctly

The <track> element embeds a WebVTT file as a child element of the <video> tag and is part of the HTML standard, with no external library required. The kind attribute is decisive: kind="captions" marks captions including relevant sound descriptions for deaf and hard-of-hearing users, while kind="subtitles" means pure language translation for hearing users who do not understand the spoken language. This distinction is frequently confused in practice, but it is semantically important because screen readers and assistive technologies rely on it.

Multiple track elements can be embedded in parallel for different languages, distinguished by the srclang attribute. The default attribute marks one track as automatically active, which is especially useful for kind="captions" in the store's default language. Important: the native video player in Chrome, Firefox, and Safari automatically displays a captions menu as soon as at least one track element is present, entirely without extra JavaScript. A custom player only needs to rebuild this behavior if it completely replaces the native video element.


<!-- Hyva phtml: product video with multilingual captions and audio description -->
<video
    controls
    preload="metadata"
    width="1280"
    height="720"
    poster="{{$block->getVideoPosterUrl()}}"
    aria-label="{{$block->escapeHtmlAttr($block->getVideoTitle())}}"
>
    <source src="{{$block->getVideoUrl('mp4')}}" type="video/mp4">
    <source src="{{$block->getVideoUrl('webm')}}" type="video/webm">

    <!-- Captions: spoken content plus relevant non-speech sounds -->
    <track
        kind="captions"
        src="{{$block->getVttUrl('de')}}"
        srclang="de"
        label="Deutsch"
        default
    >
    <track
        kind="captions"
        src="{{$block->getVttUrl('en')}}"
        srclang="en"
        label="English"
    >

    <!-- Descriptions: separate WebVTT track for extended audio description text -->
    <track
        kind="descriptions"
        src="{{$block->getDescriptionsVttUrl('en')}}"
        srclang="en"
        label="Audio Description"
    >

    <p>Your browser does not support the video element.
       <a href="{{$block->getTranscriptUrl()}}">Read the full transcript</a>.</p>
</video>

5. Audio description: the second, often forgotten requirement

Audio description inserts additional spoken descriptions of relevant visual content into the natural pauses of the original audio: camera angles, on-screen graphics, product details that are shown but never mentioned. There are two technical implementation paths. Standard audio description uses the existing pauses in the original audio and is delivered as a separate audio track or as a second video version with the description mixed in. Extended audio description actively pauses the video whenever the existing pauses are insufficient for a complete description, which is technically more demanding but can be necessary for complex visual content.

In practice, audio description is often mistakenly treated as an optional extra, even though WCAG 2.2 criterion 1.2.5 at Level AA explicitly requires it. A pragmatic approach for product videos: a second kind="descriptions" track element with WebVTT text that a text-to-speech engine or a screen reader can read aloud in addition to the original audio, provided the player supports this. Alternatively, and compliant with WCAG as a substitute for 1.2.3, a complete transcript that also textually describes the visual content is sufficient when no standalone audio description track is produced.

6. Transcripts: text as an SEO booster and fallback

A transcript is the complete textual version of a video, including speaker identification, relevant sounds, and descriptions of visual content. Unlike captions, a transcript is not time-synced and is provided as standalone, searchable text on the page or as a linked document. For users with deafblindness who rely on braille displays, the transcript is often the only accessible form of the video content, since neither captions nor audio description are usable for them.

The SEO effect is a frequently overlooked bonus: Google cannot directly understand video content, but a complete transcript on the same page delivers indexable, semantically rich text to search engines, covering additional keywords and long-tail queries. A product video with a transcript often ranks for search queries that appear in the spoken text but are missing from the surrounding page copy. Technically, a simple, semantically correct block of text below the video is enough, ideally with timestamp anchors that jump to the matching point in the video on click.


<!-- Transcript block below the video, semantically marked up and deep-linkable -->
<section aria-labelledby="transcript-heading" class="prose">
    <h3 id="transcript-heading">Transcript: Setting Up Your Headphones</h3>
    <p>
        <a href="#t=0">[00:00]</a> Welcome to the setup guide for our
        wireless over-ear headphones.
    </p>
    <p>
        <a href="#t=4">[00:04]</a> Press and hold the power button for
        three seconds until you hear a chime.
    </p>
    <p>
        <a href="#t=8">[00:08]</a> The LED indicator flashes blue. This
        signals that pairing mode is active.
    </p>
    <p>
        <a href="#t=12">[00:12]</a> Open your device's Bluetooth settings
        and select "MS Headphone Pro" from the list.
    </p>
</section>

7. Practical workflow: from product video to accessible upload

A repeatable workflow prevents accessibility from being reinvented as a special task for every new product video. Step one: the raw video is automatically transcribed with a transcription tool, such as Whisper or a cloud service, followed by manual correction from someone who knows the product. Automatic speech recognition often reaches over 90 percent accuracy with clear studio-quality audio, but reliably fails on product names, technical terms, and accents, which is why the manual review step is not optional.

Step two: a WebVTT file is generated from the corrected text, either by exporting it from the transcription tool or through a custom script that converts timestamps from the speech analysis into cues. Step three: a second pass through the video identifies moments with relevant visual information that has no counterpart in the audio, from which the audio description cues or transcript additions are derived. Step four: both files, the WebVTT captions and the complete transcript, are stored together with the video in the Magento backend as media assets and linked via the track element and a transcript block respectively. A video that skips these four steps is not release-ready in an accessible development process.


{
  "video_asset": {
    "sku": "MS-HEADPHONE-PRO",
    "source_file": "wireless-headphone-setup.mp4",
    "duration_seconds": 24,
    "captions": [
      { "lang": "de", "file": "wireless-headphone-setup.de.vtt", "kind": "captions", "reviewed": true },
      { "lang": "en", "file": "wireless-headphone-setup.en.vtt", "kind": "captions", "reviewed": true }
    ],
    "descriptions": [
      { "lang": "en", "file": "wireless-headphone-setup.desc.en.vtt", "kind": "descriptions", "reviewed": true }
    ],
    "transcript": {
      "file": "wireless-headphone-setup.transcript.en.html",
      "includes_visual_descriptions": true
    },
    "workflow_status": "reviewed_and_published"
  }
}

8. Implementation in the Hyva theme: player, Alpine.js, and layout XML

In the Hyva theme, the native <video> element remains the right foundation, rather than loading a heavy JavaScript player library that undoes the benefits of Hyva's small JS bundle. A lean Alpine.js snippet is enough to provide additional controls such as a toggle for the audio description track or a jump link to the transcript, without replacing the browser's native captions mechanism. It is important to never simulate kind="captions" or kind="descriptions" in JavaScript when the native mechanism already delivers the same function, because that creates unnecessary failure points and screen reader incompatibilities.

The WebVTT files and the transcript are best served through a dedicated ViewModel that reads the media URLs from the product data instead of hardcoding them in the template. Layout XML makes it possible to render the video block only on product pages that have a demo video attached, while products without a video never render the block at all. That prevents empty video tags without track elements from accidentally lingering in the code as incomplete accessibility implementations.


// Alpine.js component: toggle audio description track and jump to transcript
// without replacing the browser's native caption handling
function accessibleVideoPlayer() {
  return {
    descriptionsEnabled: false,

    init() {
      this.video = this.$refs.videoEl;
    },

    toggleDescriptions() {
      this.descriptionsEnabled = !this.descriptionsEnabled;
      const track = [...this.video.textTracks].find(t => t.kind === 'descriptions');
      if (track) {
        track.mode = this.descriptionsEnabled ? 'showing' : 'disabled';
      }
    },

    jumpToTranscript(seconds) {
      // Deep-link from transcript timestamp into the video
      this.video.currentTime = seconds;
      this.video.play();
    }
  };
}

9. Captions, audio description, and transcript compared

The three building blocks of accessible video solve different problems, but in practice are often confused or treated as interchangeable. The following overview shows which building block is mandatory for which target group and which format is used for it.

Building block Wrong approach Correct approach Target group
Captions Only automatic speech recognition, unreviewed WebVTT via <track kind="captions">, manually reviewed Deaf, hard-of-hearing users
Audio description Omitted entirely Separate audio track or <track kind="descriptions"> Blind, severely visually impaired users
Transcript Missing or only offered as a PDF download Searchable HTML text with timestamp anchors Deafblind users, search engines
Language selection Only one language track for all store locales Multiple <track> elements with srclang International users
Player technology Heavy third-party player library Native <video> plus a lean Alpine.js layer All users, performance

The recurring mistake across every row in the table is the same: a team implements only the building block that is easiest to automate, usually automatic caption generation, and considers the topic closed. For genuine WCAG compliance and for a product video that is actually usable, all four building blocks above are needed together, not in isolation.

Mironsoft

Accessibility, WCAG compliance, and BFSG implementation for Magento stores

Ready to ship WCAG-compliant product videos?

We produce captions, audio description, and transcripts for your product videos and integrate them cleanly into the Hyva theme, technically correct, WCAG-compliant, and without unnecessary JavaScript.

Caption production

WebVTT files with manual quality review, multilingual

Hyva integration

track element, transcript block, and Alpine.js player extension

BFSG audit

Complete review of all video content against WCAG 2.2 Level AA

10. Summary

Accessible videos solve a problem that, without deliberate planning, is nearly always solved only halfway. Captions via WebVTT and the HTML track element make spoken content readable for deaf and hard-of-hearing users, are natively supported in the browser, and require no additional JavaScript library. Audio description is the frequently forgotten second half and makes visual information audible for blind users, either as its own audio track or as a kind="descriptions" track. Transcripts complement both as searchable, SEO-relevant text and are often the only accessible route to the video content for deafblind users.

The decisive lever lies in a repeatable production workflow: automatic transcription with manual correction, WebVTT export, a second pass for visual descriptions, and clean integration via the native track element in the Hyva theme. Since the Barrierefreiheitsstarkungsgesetz took effect, this is no longer optional polish but a legal obligation for online stores in Germany, with WCAG 2.1 Level AA as the benchmark.

Accessible Videos: Captions and Transcripts, the essentials at a glance

Captions via WebVTT

<track kind="captions"> with manually reviewed WebVTT, native browser support with no JS library.

Do not forget audio description

WCAG 2.2, criterion 1.2.5, Level AA. Separate audio track or kind="descriptions" track for blind users.

Transcript for SEO and deafblind users

Searchable HTML text with timestamp anchors, indexable by search engines.

Workflow, not one-off effort

Automatic transcription, manual correction, WebVTT export, Hyva integration as a fixed process.

11. FAQ: Accessible Videos, Captions, and Transcripts

1What is the difference between captions and audio description?
Captions make speech and sounds readable for deaf users. Audio description makes visual information audible for blind users. Both are governed separately in WCAG.
2What is WebVTT and why is it the standard format?
A text-based format for timed captions, natively supported in all modern browsers, no JS library needed, embedded via the track element.
3How do you embed a WebVTT file in a video?
With <track kind="captions" src="file.vtt" srclang="en" label="English" default> as a child of the video tag.
4Is a transcript enough instead of captions?
No. WCAG 2.2 requires standalone synchronized captions. A transcript complements but does not replace that requirement.
5What does WCAG 2.2 specifically require for audio description?
Criterion 1.2.3 (Level A) requires audio description or a media alternative. Criterion 1.2.5 (Level AA) explicitly requires a standalone audio track.
6Do German online stores have to make their videos accessible?
Yes, since June 28, 2025 the BFSG obligates online stores to comply with WCAG 2.1 Level AA, including accessible product videos.
7Can automatic speech recognition fully replace captioning?
No, it often exceeds 90 percent accuracy but fails on product names and technical terms. Manual correction is mandatory.
8What SEO benefit does a transcript provide?
It delivers indexable text with additional keywords and long-tail queries present in the audio but missing from the page copy.
9How do I implement captions technically in the Hyva theme?
Via the native HTML track element, with no extra player library. Alpine.js only supplements additional controls.
10What is the difference between kind="captions" and kind="subtitles"?
captions includes speech plus sound descriptions for deaf users. subtitles is pure language translation for hearing users without knowledge of the spoken language.