Adding captions and tracks to HTML video and audio elements.
Jul 02, 2025 pm 04:05 PMTo embed video or audio with subtitles and audio tracks into a web page, it can be achieved through HTML native functionality. 1. Use the <track> tag to add a WebVTT format subtitle file and set the kind, srclang and label attributes; 2. Support multilingual subtitles through multiple <track> elements, and use the default attribute to set the default language; 3. Multi-track can control multiple <audio> elements to switch through JavaScript, or use more complex media extension solutions; 4. Pay attention to browser compatibility, path configuration and format verification to ensure normal operation on different devices and provide backup solutions.
When embedding video or audio in a web page, adding subtitles and audio tracks can significantly improve accessibility and user experience. HTML provides native support, which can be achieved in just a few steps.

Add subtitles using the <track></track>
tag
The <track></track>
element of HTML allows you to add subtitles, chapters, descriptions and other text tracks to videos or audios. The most common use is to add subtitles.

- Subtitle files are usually in WebVTT (.vtt) format.
-
<track></track>
needs to be placed inside<video></video>
or<audio></audio>
. - Set
kind
attribute to specify track types, such assubtitles
,captions
,descriptions
, etc. -
srclang
is used to specify the language, and the browser selects the appropriate subtitles accordingly.
For example:
<video controls> <source src="movie.mp4" type="video/mp4"> <track src="en.vtt" kind="subtitles" srclang="en" label="English"> </video>
This way the user can choose to enable English subtitles in the player.

Supports multilingual subtitles
If your website is for international users, it is a good idea to provide subtitles in multiple languages. Just add multiple <track>
elements and set different srclang
and label
.
<video controls> <source src="movie.mp4" type="video/mp4"> <track src="en.vtt" kind="subtitles" srclang="en" label="English" default> <track src="zh.vtt" kind="subtitles" srclang="zh" label="Chinese"> </video>
A few points to note:
- The browser will automatically match the appropriate subtitles according to the user's system language.
- Adding the
default
attribute can enable a certain language by default. - Subtitle files in different languages ??need to accurately correspond to the content, otherwise it will cause confusion.
Add multiple tracks (such as comment tracks)
Although HTML native support for multi-tracks is not as direct as subtitles, it can be used to switch different audio tracks through JavaScript.
A common practice is to use multiple <audio>
elements to switch by controlling their playback status:
<audio id="mainAudio" src="music.mp3" controls></audio> <button onclick="switchTrack('music.mp3')">Main track</button> <button onclick="switchTrack('commentary.mp3')">Comment track</button> <script> function switchTrack(src) { const audio = document.getElementById('mainAudio'); audio.src = src; audio.play(); } </script>
Of course, if more complex track management is required, you can consider using Media Source Extensions or third-party libraries.
Notes and compatibility issues
Although HTML's multimedia functions are becoming more and more powerful, there are still some things to pay attention to in practical applications:
- Not all browsers fully support all features of WebVTT.
- Safari on iOS has limited support for certain
<track></track>
features. - The subtitle file path must be correct, and the server configuration must also allow cross-domain loading (if there is a cross-domain case).
- The multi-track switching experience may vary by device or browser.
To ensure the best results:
- Test your implementation on multiple browsers and devices.
- Provide fallback (alternative solution), such as displaying static subtitles when prompted not supported.
- Use the tool to verify that the WebVTT file format is correct.
Basically that's it. It is not complicated to implement, but it is easy to ignore details, especially file format and path issues.
The above is the detailed content of Adding captions and tracks to HTML video and audio elements.. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undress AI Tool
Undress images for free

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

Metadata in HTMLhead is crucial for SEO, social sharing, and browser behavior. 1. Set the page title and description, use and keep it concise and unique; 2. Add OpenGraph and Twitter card information to optimize social sharing effects, pay attention to the image size and use debugging tools to test; 3. Define the character set and viewport settings to ensure multi-language support is adapted to the mobile terminal; 4. Optional tags such as author copyright, robots control and canonical prevent duplicate content should also be configured reasonably.

