Un fichier VTT (WebVTT, pour Web Video Text Tracks) est un fichier texte brut qui contient les sous-titres d'une vidéo diffusée sur le Web. Il commence par la ligne WEBVTT, suivie de blocs qui associent un code temporel comme 00:00:03.400 --> 00:00:06.800 au texte à afficher, et il doit être enregistré en UTF-8. Vous l'ouvrez avec n'importe quel éditeur de texte et le regardez avec VLC ou dans un navigateur. Nous avons écrit un fichier d'exemple en français, et chargé des fichiers volontairement abîmés dans Chrome pour voir ce qui fait disparaître les sous-titres.
Fichier VTT : c'est quoi ?
Ici, VTT n'a rien à voir avec le vélo tout terrain : c'est l'abréviation de Web Video Text Tracks, « pistes de texte pour la vidéo sur le Web ». Le format est défini par le W3C, l'organisme qui publie les standards du Web. En octobre 2026, sa spécification a toujours le statut de « Candidate Recommendation Draft » (version du 20 mai 2026), un projet qui n'est pas encore une recommandation définitive. Les navigateurs l'appliquent pourtant depuis des années : selon MDN, l'élément HTML <track>, qui charge les fichiers WebVTT dans un lecteur vidéo, fonctionne dans tous les navigateurs depuis juillet 2015.
L'essentiel en trois points :
- Du texte brut. L'extension est .vtt et le type MIME
text/vtt. MDN le résume ainsi : WebVTT est un format texte, et les données doivent être encodées en UTF-8. - Un descendant du SRT. WebVTT est né en 2010 sous le nom de WebSRT, sur la base du format SRT du logiciel SubRip, et a d'abord été décrit dans le standard HTML avant d'avoir sa propre spécification. Le format d'origine est présenté dans notre guide du fichier SRT.
- Un format, plusieurs usages. Le même type de fichier sert aux sous-titres de traduction, aux sous-titres pour sourds et malentendants (SME), aux titres de chapitres et à des métadonnées pour des scripts. C'est la page web ou la plateforme qui décide de son rôle, pas le fichier.
Ce que contient un fichier VTT : notre exemple ligne par ligne
Nous avons écrit un court fichier qui réunit tous les éléments courants, avec des accents, une cédille, une apostrophe typographique et des guillemets français.

