Aller au contenu
OneKitly

Sous-titres décalés : mesurer l'écart et décaler un SRT d'un nombre exact de secondes

Publié le 05/08/2026 · 15 min de lecture · Outils pour développeurs

Daniel Okonkwo

Daniel OkonkwoDéveloppeur front-end et rédacteur Tech chez OneKitly

Performance web · Formats de fichiers

Vérifié à partir de 4 sources

Voir le profil
En bref

Mesure l'écart avant de décaler quoi que ce soit. Repère une réplique parfaitement identifiable près du début, note l'instant exact où elle est prononcée dans le lecteur, soustrais l'horodatage de début du sous-titre, et tu as l'écart en secondes — puis refaites la mesure près de la fin du film. Si les deux valeurs concordent, la piste porte un écart constant et un seul décalage corrige tout le fichier : colle le SRT, saisis l'écart en secondes (positif pour retarder, négatif pour avancer) et récupère le fichier corrigé. Si la seconde valeur est plus grande que la première, ce n'est pas un écart, c'est une dérive, et aucun décalage ne la corrigera. Une dérive signifie presque toujours un conflit de cadence. Une piste calée sur un master à 25 ips et lue sur un transfert à 23,976 ips — 23,976 valant exactement 24000/1001 — doit voir ses horodatages multipliés par 1,042708, et non déplacés : l'erreur croît de 2,5625 seconde par minute de projection, soit une seconde toutes les 23,4 secondes et 3 minutes 50,6 secondes sur une timeline de sous-titres de 90 minutes. Le couple plus doux, 24 contre 23,976 ou 30 contre 29,97, vaut exactement 1,001 — seulement 5,4 secondes sur les mêmes 90 minutes, ce qui explique qu'on le prenne pour un écart constant pendant la première demi-heure. Un comportement à connaître avant de saisir une valeur négative : un sous-titre entièrement repoussé avant zéro est retiré, pas aplati, et une ligne ambre au-dessus de la sortie compte combien sont partis. Un sous-titre à cheval sur zéro garde sa vraie fin et commence à 00:00:00,000. Cela rend aussi utilisable un grand décalage négatif pour couper une introduction : les sous-titres qui s'y trouvaient disparaissent, tout ce qui suit garde son espacement, et on te dit ce qui a été perdu.

Mesure l'écart en deux points au lieu de le deviner une fois. S'il est constant, un seul décalage corrige le fichier. S'il grandit, c'est un problème de cadence — 25 ips contre 23,976 dérive de 2,5625 seconde par minute — et aucun décalage ne le corrigera.

Mesure l'écart, ne l'estime pas à l'œil

Choisis une réplique impossible à confondre — un nom, un chiffre, un cri, n'importe quoi commençant par une consonne franche. Lance le film, mets en pause sur l'image où le son démarre, et lis l'horloge du lecteur. Retrouve ensuite cette même réplique dans le fichier de sous-titres et lis son horodatage de début. L'écart, c'est le temps vidéo moins le temps du sous-titre. Si la vidéo indique 00:04:12,500 et le sous-titre 00:04:09,000, les sous-titres passent 3,5 secondes trop tôt et l'écart à appliquer est de +3,5 secondes.

Recommence ensuite, aussi près de la fin du film que tu trouves une réplique nette. Cette seconde mesure constitue tout le diagnostic, et c'est en la sautant qu'on décale quatre fois le même fichier sans jamais le corriger. Deux nombres qui concordent à quelques dixièmes près signifient un écart constant : un décalage, terminé. Deux nombres qui diffèrent de plusieurs minutes signifient que le fichier n'est pas décalé du tout, il tourne à la mauvaise vitesse, et chaque décalage appliqué corrigera un bout du film en aggravant l'autre.

Une note pratique sur la lecture de l'horloge : la plupart des lecteurs affichent la position au dixième de seconde, et un dixième reste très en deçà de ce qu'un spectateur perçoit ; inutile donc de viser l'image près. Ce qu'il faut, c'est être honnête sur l'instant mesuré. Mesure l'instant où le son démarre, pas celui où tu le remarques, et mesure le même type d'instant les deux fois — sinon tes deux relevés diffèrent de ton temps de réaction et tu inventes une dérive qui n'existe pas.

Quand l'écart grandit : l'arithmétique des cadences

