Vidéo et sous-titres · Boîte à outils de sous-titres
Comparaison des timecodes des sous-titres : SRT virgules, VTT points et images SMPTE
· Contexte
sous-titres codes temporels fréquence d'images
Trois façons d'écrire l'heure apparaissent dans le travail de sous-titrage : HH:MM:SS,mmm de SRT, HH:MM:SS.mmm de WebVTT et HH:MM:SS:FF de SMPTE. Cet article explique ce que chacun signifie, comment ils se convertissent et où les conversions échouent.
Le même moment écrit de trois manières – un aperçu rapide des codes temporels qu'un éditeur rencontre dans un projet
Un projet peut remettre à un éditeur le même instant écrit de trois manières. Le fichier de sous-titres utilise des heures, des minutes, des secondes et une virgule avant les millisecondes. Le fichier de légende Web utilise un point à la même position. La liste de décisions de modification utilise un numéro de trame au lieu d'une fraction. Tous trois nomment le même moment, et un seul d’entre eux peut être lu sans rien savoir d’autre sur le matériau.
Ce dernier point est celui qui compte. Deux de ces notations sont absolues et une ne l'est pas, et les conversions entre elles échouent d'une manière spécifique lorsque la différence est négligée.
Millisecondes avec une virgule : SRT — une habitude décimale européenne devenue une règle de format
SRT écrit les heures, les minutes, les secondes, une virgule et exactement trois chiffres de millisecondes. La virgule est un séparateur décimal dans la convention européenne, et elle est devenue une règle de format par usage plutôt que par spécification, puisque SubRip n'avait aucun document standard pour la corriger. Rien dans la valeur n’est européen ; seule la ponctuation l'est.
L'analyseur lit ici les millisecondes en complétant les chiffres qu'il trouve à droite à trois, de sorte qu'un horodatage se terminant par un seul chiffre est lu en centaines de millisecondes plutôt qu'en unités. Cela est important car les fichiers écrits à la main ou par un convertisseur libre ne fournissent pas toujours trois chiffres, et la lecture d'un seul chiffre de fin en tant qu'unités placerait le signal presque une seconde plus tôt.
Millisecondes avec un point : WebVTT – la même valeur, un séparateur différent et pourquoi c'est important pour les analyseurs
WebVTT écrit la même valeur avec un point et permet d'omettre entièrement le champ des heures, donc un formulaire à deux champs est valide là où SRT en attend trois. Pour un analyseur, ce sont des grammaires véritablement différentes, c'est pourquoi un fichier peut être rejeté uniquement pour la ponctuation même si tous les chiffres qu'il contient sont corrects.
Les vrais fichiers mélangent constamment les deux, de sorte que l'analyseur accepte l'un ou l'autre des séparateurs, quel que soit le format revendiqué par le fichier. Cette tolérance concerne uniquement l'entrée. En sortie, le séparateur est choisi par le format cible, une virgule pour SRT et un point pour WebVTT, donc un fichier converti est canonique plutôt qu'une copie de toute irrégularité arrivée.
Images : code temporel SMPTE — HH:MM:SS:FF, sa dépendance à la fréquence d'images et à la complication du drop frame
Le timecode SMPTE remplace la partie fractionnaire par un numéro d'image, donnant les heures, les minutes, les secondes et les images. Contrairement aux deux autres, il ne peut pas être interprété seul : l'image douze est un instant différent à vingt-cinq images par seconde de celui à trente, donc un timecode basé sur une image sans fréquence déclarée est incomplet plutôt que simplement ambigu.
Drop-frame ajoute une deuxième complication. Le matériel à 29.97 images par seconde est compté comme s'il y en avait trente, et pour que le décompte reste aligné avec l'horloge, deux numéros d'image sont ignorés au début de la plupart des minutes, chaque dixième minute étant exemptée. Les images ne sont pas supprimées ; seules les étiquettes le sont. Un timecode drop-frame est une convention de comptage, et le traiter comme un simple décompte d'images produit une erreur qui se développe dans tout le programme.
Conversion d'images en millisecondes : l'arithmétique et l'arrondi qui produisent des erreurs petites mais réelles
La conversion des images en millisecondes est une division par la fréquence d'images, et l'arrondi est l'endroit où les petites erreurs entrent. Un indice de trame divisé par le taux et multiplié par mille arrive rarement sur une milliseconde entière, et le résultat doit être arrondi pour être stocké. En interne, les indices sont conservés sous forme de millisecondes entières comptées à partir de zéro, de sorte que chaque conversion dans cette représentation est arrondie une fois.
Un arrondi est inoffensif. L'erreur à surveiller est la conversion répétée : un fichier pris d'images en millisecondes, de retour en images à une fréquence différente et en avant à nouveau accumule un arrondi à chaque fois, et ces erreurs ne s'annulent pas. Convertissez une seule fois à partir de la source faisant autorité plutôt que de transmettre un fichier via plusieurs outils.
Exemple concret : un signal à 25 fps et à 29.97 drop-frame — conversion des deux en millisecondes et comparaison
Prenez un signal à une minute trente secondes et douze images. À vingt-cinq images par seconde, douze images font douze vingt-cinquièmes de seconde, soit quatre cent quatre-vingts millisecondes exactement, donc l'instant est quatre-vingt-dix mille quatre cent quatre-vingts millisecondes.
À 29.97 drop-frame, la même étiquette est un instant différent. Comptez les images : quatre-vingt-dix secondes au nominal trente donnent deux mille sept cents, plus douze, moins les deux étiquettes abandonnées à la première minute, soit deux mille sept cent dix images. Divisez par le taux réel de trente mille sur mille un et l'instant est d'environ quatre-vingt-dix mille quatre cent vingt-quatre millisecondes. Les deux codes temporels semblent presque identiques et diffèrent d'environ cinquante-six millisecondes, ce qui est suffisamment petit pour survivre à un examen et suffisamment grand pour être visible sur un signal précis.
Ce que cela ne couvre pas : heures au-delà de 99, heures et code temporel négatifs dans les métadonnées du conteneur
Cela couvre les notations de timecode qu'un fichier de sous-titres contient. Il ne couvre pas les champs horaires au-delà de quatre-vingt-dix-neuf, que certains systèmes utilisent pour l'identification de la bobine plutôt que le temps écoulé, et il ne couvre pas les temps négatifs, qu'aucun des deux formats de sous-titres ne peut exprimer ; un décalage qui en produirait un est fixé à zéro.
Le timecode stocké dans les métadonnées du conteneur est également hors de portée. Un fichier vidéo peut contenir un timecode de début qui compense tout ce qu'il contient, de sorte qu'un fichier de sous-titres correct par rapport au programme peut apparaître incorrect par rapport au fichier, et aucun examen des horodatages des sous-titres ne le révélera.
À retenir : sachez quelle horloge vous lisez - comment la boîte à outils de sous-titres convertit exactement entre les codes temporels SRT et WebVTT
Sachez quelle horloge vous lisez. Une virgule et un point sont la même valeur écrite pour différents analyseurs, et la conversion entre eux devrait changer la ponctuation et rien d'autre. Un nombre d'images est un type de nombre différent, dénué de sens sans son débit et trompeur lorsque le débit est un taux de chute d'images.
Convertissez entre SRT et WebVTT avec la boîte à outils et comparez un horodatage avant et après : le séparateur doit changer et les chiffres ne doivent pas changer. Si un nombre a bougé, le fichier est passé par une étape basée sur une image quelque part, et c'est la conversion à examiner.