class, id, style, data-, and title are the most commonly used global attributes in HTML. class is used to specify one or more class names to facilitate style setting and JavaScript operations; id provides unique identifiers for elements, suitable for anchor jumps and JavaScript control; style allows for inline styles to be added, suitable for temporary debugging but not recommended for large-scale use; data-properties are used to store custom data, which is convenient for front-end and back-end interaction; title is used to add mouseover prompts, but its style and behavior are limited by the browser. Reasonable selection of these attributes can improve development efficiency and user experience.

Native lazy loading is a built-in browser function that enables lazy loading of pictures by adding loading="lazy" attribute to the tag. 1. It does not require JavaScript or third-party libraries, and is used directly in HTML; 2. It is suitable for pictures that are not displayed on the first screen below the page, picture gallery scrolling add-ons and large picture resources; 3. It is not suitable for pictures with first screen or display:none; 4. When using it, a suitable placeholder should be set to avoid layout jitter; 5. It should optimize responsive image loading in combination with srcset and sizes attributes; 6. Compatibility issues need to be considered. Some old browsers do not support it. They can be used through feature detection and combined with JavaScript solutions.

Using HTML tags, you can use the href attribute to realize page jump, open new windows, positioning within pages and email and phone link functions. 1. Basic usage: Specify the target address through href, such as accessing a web page; 2. Open a new window: add target="_blank" and rel="noopener" attributes; 3. Jump within the page: combine id and # symbol to achieve anchor point positioning; 4. Email phone link: use mailto: or tel: protocol to trigger system applications.

The main difference is that textarea supports multiple lines of text input, while inputtext is only available in a single line. 1. Use inputtype="text" to be suitable for short and single-line user input, such as username, email address, etc., and can set maxlength to limit the number of characters. The browser provides automatic filling function, making it easier to uniformly style across browsers; 2. Use textarea for scenarios that require multiple lines of input, such as comment boxes, feedback forms, support line breaks and paragraphs, and can control the size through CSS or disable the adjustment function. Both support form features such as placeholders and required fills, but textarea defines the size through rows and cols, and input uses the size attribute.

srcset and sizes are key properties for HTML implementation of responsive images. srcset provides multiple image sources and their width or pixel density, such as 400w and 800w, and the browser selects the appropriate image accordingly; sizes defines the display width of the image under different screen widths, such as (max-width: 600px)100vw, 50vw, so that the browser can more accurately match the image size. In actual use, you need to prepare multi-size pictures, clearly named, design layout in accordance with media query, and test the performance of the equipment to avoid ignoring sizes or unit errors, thereby saving bandwidth and improving performance.

The key steps to implement the draggable function include: 1. Use the draggable attribute of HTML5 to make the elements draggable; 2. Set drag data through the dragstart event; 3. Listen to the dragover and drop event processing placement logic in the target area; 4. Use the FileList object to implement drag and drop upload. The HTML5 native drag and drop API uses a series of event control processes, such as dragstart, dragover, drop, etc., where draggable custom elements need to be set to set draggable="true" and bind dragstart event, and call setData() to save data. The dr must be blocked when handling drag and drop

It is a block-level element, used to divide large block content areas; it is an inline element, suitable for wrapping small segments of text or content fragments. The specific differences are as follows: 1. Exclusively occupy a row, width and height, inner and outer margins can be set, which are often used in layout structures such as headers, sidebars, etc.; 2. Do not wrap lines, only occupy the content width, and are used for local style control such as discoloration, bolding, etc.; 3. In terms of usage scenarios, it is suitable for the layout and structure organization of the overall area, and is used for small-scale style adjustments that do not affect the overall layout; 4. When nesting, it can contain any elements, and block-level elements should not be nested inside.