Le même film existe en deux familles de vitesse de défilement, et le fichier de sous-titres se souvient de celle sur laquelle il a été écrit. La famille cinéma tourne à 24 images par seconde, ou à 24000/1001 — 23,976 — sur tout transfert ayant dû tenir dans la cadence de la télévision couleur américaine. La famille diffusion de la plus grande partie de l'Europe tourne à 25. Ce ne sont pas des étiquettes décoratives : les abréviations de cadence de ffmpeg les écrivent en fractions exactes, film = 24/1, pal = 25/1, ntsc-film = 24000/1001, ntsc = 30000/1001. Un fichier de sous-titres fait pour l'une et lu sur l'autre n'est pas au mauvais endroit, il avance à la mauvaise vitesse.

La correction est une multiplication, pas une addition. Des horodatages écrits pour une version à 25 ips, lus sur une version à 23,976 ips, doivent être multipliés par 25 ÷ (24000/1001) = 25025/24000 = 1,042708. Lis cela comme un taux d'erreur et cela devient reconnaissable à l'œil : 2,5625 seconde de dérive par minute de projection, une seconde pleine toutes les 23,4 secondes. Sur une timeline de sous-titres de 90 minutes, cela s'accumule à 230,6 secondes — 3 minutes 50,6 secondes. Dans l'autre sens, une réplique qui appartient à la 90e minute du transfert à 23,976 porte un horodatage 25 ips de 86 minutes 18,8 secondes et arrive 3 minutes 41,2 secondes trop tôt.

Le couple dangereux est le petit. Passer de 24 à 23,976, ou de 30 à 29,97, correspond à un rapport d'exactement 1,001, soit 5,4 secondes sur les mêmes 90 minutes. Pendant les vingt premières minutes, c'est invisible ; à la dernière bobine, c'est une phrase entière à côté. On décale un tel fichier de deux secondes, on regarde le début avec satisfaction, et on retombe sur le même problème une heure plus tard — parce que ce n'était jamais un écart. Deux mesures espacées d'une heure te disent lequel des deux tu as en environ quatre-vingt-dix secondes de travail.

Cet outil décale et ne rééchelonne pas, et il vaut mieux le dire franchement que te laisser le découvrir. Si tes deux mesures divergent, le fichier a besoin que chaque horodatage soit multiplié, ce qui suppose un outil de conversion de cadence ou un court script — et le multiplicateur est le rapport de tes deux positions mesurées, pas une valeur à deviner. Divise le temps vidéo réel de la réplique tardive par celui de la réplique précoce, fais de même pour les deux horodatages des sous-titres ; le rapport de ces deux rapports est ce qu'il faut appliquer.

Ce que fait réellement un décalage négatif ici

Un décalage négatif est le cas courant — des sous-titres qui arrivent en retard doivent être avancés — et c'est le seul endroit où un outil de sous-titrage doit trancher une question que le format ne tranche pas pour lui. Un sous-titre à 00:00:01,000 décalé de −5 secondes commencerait à −4 secondes. SubRip n'a aucun moyen d'écrire cela. Trois réponses sont possibles : écrire quand même un horodatage négatif et laisser le lecteur s'étrangler, supprimer le sous-titre, ou le borner à zéro. Cet outil choisit entre les deux dernières, sous-titre par sous-titre, selon ce qui reste après l'origine.

Le test porte sur l'horodatage de fin du sous-titre, ce qui produit deux résultats différents. Un sous-titre à cheval sur zéro est tronqué : à −2,5 secondes, 00:00:01,000 --> 00:00:04,000 revient en 00:00:00,000 --> 00:00:01,500. Il garde sa vraie fin, apparaît donc dès la toute première image et dure une seconde et demie de moins qu'il ne devrait — visible, mais pas fatal. Un sous-titre entièrement repoussé avant zéro, c'est autre chose. À −5 secondes, le même sous-titre se terminerait à −1 seconde : il n'a plus rien à montrer, et il est retiré du fichier. Les sous-titres qui subsistent sont renumérotés à partir de 1, si bien que ce qui revient est un fichier plus court et non un fichier rembourré.