- L'en-tête : la première ligne est
WEBVTT. Après une espace ou une tabulation, vous pouvez ajouter un titre, commeWEBVTT - Exemple Polytested (français). Une marque d'ordre des octets (BOM) invisible est permise avant. Les fins de ligne peuvent être celles de Windows (CRLF) ou d'Unix (LF). - Le commentaire : un bloc qui commence par
NOTEn'est jamais affiché. Il s'arrête à la première ligne vide. - Le bloc de style :
STYLEcontient du CSS pour les sous-titres. Il doit précéder le premier sous-titre et ne peut pas contenir de ligne vide. Le nôtre colore tout ce que dit Léa. - L'identifiant : une ligne facultative avant le code temporel, un numéro ou un mot comme
facture. La spécification exige qu'il soit unique dans le fichier ; certaines documentations affirment le contraire, suivez la spécification. - Le code temporel : heures, minutes, secondes, un point et exactement trois chiffres de millisecondes. Les heures peuvent être omises (
00:03.400) tant qu'elles valent zéro. La flèche est faite de deux traits d'union et d'un signe « supérieur à », entourée d'espaces. Les sous-titres se suivent dans l'ordre de leur début. - Les réglages (cue settings) : après le code temporel.
line:0place le sous-titre en haut de l'image,align:startl'aligne à gauche,position:10%le décale vers la droite. La spécification en définit six :vertical,line,position,size,alignetregion. - Le texte et les balises :
<i>,<b>et<u>pour l'italique, le gras et le souligné,<v Léa>pour la personne qui parle,<lang en>pour un passage dans une autre langue,<c.nom>pour une classe CSS. Une ligne vide termine le sous-titre ; son texte ne peut donc pas en contenir. - Les caractères réservés : écrivez
&sous la forme&et<sous la forme<; MDN recommande aussi>pour>.
Un fichier minimal avec un seul sous-titre tient en quatre lignes :
WEBVTT
00:00.000 --> 00:02.500
Les sous-titres commencent ici.Le style a ses limites. Sur le sélecteur ::cue, seule une courte liste de propriétés CSS s'applique, dont la couleur, le fond, la police, l'ombre du texte, le contour et l'opacité. La position ne passe pas par le CSS mais par les réglages.
VTT ou SRT : les différences
Voici le sous-titre 2 de notre exemple dans les deux formats :
2
00:00:03,400 --> 00:00:06,800
la même tâche en français, en anglais,
en allemand et en espagnol.WEBVTT
2
00:00:03.400 --> 00:00:06.800
la même tâche en français, en anglais,
en allemand et en espagnol.| Point | SRT | WebVTT |
|---|---|---|
| Première ligne | le numéro du premier sous-titre | WEBVTT |
| Avant les millisecondes | virgule | point |
| Heures | toujours écrites | facultatives |
| Numéros | obligatoires | facultatifs, tout identifiant unique |
| Encodage | non défini ; UTF-8 exigé par YouTube et Vimeo | UTF-8, toujours |
| Position et style | balises simples, selon le lecteur | réglages, blocs STYLE, classes |
| Commentaires | aucun | blocs NOTE |
Élément <track> des navigateurs | refusé par Chrome dans notre test | oui |
| accepté | refusé | |
| YouTube | accepté, balisage ignoré | accepté, avec la position |
Gardez le SRT pour les plateformes qui l'exigent et les vieux lecteurs. Prenez le WebVTT pour une vidéo sur votre propre site, pour Vimeo et dès que la position, les couleurs ou le nom de la personne qui parle comptent. Pour traduire un fichier de sous-titres sans casser sa structure, voyez notre guide de la traduction de sous-titres.
Comment un navigateur affiche un fichier VTT
Un navigateur n'utilise un fichier VTT qu'à travers une page web : l'élément <track>, placé dans un <video>, pointe vers lui.
<video controls src="demo.mp4">
<track kind="subtitles" src="exemple-sous-titres-fr.vtt" srclang="fr" label="Français" default>
<track kind="captions" src="sme-fr.vtt" srclang="fr" label="FR (SME)">
</video>- kind :
subtitles(par défaut),captionspour les sous-titres SME,descriptions,chaptersoumetadata. Une valeur incorrecte donnemetadata, une piste invisible réservée aux scripts. - srclang : la langue de la piste, obligatoire pour
subtitles. - label : le nom affiché dans la liste des pistes.
- default : la piste activée d'office ; une seule par vidéo.
Ce que nous avons observé dans nos propres tests :
- Chrome suit le fichier. Le 14 octobre 2026, Chrome 155 a affiché notre fichier de test (en allemand) tel qu'il était écrit : un sous-titre en haut, un autre sur deux lignes en bas, un troisième aligné à gauche et en italique, et la réplique de la personne qui parle dans la couleur du bloc STYLE. Le nom inscrit dans
<v …>ne s'affichait pas : il sert seulement à identifier le texte pour la mise en forme. - Les classes de couleur demandent un bloc STYLE. La spécification prévoit des classes comme
<c.red>ou<c.yellow>. Seules, elles sont restées blanches dans Chrome 155 le 14 octobre 2026. Le 15 octobre, Chrome 155 et Edge 155 n'ont coloré le jaune et le cyan qu'une fois ces couleurs définies dans un bloc STYLE. - Le menu n'affiche que le label. Dans les lecteurs intégrés de Chrome 155 et d'Edge 155 (interface en allemand, 15 octobre 2026), le menu des sous-titres listait chaque piste par son
label. Une piste sans label apparaissait sous son code de langue. La différence entrecaptionsetsubtitlesne se voyait qu'à une petite icône, et seulement si deux pistes portaient le même nom ou si une piste n'en avait pas. Chrome coupait déjà des noms de dix caractères ; « DE (UT) », sept caractères, restait entier. Mettez donc l'élément distinctif en premier et gardez des labels courts. - Le mot à mot n'est pas surligné. WebVTT peut minuter chaque mot d'un sous-titre, façon karaoké. Le 15 octobre 2026, Chrome 155 et Edge 155 lisaient ces horodatages, sans colorer différemment les mots déjà chantés et ceux à venir.
- Un autre domaine demande CORS. Un fichier VTT hébergé sur un autre domaine que la page ne s'est chargé que lorsque l'élément
<video>portait l'attributcrossoriginet que le serveur autorisait la requête.
Ce qui fait disparaître les sous-titres : notre test dans Chrome
Nous avons chargé le même fichier de test, trois sous-titres en allemand, comme piste dans Chrome 155, en le modifiant à un seul endroit à chaque fois, et noté ce que Chrome signalait.
| Variante | Résultat |
|---|---|
| Valide : UTF-8, en-tête, points | 3 sous-titres sur 3 |
| UTF-8 avec BOM | 3 sur 3 |
| En-tête suivi d'une espace et d'un titre | 3 sur 3 |
Sans les heures, comme 00:01.000 | 3 sur 3 |
| Enregistré en Windows-1252 | 3 sur 3, mais � à la place de ä, ö, ü, ß et € |
Windows-1252, le serveur annonce charset=windows-1252 | même � |
Sans ligne WEBVTT | erreur, aucun sous-titre |
webvtt en minuscules | erreur, aucun sous-titre |
WEBVTT suivi directement d'un trait d'union | erreur, aucun sous-titre |
| Virgules dans tous les codes temporels | chargé sans erreur, mais 0 sous-titre |
| Une virgule dans un seul code temporel | 2 sur 3, sans message d'erreur |
| Deux chiffres de millisecondes | 2 sur 3, sans message d'erreur |
Tiret demi-cadratin dans la flèche : –> | 2 sur 3, sans message d'erreur |
| Fichier SRT utilisé comme piste | erreur, aucun sous-titre |
- Les virgules échouent en silence. Avec les virgules du SRT, le fichier s'est chargé « sans problème » et n'a rien affiché.
- L'en-tête ne tolère rien. Exactement
WEBVTT, en majuscules, suivi d'une espace, d'une tabulation ou d'un retour à la ligne. - Un tiret suffit. Certains sites transforment les deux traits d'union de la flèche en tiret : tapez la flèche vous-même plutôt que de copier un exemple.
- Renommer n'est pas convertir. Un fichier SRT renommé en .vtt a été refusé.
- Un
<isolé coupe le texte. Dans la même série, Chrome n'a gardé que « Wenn 3 » de la ligne « Wenn 3 < 5 gilt, passt es » (« si 3 < 5, ça va »). Un&isolé est passé, mais échappez les deux.
Encodage : un fichier VTT est toujours en UTF-8
Pour un fichier SRT, l'encodage n'est pas défini et les lecteurs devinent. Le WebVTT ne laisse aucune place au hasard : la spécification exige l'UTF-8 et impose à tout lecteur de décoder le fichier en UTF-8. Dans notre test, un fichier enregistré en Windows-1252 (souvent appelé « ANSI » sous Windows) affichait le caractère de remplacement � à chaque lettre accentuée, même quand le serveur précisait que le fichier était en Windows-1252.
Voici deux sous-titres de notre exemple français, enregistrés en Windows-1252 puis décodés en UTF-8, comme l'exige la spécification :
Bonjour � tous ! Aujourd�hui, nous testons
<v L�a>� �a marche, c�est d�j� pr�t ! �La dernière ligne compte huit caractères de remplacement : les guillemets, le Ç, l'apostrophe typographique, les accents, et même le nom dans la balise. Enregistrez donc chaque fichier VTT en UTF-8 ; le BOM est facultatif et n'a posé aucun problème dans notre test. Dans Notepad++, le menu Encodage propose « Convertir en UTF-8 ». Pour le Bloc-notes et TextEdit, les réglages sont détaillés dans notre guide du fichier SRT.
Ouvrir un fichier VTT
- Pour le lire ou le modifier : n'importe quel éditeur de texte brut, comme le Bloc-notes sous Windows ou TextEdit sur Mac en mode texte. Évitez les traitements de texte, qui ajoutent de la mise en forme.
- Pour le regarder avec la vidéo : VLC lit le WebVTT depuis sa version 2.2 et a réécrit cette prise en charge dans la version 3.0, styles CSS compris. Donnez au fichier .vtt le même nom que la vidéo et placez-le dans le même dossier : VLC le charge tout seul. Sinon, passez par Sous-titres > Ajouter un fichier de sous-titres…
- Pour le modifier avec un aperçu : Subtitle Edit, gratuit et open source, pour Windows, macOS et Linux, affiche les sous-titres sur la vidéo et les enregistre dans d'autres formats. Son interface existe en français.
- Dans un navigateur : par une page web avec un élément
<track>, comme ci-dessus.
Convertir un fichier VTT en SRT
Le plus simple est Subtitle Edit : ouvrez le fichier .vtt, puis choisissez Fichier > Sauver sous… et le format SubRip (.srt). Le SRT n'a pas de place pour les blocs STYLE, les commentaires ni les réglages de position : ils disparaissent.
Sans logiciel, utilisez « Rechercher et remplacer » avec des expressions régulières, dans Visual Studio Code (Ctrl+H, puis le bouton .*) ou dans Notepad++ (Recherche > Remplacer…, mode « Expression régulière », case « . comprend EOL » décochée, puis « Remplacer tout »). Nous avons testé ces expressions avec le moteur d'expressions régulières de JavaScript, celui de la recherche de VS Code, sur des fichiers avec fins de ligne Windows et Unix. Respectez l'ordre :
- Supprimez la ligne
WEBVTTet tous les blocs NOTE et STYLE. - Ajoutez les heures manquantes : cherchez
(?<![\d:])(\d\d:\d\d\.\d\d\d), remplacez par00:$1. - Remplacez le point par une virgule dans les codes temporels uniquement : cherchez
(\d\d:\d\d:\d\d)\.(\d\d\d), remplacez par$1,$2. - Supprimez les réglages : cherchez
^(\d\d:\d\d:\d\d,\d\d\d --> \d\d:\d\d:\d\d,\d\d\d)[ \t].*$, remplacez par$1. - Supprimez les identifiants : cherchez
^.+\r?\n(?=\d\d:\d\d:\d\d,\d\d\d --> ), remplacez par rien. Numérotez ensuite les sous-titres 1, 2, 3 ; pour un long fichier, laissez Subtitle Edit s'en charger. - Transformez les balises de voix en noms : cherchez
<v(?:\.[^ \t>]+)*[ \t]+([^>]+)>, remplacez par$1: `. Supprimez ensuite les autres balises sauf i, b et u : cherchez `<(?!\/?[ibu]>)[^>]+>, remplacez par rien. - Remplacez
<par<,>par>, et en dernier&par&. - Enregistrez en UTF-8 avec l'extension .srt.
C'est à l'étape 3 que les raccourcis font des dégâts. Remplacer tous les points du fichier abîme le texte, pas seulement les codes temporels. Voici notre court extrait de réunion après un « Remplacer tout » à l'aveugle :
00:00:04,600 --> 00:00:07,900
<v Hugo Bernard>Oui, et le site exemple,fr est à jour, etc,</v>Les codes temporels sont devenus corrects pour le SRT, mais l'adresse du site est cassée, « etc. » aussi, et dans le sous-titre précédent « M. Dupont » est devenu « M, Dupont ». Avec les étapes ci-dessus, le même extrait donne un fichier SRT propre :
1
00:00:01,000 --> 00:00:04,200
Claire Martin: Bonjour ! M. Dupont a validé la facture ?
2
00:00:04,600 --> 00:00:07,900
Hugo Bernard: Oui, et le site exemple.fr est à jour, etc.Le deux-points après le nom est celui de l'étape 6, sans espace avant ; ajoutez-la si vous voulez suivre la typographie française.
Convertir un fichier VTT en texte (Teams, Zoom)
Dans Microsoft Teams, les organisateurs et co-organisateurs peuvent par défaut télécharger la transcription d'une réunion au format .docx ou .vtt : dans Chat, ouvrez la conversation de la réunion, sélectionnez Récapitulatif, puis Transcription, puis la flèche à côté de Télécharger, et choisissez le type de fichier. Si seul le texte vous intéresse, prenez le .docx. Dans les fichiers de Teams, la personne qui parle figure dans une balise de voix comme <v User Name>, d'après la documentation pour développeurs de Microsoft. Zoom enregistre la transcription d'un enregistrement dans le cloud au format VTT, avec un compte Pro, Business, Education ou Enterprise.
Pour obtenir du texte seul :
- Subtitle Edit : Fichier > Exporter > Texte brut…
- Rechercher et remplacer : supprimez l'en-tête et les blocs NOTE et STYLE ; supprimez chaque ligne de code temporel avec l'identifiant au-dessus (
^(?:.+\r?\n)?(?:\d+:)?\d\d:\d\d\.\d\d\d[ \t]+-->.*\r?\n) ; transformez les balises de voix en noms comme à l'étape 6, puis supprimez toutes les balises (<[^>]+>) ; décodez<,>et&; rassemblez les lignes de chaque sous-titre ((\S)\r?\n(?=\S)remplacé par$1 `) ; enfin, supprimez les lignes vides ((\r?\n)(?:\r?\n)+remplacé par `$1).
Notre extrait de réunion, converti ainsi :
Claire Martin: Bonjour ! M. Dupont a validé la facture ?
Hugo Bernard: Oui, et le site exemple.fr est à jour, etc.Pour transformer une transcription en compte rendu, voyez notre guide du compte rendu de réunion ; pour un entretien, celui sur la transcription d'entretien. Une transcription de réunion contient des noms et souvent des informations confidentielles, donc des données personnelles : convertissez-la sur votre ordinateur plutôt que dans un convertisseur en ligne gratuit.
Où utiliser un fichier VTT
| Plateforme | VTT ? | À savoir |
|---|---|---|
| YouTube | oui | La position fonctionne ; le style se limite au gras, à l'italique et au souligné. Pour débuter, YouTube recommande le SRT ou le SBV. |
| Vimeo | oui, recommandé | En UTF-8 et commençant par WEBVTT. |
| non | SRT uniquement, depuis un navigateur sur ordinateur. | |
| Microsoft Stream (SharePoint, OneDrive) | oui | Première ligne WEBVTT ; notes, commentaires et styles supprimés à l'import ; 4 Mo au plus. |
| PowerPoint | oui | WebVTT depuis Office 2016, sur Mac depuis la version 16.63 ; SRT en UTF-8 seulement depuis la version 2411. |
| Microsoft Teams | téléchargement | Transcriptions en .docx ou .vtt. |
| Zoom | téléchargement | Transcriptions des enregistrements dans le cloud en VTT. |
| H5P | oui | Les sous-titres doivent être en .vtt (aide en anglais). |
Dans Microsoft Stream, l'import se fait par Paramètres vidéo, section Transcriptions et sous-titres, Charger. Dans PowerPoint, sélectionnez la vidéo, puis dans l'onglet Lecture choisissez Insérer des sous-titres > Insérer des sous-titres. Descript exporte les sous-titres en SRT ou en VTT.
Liste de contrôle avant l'import
- UTF-8, avec ou sans BOM.
- Première ligne exactement
WEBVTT, avec au plus un titre après une espace. - Codes temporels avec un point et trois chiffres de millisecondes, sans espace avant les deux-points, dans l'ordre chronologique.
- Flèches tapées avec deux traits d'union et un signe « supérieur à ».
- Blocs STYLE avant le premier sous-titre, sans ligne vide.
&et<à la place de & et < dans le texte.- Labels courts, avec l'élément distinctif en premier.
- Un essai dans le lecteur de destination : dans nos tests, un fichier défectueux échouait souvent sans le moindre message d'erreur.
