Français

Vidéo et sous-titres · Boîte à outils de sous-titres

Pourquoi un fichier de sous-titres est lu dans VLC mais échoue dans l'élément de piste HTML5

· Comment ça marche

sous-titres webvtt traitement du navigateur

Un fichier de sous-titres atteignant deux analyseurs, le plus indulgent montrant chaque signal et le strict montrant les lacunes là où les signaux ont été supprimés.
Illustration vectorielle originale de ToolAcre

Les joueurs de bureau pardonnent ; l'élément track du navigateur ne l'est pas. Cet article explique comment l'analyseur de sous-titres HTML5 lit un fichier WebVTT, les erreurs qu'il supprime silencieusement et comment préparer un fichier que les deux acceptent.

Le même fichier fonctionne dans VLC et n'affiche rien sur la page Web : deux analyseurs, deux niveaux de tolérance

Un fichier de sous-titres qui est lu correctement dans un lecteur de bureau et n'affiche rien sur une page Web n'a pas changé entre les deux. Ce qui a changé, c'est la tolérance du lecteur. Les lecteurs de bureau sont conçus pour afficher tout ce qu'un utilisateur leur fait glisser, afin qu'ils devinent, réparent et ignorent. L'élément track HTML5 implémente une spécification, et une spécification qui accepterait des suppositions n'en serait pas une.

La différence n'est pas non plus un bug. Il s'agit de deux conceptions avec des obligations différentes, et la conséquence pratique est que le lecteur de bureau ne constitue pas un bon test pour savoir si un fichier fonctionnera sur le Web.

Comment l'élément de piste charge un fichier de sous-titres : la requête, le type MIME, CORS pour les pistes d'origine croisée et la vérification de l'en-tête WEBVTT

L'élément track récupère le fichier de sous-titres comme une ressource normale, ce qui signifie qu'il est soumis aux mêmes règles que toute autre requête. Il doit être servi avec le type de média WebVTT, et un fichier servi en texte brut est rejeté quel que soit son contenu. Une piste hébergée sur une autre origine a besoin d'en-têtes d'origine croisée et de l'attribut crossorigin sur l'élément vidéo, et sans eux, la récupération échoue avant toute analyse.

Vient ensuite la vérification de l'en-tête. Un fichier WebVTT doit commencer par la signature WEBVTT, éventuellement précédée d'une marque d'ordre d'octet, et un fichier sans cette signature n'est pas un fichier WebVTT. Il s'agit de la raison la plus courante pour laquelle un fichier SRT renommé en extension VTT n'affiche rien : le changement de nom a modifié l'extension et non la première ligne.

Analyse repère par repère : ce que fait le navigateur avec un timecode mal formé ou une ligne inattendue, et pourquoi l'échec est silencieux

L'analyse après ce point se fait indice par indice, et le mode d'échec est ce qui la rend déroutante. Un bloc que l'analyseur ne peut pas lire est ignoré et l'analyse continue. Il n’y a aucune exception, aucune erreur de console et aucune indication visuelle ; le signal n'apparaît tout simplement jamais. Un fichier avec quatre timecodes mal formés sur neuf cents joue presque parfaitement, avec quatre moments de silence qui ressemblent plus à une traduction manquante qu'à un défaut de format.

C'est pourquoi le symptôme est généralement signalé comme intermittent. Rien n’est intermittent là-dedans. Les mêmes signaux échouent à chaque fois, mais comme les signaux environnants fonctionnent, le fichier semble globalement fonctionnel et le problème est attribué au contenu plutôt qu'à l'analyse.

Indulgence des lecteurs de bureau : pourquoi VLC et d'autres acceptent des fichiers techniquement invalides

Les joueurs de bureau adoptent délibérément la position opposée. Ils acceptent les deux séparateurs en millisecondes, tolèrent les lignes d'index manquantes, déduisent le format du contenu plutôt que de l'extension, réparent l'ordre et ignorent ce qu'ils ne peuvent pas utiliser sans se plaindre. Un utilisateur qui fait glisser un fichier sur un lecteur souhaite que le film ait des sous-titres et non un rapport de validation.

L'analyseur de la boîte à outils s'inscrit dans la même tradition indulgente en matière d'entrée, acceptant les heures facultatives, soit les séparateurs, soit les fichiers dont les blocs sont irréguliers. La différence réside dans ce qu'il fait ensuite : il enregistre chaque faute qu'il a tolérée comme un problème localisé, et il réécrit une forme canonique plutôt que de conserver l'irrégularité qu'il a acceptée.

Exemple concret : un fichier avec trois erreurs courantes – le tester dans un navigateur et voir quels signaux disparaissent

Prenez un fichier avec trois défauts : il lui manque l'en-tête WEBVTT, une mémoire a un champ de soixante-quinze secondes et une mémoire se termine avant de commencer. Dans un lecteur de bureau, le fichier est lu, les secondes impossibles sont réparées ou sautées silencieusement et le signal inversé clignote ou est abandonné. Le spectateur voit les sous-titres.

Dans l'élément track, l'en-tête manquant le termine immédiatement ; aucun signal ne s'affiche, car le fichier n'a jamais été accepté comme WebVTT. Ajoutez l'en-tête et l'image change : la plupart des repères apparaissent, le repère de soixante-quinze secondes est ignoré pendant l'analyse, et le repère inversé est analysé mais jamais affiché car il n'a pas de durée à afficher. La validation nomme les deux avant de charger la page, signalant le timecode impossible et le signal qui se termine avant de commencer, chacun par numéro.

Ce que cela ne couvre pas : style avec ::cue, paramètres de positionnement et sous-titres en direct

Cela indique si les signaux se chargent, pas à quoi ils ressemblent. Le style via le pseudo-élément de repère, les paramètres de positionnement et d'alignement sur la ligne de timecode, les définitions de région et le texte vertical sont tous des problèmes distincts qui n'ont d'importance qu'une fois le fichier analysé. Un fichier qui n'affiche rien n'est pas un problème de style, et le style ne le résoudra pas.

Les sous-titres en direct et en streaming sont également en dehors de cela. Les pistes de sous-titres segmentés diffusées parallèlement aux flux adaptatifs ont leur propre modèle de diffusion, et un fichier statique chargé par un élément de piste ne permet pas qu'elles atteignent le lecteur.

À retenir : préparez-vous à l'analyseur le plus strict : comment la conversion et le nettoyage de Subtitle Toolkit produisent un fichier que l'élément de piste accepte

Préparez-vous à l'analyseur le plus strict plutôt qu'au plus indulgent, car l'analyseur strict est celui que votre public utilise. Convertissez correctement en WebVTT afin que la ligne de signature soit écrite plutôt que supposée, servez-la avec le type de média correct et ajoutez des en-têtes d'origine croisée si le fichier réside sur un autre hôte.

Exécutez la conversion et lisez les problèmes signalés avant l'expédition. Le convertisseur écrit des horodatages canoniques avec le séparateur requis par le format, renumérote les repères de manière contiguë et signale les erreurs qu'il a dû tolérer, qui sont la liste des repères qui auraient disparu silencieusement dans un navigateur. Rechargez ensuite la page et comparez le nombre de repères avec la source plutôt que de croire que les sous-titres sont apparus.