Repousse tout le fichier assez loin et les sous-titres compris dans cet intervalle disparaissent purement et simplement. Un décalage de −20 secondes appliqué à un fichier dont les trois premiers sous-titres tiennent dans les douze premières secondes ne renvoie plus rien, et une ligne ambre au-dessus de la sortie indique que tous les sous-titres tombent désormais avant zéro. En deçà de cet extrême, la même ligne porte deux comptes : combien de sous-titres ont été retirés, et combien commençaient avant zéro et démarrent maintenant à l'origine. Ce que l'outil ne fait plus, c'est perdre des sous-titres sans le dire — lis les comptes avant d'écraser quoi que ce soit, et compare-les à ce que tu pensais perdre.

Cela fait aussi d'un grand décalage négatif un véritable outil de coupe. Retire une introduction de trente secondes en tête de vidéo, décale les sous-titres de −30 secondes, et ceux qui appartenaient à l'introduction sont supprimés, celui qui chevauche la coupe commence à la première image avec sa vraie fin, et tout ce qui suit garde son espacement. Le compte affiché dans le bandeau sert de vérification : s'il annonce quatre sous-titres retirés alors que tu comptais en perdre deux, ton écart dépassait la durée de l'introduction.

Ce qui ressort, et ce que cela change discrètement

La sortie est toujours du SubRip, quelle que soit l'entrée. Les sous-titres sont renumérotés à partir de 1 dans l'ordre du fichier, les horodatages sont écrits en HH:MM:SS,mmm avec une virgule avant les millisecondes, et tout ce qui se trouve entre la ligne d'horodatage et la ligne vide passe tel quel — y compris tes balises d'italique ou tes tirets de dialogue. Ce dernier point compte : c'est un outil de recalage, pas de nettoyage, et il ne modifiera ton texte en rien.

Il lit aussi un fichier WebVTT, et cela vaut la peine d'être su, car le résultat n'est pas celui qu'un utilisateur non averti attend. Colle un .vtt : l'outil trouve les sous-titres, jette la ligne d'en-tête WEBVTT, jette les identifiants de repère et les réglages de repère placés après la flèche, convertit le point décimal en virgule, et te rend du SubRip. Les temps se décalent correctement. Mais le fichier qui revient n'est plus du WebVTT valide — l'en-tête est une exigence stricte de la spécification, et les réglages de positionnement sur lesquels tu comptais peut-être ont disparu. Si tu voulais un .vtt décalé, ce n'est pas la bonne voie.

Deux petits faits sur les bords, tous deux trouvés en réinjectant la sortie de l'outil dans l'outil. Le lecteur d'horodatage accepte jusqu'à trois chiffres pour le champ des heures : un horodatage comme 111:06:41,000 est donc relu sans difficulté, et le plafond se situe à 999:59:59,999, au-delà duquel l'outil écrirait des heures qu'il ne saurait plus relire — un mur qu'aucun film n'atteindra. Et l'écart est arrondi au millième de seconde en sortie : une valeur de 0,0005 seconde devient un déplacement d'une milliseconde plutôt que rien. Ni l'une ni l'autre ne gênera un film, mais les deux méritent d'être connues si tu enchaînes les opérations.

Dérive par minute
La même timeline de sous-titres de 90 minutes sous cinq conflits de cadence — multiplicateur, dérive par minute, dérive totale
ConflitMultiplicateur à appliquerDérive par minuteDérive sur 90 minutesCe que l'on voit à l'écran
Écart constant (toute cause)1,000000 — décale plutôt0 s0 sAussi faux à la 1re minute qu'à la 89e — un seul décalage corrige
Sous-titres 24 ips sur vidéo 23,976 ips (ou 30 sur 29,97)1,0010000,060 s5,4 sInvisible pendant vingt minutes, une phrase à côté à la fin — le cas le plus souvent mal diagnostiqué
Sous-titres 25 ips sur vidéo 24 ips1,0416672,500 s3 min 45,0 sLes sous-titres prennent de l'avance et l'écart se creuse visiblement dès la première bobine
Sous-titres 25 ips sur vidéo 23,976 ips1,0427082,563 s3 min 50,6 sLe classique conflit PAL-cinéma : une seconde perdue toutes les 23,4 secondes
Sous-titres 23,976 ips sur vidéo 25 ips0,959041−2,458 s−3 min 41,2 sLe même conflit à l'envers : les sous-titres prennent de plus en plus de retard
Décalage temporel de sous-titres SRTCorrige des sous-titres désynchronisés en décalant tous les horodatages d'un fichier SRT du même écart. Colle les sous-titres, saisis un décalage positif pour les retarder ou négatif pour les avancer, en secondes ou millisecondes, puis copie ou télécharge le fichier corrigé. Les temps ne passent jamais sous zéro.Essayer l'outil

Questions fréquentes

Comment mesurer l'écart avec précision sans avancer image par image dans tout le film ?
Deux mesures suffisent, et le dixième de seconde suffit comme précision. Trouve une réplique commençant par une consonne franche près du début du film, mets en pause sur l'image où le son démarre, lis la position du lecteur ; soustrais-en l'horodatage de début du sous-titre. Fais de même pour une réplique proche de la fin. Si les deux écarts concordent, applique leur moyenne et c'est terminé. La constance de la méthode compte plus que la précision : mesure toujours le même instant — le début du son, pas le moment où tu le reconnais — car une erreur de temps de réaction d'une demi-seconde sur l'une des deux mesures suffit à inventer une dérive inexistante. Si ton lecteur n'affiche que des secondes entières, prends-en un qui affiche les dixièmes : la différence entre 3 secondes et 3,5 secondes d'écart se voit à l'écran.
Mes sous-titres sont parfaits au début et environ quatre minutes en avance à la fin. Qu'est-ce que c'est ?
C'est un conflit de cadence, et son ampleur dit lequel. Environ quatre minutes de dérive sur un long métrage est la signature de sous-titres à 25 ips sur une vidéo à 23,976 ips : le multiplicateur vaut 1,042708, la dérive 2,5625 seconde par minute, et sur une timeline de sous-titres de 90 minutes elle totalise 230,6 secondes — 3 minutes 50,6 secondes, ou 3 minutes 41,2 secondes si tu la mesures plutôt sur l'horloge de la vidéo. Un décalage ne peut pas y remédier, car il ajoute le même nombre à chaque horodatage alors que ton erreur est proportionnelle à l'horodatage. Il faut multiplier chaque horodatage par 1,042708, ce qui relève de la conversion de cadence et non du décalage. Cet outil ne le fait pas, et appliquer un décalage ne fera que déplacer d'un bout du film à l'autre le point où les sous-titres tombent juste.
Qu'arrive-t-il aux sous-titres qu'un décalage négatif repousse avant 00:00:00,000 ?
Ils sont retirés, et l'outil dit combien. La décision se prend sur l'horodatage de fin, d'où deux résultats. Un sous-titre à cheval sur zéro garde sa vraie fin : décaler 00:00:01,000 --> 00:00:04,000 de −2,5 secondes renvoie 00:00:00,000 --> 00:00:01,500, qui s'affiche dès la première image et dure une seconde et demie de trop peu. Un sous-titre dont la fin est elle aussi passée avant zéro n'a plus rien à montrer et il est supprimé ; les survivants sont renumérotés à partir de 1, si bien que la sortie est un fichier valide plus court plutôt qu'un fichier rembourré d'entrées vides. Une ligne ambre au-dessus de la sortie porte les comptes — combien de sous-titres ont été retirés, combien démarrent maintenant à l'origine — et si le décalage efface tout, elle le dit au lieu de te remettre un fichier. Aucun temps négatif n'est jamais écrit. En pratique, cela fait d'un grand décalage négatif un moyen utilisable de couper une introduction : compare le nombre retiré au nombre de sous-titres que tu comptais perdre avant d'écraser quoi que ce soit.
Puis-je y coller un fichier WebVTT, ou n'accepte-t-il que du SubRip ?
Il lit le WebVTT, mais il te rend du SubRip, et cette conversion n'est pas gratuite. WebVTT est une spécification du W3C : le fichier doit s'ouvrir par une ligne WEBVTT, les horodatages utilisent un point avant la fraction à trois chiffres et non une virgule, le champ des heures est facultatif, et une ligne de repère peut porter une liste de réglages après la flèche — alignement, position, région — ainsi qu'un identifiant facultatif sur la ligne au-dessus. Cet outil trouve les repères, les décale et écrit du SubRip : l'en-tête a disparu, les identifiants ont disparu, les réglages ont disparu, et le point devient une virgule. Si ta source était un WebVTT stylé ou positionné, tout cela est jeté sans le dire. Si tu veux en réalité du texte brut à partir d'un fichier de sous-titres plutôt qu'un fichier recalé, le convertisseur VTT vers TXT est la voie honnête.
Existe-t-il une spécification officielle SubRip pour vérifier mon fichier ?
Non, et il vaut mieux le savoir avant de discuter avec un outil de ce qui est valide. Le format, c'est ce que produisait le programme SubRip d'origine, plus ce que les lecteurs ont ensuite bien voulu tolérer. La Bibliothèque du Congrès le décrit comme partiellement documenté et mal normalisé, et ne liste aucun document de spécification ; sa fiche donne la forme du timecode comme heures:minutes:secondes,millisecondes, avec la virgule, et la flèche comme deux tirets suivis d'un chevron fermant. Il n'existe pas non plus de type de média enregistré, là où WebVTT dispose de text/vtt enregistré auprès de l'IANA. En pratique, cela signifie que l'encodage relève de la devinette — le programme d'origine sortait par défaut dans une page de codes Windows, si bien que tout analyseur doit tenter une détection de jeu de caractères — et que lorsque deux outils divergent sur ton fichier, aucun des deux n'a tort au regard d'une norme. Teste dans le lecteur que tu utiliseras vraiment.

Articles qui pourraient t'intéresser

Tous les guides
TutorielSRT vers texte : obtenir une transcription propre à partir de sous-titresRetirer les numéros et les horodatages, c'est la moitié facile. Celle qui décide de la lisibilité, ce sont les balises d'italique, les tirets de dialogue, les descriptions sonores et les phrases coupées sur deux sous-titres — et ce convertisseur t'les laisse toutes.TutorielDes sous-titres au tableur, et retour : ce qui survit à l'aller-retourUne virgule est protégée, un guillemet est doublé, et un sous-titre sur deux lignes garde ses deux lignes — vérifié à l'octet près sur trois allers-retours consécutifs. Ce qui peut encore altérer ton fichier, c'est le tableur au milieu.TutorielFusionner deux pistes de sous-titres en une version bilingue : ce qui arrive vraiment aux sous-titresLe sous-titre 12 de la piste anglaise n'est pas le sous-titre 12 de la piste française, parce que les traducteurs découpent et regroupent les phrases autrement. Deux stratégies existent pour les apparier ; ce fusionneur n'en applique aucune — il entrelace. Voici ce que cela donne et quand cela suffit.ExplicationPourquoi ta coupe vidéo tombe deux secondes trop tôtTu as demandé 1:23 et obtenu 1:21. Rien n'est cassé : une coupe qui ne ré-encode pas ne peut atterrir que sur une image-clé, et la distance à la plus proche dépend entièrement de ce qui a enregistré la vidéo. Voici comment savoir laquelle tu as et quand accepter le décalage.GuideExtraire des images fixes d'une vidéo — et pourquoi elles paraissent plus molles que la vidéoTrois commandes se cachent derrière trois boutons : une image à un instant donné, un nombre fixe réparti sur le clip, ou une toutes les N secondes. Voici les arguments exacts, le plafond de 60 images et la raison pour laquelle une image prise au milieu d'un clip compressé ne sera jamais aussi nette qu'une image-clé.TutorielRécupérer le son d'une vidéo sans une deuxième génération de perteLa bande-son de ta vidéo est déjà passée une fois par un encodeur avec perte. Que l'extraction t'en coûte une seconde dépend entièrement du bouton choisi parmi les trois — et « extraire en MP3 », celui vers lequel tout le monde se tourne, est celui qui coûte.

Outils similaires

SubRip n'a pas de spécification. La Bibliothèque du Congrès le décrit comme partiellement documenté et mal normalisé : ce qui constitue un fichier .srt valide est donc décidé par le lecteur, l'encodeur ou la plateforme qui le lit, et deux d'entre eux finiront par diverger. Tout ce qui est décrit ici a été vérifié sur la sortie réelle de l'outil, pas sur une norme, puisque ce format n'en a aucune. WebVTT est différent — il dispose d'une spécification publiée par le W3C — mais celle-ci reste au stade de Candidate Recommendation Draft, et non de recommandation achevée. Conserve le fichier d'origine, teste le fichier converti dans le lecteur ou l'outil d'envoi que tu comptes vraiment utiliser avant de jeter quoi que ce soit, et considère toute affirmation sur ce que font « tous les lecteurs », y compris celles de cette page, comme quelque chose à vérifier sur le vôtre.

Sources

Tu as repéré une erreur dans cet article ?