Aller au contenu
OneKitly

Fusionner deux pistes de sous-titres en une version bilingue : ce qui arrive vraiment aux sous-titres

Publié le 05/08/2026 · 16 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

Ce fusionneur n'apparie pas du tout les sous-titres, et le savoir avant de commencer fait gagner une heure. Il propose deux modes. « Superposer » concatène les deux listes et trie le résultat par temps de début : rien n'est combiné, quatre sous-titres anglais et trois français produisent sept sous-titres distincts, chacun portant toujours une seule langue. « À la suite » décale tout le second fichier pour qu'il commence après la fin du premier plus un écart choisi, ce qui sert à joindre les sous-titres de deux parties de vidéo, pas de deux langues. Aucun des deux modes n'apparie par index ni par recouvrement temporel — les deux stratégies dont une fusion bilingue aurait besoin. Cela compte, car les nombres de sous-titres ne coïncident presque jamais : un traducteur qui transforme deux courtes répliques anglaises en une phrase française a déjà rompu la correspondance des index, et à partir de ce sous-titre la numérotation des deux fichiers diverge définitivement. « Superposer » reste utile quand les deux pistes ont été calées sur le même master, car des temps de début égaux gardent chaque paire côte à côte et le tri conserve l'ordre de lecture, si bien que la ligne du premier fichier vient en premier. Mais dès qu'une piste précède l'autre de quarante millisecondes sur une réplique donnée, la paire s'inverse et tes deux langues cessent d'apparaître dans un ordre constant. Ce que « superposer » ne produit jamais, c'est un sous-titre portant deux lignes. Si c'est ce que tu veux, les deux langues doivent être réunies dans le texte d'un même sous-titre, ce qui relève de l'édition de texte et non du calage — et SubRip n'a aucun positionnement, donc l'endroit où les lignes atterrissent à l'écran est décidé par le lecteur, pas par ton fichier.

Le 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.

Pourquoi le sous-titre 12 n'est pas le sous-titre 12

Prends douze secondes de dialogue. En anglais, cela fait quatre sous-titres : « I told you. » / « I told you twice. » / « And you did it anyway. » / « That is the part I mind. » Le traducteur français fond les deux premiers en une seule ligne qui tient confortablement à l'écran et livre trois sous-titres couvrant les mêmes douze secondes. À partir de là, le sous-titre anglais 3 est le français 2, l'anglais 4 est le français 3, et chaque divergence suivante — une ligne coupée pour la vitesse de lecture, deux lignes réunies parce que la langue cible est plus brève — déplace encore la correspondance. Rien, dans aucun des deux fichiers, n'en garde la trace.

Une fusion bilingue doit donc décider, sous-titre par sous-titre, quelle ligne d'un fichier va avec quelle ligne de l'autre, et il n'existe que deux façons honnêtes de le faire. L'appariement par index est instantané et correct jusqu'à la première divergence, après quoi il se trompe avec aplomb pour tout le reste du film — et l'échec est invisible dans un éditeur de texte, car les deux fichiers restent parfaitement bien formés. L'appariement par recouvrement temporel est la vraie réponse : deux sous-titres vont ensemble quand leurs intervalles se croisent au-delà d'un certain seuil. Il faut ce seuil, parce que le sous-titre du traducteur commence souvent une fraction plus tard, et parce qu'un sous-titre long dans une langue peut en recouvrir deux courts dans l'autre, ce qui oblige à choisir entre l'apparier au recouvrement le plus long et l'apparier aux deux.

Ce que ce fusionneur fait à la place : entrelacer et concaténer

Le mode « superposer » prend la liste de sous-titres du premier fichier, celle du second, les met bout à bout et trie l'ensemble par temps de début. C'est tout. Aucun sous-titre n'est jamais combiné à un autre, aucun texte n'est joint, aucun seuil n'est appliqué. Lance-le sur l'exemple à quatre et trois ci-dessus : il renvoie sept sous-titres, numérotés de 1 à 7, alternant entre les deux langues là où les temps alternent. Le compteur sous la zone t'le dit avant même de faire défiler : sept, pas quatre.

Ce n'est pas inutile, et il faut être juste sur les cas où cela fonctionne. Si les deux pistes ont été calées sur le même master — le cas normal d'une édition sous-titrée professionnellement, où le traducteur travaille à partir du repérage d'origine — les temps de début seront souvent identiques, et des temps de début identiques gardent chaque paire côte à côte dans la sortie. Le tri conserve l'ordre de lecture des sous-titres, si bien que la ligne du premier fichier passe en premier à chaque égalité, et tu obtiens un fichier qui alterne de langue de façon fiable. Testé sur deux pistes aux temps identiques, quatre sous-titres chacune, la sortie compte huit sous-titres en paires strictes premier-fichier-puis-second.

La fiabilité s'arrête dès que les temps sont seulement proches au lieu d'être égaux. Donne à la piste française un départ retardé de quarante millisecondes sur chaque ligne : les paires restent côte à côte, l'anglais toujours en premier. Donne-lui un départ avancé de quarante millisecondes sur une seule ligne et cette paire s'inverse : la ligne française devient le sous-titre 1 et l'anglaise le 2, tandis que le reste du fichier garde l'ordre inverse. Lire une piste bilingue dont l'ordre des langues change sans prévenir est pire que lire deux fichiers séparés ; avant d'utiliser une sortie « superposer » pour apprendre, vérifie donc quelques paires réparties sur le film, pas seulement la première.

Le mode « à la suite » est un outil différent pour un travail différent : joindre les sous-titres d'un film livré en deux fichiers. Il calcule le plus grand temps de fin du premier fichier, y ajoute l'écart que tu saisis, et ajoute ce total à chaque horodatage du second fichier. Le piège est qu'il ajoute aux horodatages propres du second fichier au lieu de les remplacer. Si ta seconde partie est déjà calée à partir de zéro, tout est juste. Si elle a été découpée dans un fichier plus long et que son premier sous-titre se trouve à 00:10:00, tu obtiens 00:10:13 au lieu de 00:00:13 — l'outil a été testé exactement là-dessus et a produit un trou de dix minutes. Remets d'abord le second fichier à zéro avec l'outil de décalage, puis enchaîne.

Deux sous-titres dans la même fenêtre, et pourquoi personne ne peut te dire ce qui se passe

Une sortie « superposer » contient couramment deux sous-titres consécutifs aux temps de début et de fin identiques — c'est exactement l'allure d'une paire bilingue une fois l'outil passé. Ce qu'un lecteur en fait n'est spécifié nulle part, puisque SubRip n'a pas de spécification où le spécifier. La Bibliothèque du Congrès ne liste aucun document de spécification pour ce format. Le conteneur Matroska, lorsqu'il absorbe du SubRip, garde le temps de début comme horodatage de bloc et la durée comme durée de bloc, et rien d'autre : il n'existe pas de réglages généraux pour ce codec, si bien que le conteneur transporte le texte et le temps et n'a aucun champ où consigner une préférence sur les recouvrements.

En pratique, les lecteurs diffèrent, et la seule procédure fiable est de tester le vôtre sur un échantillon de trente secondes avant de t'engager sur un film entier. Certains moteurs de rendu empilent les entrées simultanées en lignes séparées ; certains affichent la dernière chargée et masquent l'autre ; certains en suppriment une sans le dire. Aucun n'a tort, car il n'y a rien sur quoi avoir tort. Ne transporte pas une hypothèse d'un lecteur de bureau vers un téléphone, une application de télévision ou une page web : les chemins de rendu diffèrent, et un fichier bilingue correct sur un portable peut n'afficher qu'une langue sur un décodeur.

La question voisine — où chaque langue apparaît à l'écran — a une réponse plus courte : tu ne peux pas la contrôler depuis un fichier SRT, parce que SubRip n'a aucun positionnement. La mise en forme du programme d'origine se limitait au gras, à l'italique, au souligné et à la couleur, hérités des balises HTML, et rien dans le format ne traite du placement. WebVTT est l'inverse : sa ligne d'horodatage peut porter une liste de réglages avec alignement, ligne et position, et il définit des blocs REGION entiers pour les zones de défilement. Si le placement compte pour ta piste bilingue, c'est une raison de travailler en WebVTT et non en SubRip.

Comment obtenir vraiment deux langues dans un même sous-titre

Le résultat que tu veux probablement, c'est un sous-titre par moment portant deux lignes, l'original au-dessus et la traduction en dessous. C'est une opération de texte : les deux chaînes doivent finir dans le même corps de sous-titre, séparées par un retour à la ligne. La voie tentante sur ce site est l'aller-retour par tableur — exporter la première piste avec le convertisseur SRT vers CSV, coller la seconde langue dans une colonne voisine, construire une colonne de texte combinée, et reconstruire le fichier avec le convertisseur CSV vers SRT. Cette voie fonctionne de bout en bout, et le paragraphe suivant explique pourquoi on peut lui confier un film entier.

Les deux moitiés sont correctes. Un sous-titre contenant un retour à la ligne est écrit comme un champ CSV entre guillemets avec un vrai saut de ligne à l'intérieur, la forme que décrit la RFC 4180 et celle qu'un tableur ouvre comme une cellule unique ; le convertisseur CSV vers SRT lit le fichier comme des enregistrements CSV et non comme des lignes de texte, si bien qu'un saut de ligne ne termine un enregistrement que s'il tombe hors des guillemets. Testé avec un sous-titre bilingue fabriqué à la main, « I told you. » au-dessus de « Je te l'avais dit. », l'aller-retour renvoie les deux lignes dans le même sous-titre, et un fichier mêlant des sous-titres d'une, deux et trois lignes revient identique à l'octet près.

La recette pratique est donc celle-ci. Exporte la première piste, colle la seconde langue dans une colonne libre, et construis une colonne de texte combinée qui place un vrai saut de ligne dans la cellule entre les deux — Alt+Entrée dans Excel sous Windows, le raccourci propre à ton tableur ailleurs, et non une barre oblique inverse suivie d'un n. Recolle les quatre colonnes dans le convertisseur CSV vers SRT et les sous-titres ressortent avec l'original au-dessus et la traduction en dessous. Garde la colonne d'index pendant le travail : l'import reconstruit dans son ordre, si bien qu'une feuille triée en cours de route te rend tout de même un fichier chronologique. Ce qu'il faut surveiller, c'est le tableur et non les outils — il peut retyper une colonne d'horodatages dès l'ouverture du fichier : importe plutôt que de double-cliquer, et règle les deux colonnes de temps sur Texte. Si tu préfères ne pas passer par un tableur du tout, coller les deux pistes côte à côte dans un éditeur de texte et les joindre à la main reste la voie la plus courte pour une poignée de sous-titres.

Quatre façons de combiner deux pistes de sous-titres, et ce que chacune donne à partir de 4 sous-titres anglais et 3 français
StratégieComment elle décide ce qui va avec quoiRésultat sur l'exempleDisponible ici ?
Appariement par indexLe sous-titre n d'un fichier avec le n de l'autreJuste jusqu'à la divergence des comptes, faux ensuite jusqu'à la finNon
Appariement par recouvrement temporelDes intervalles qui se croisent au-delà d'un seuil choisi3 ou 4 sous-titres combinés, selon le seuilNon
Entrelacement (cet outil, mode « superposer »)Les deux listes mises bout à bout, puis triées par temps de début7 sous-titres distincts, une langue chacun, paires seulement quand les débuts coïncidentOui
Concaténation (cet outil, mode « à la suite »)Le second fichier est repoussé après la fin du premier, plus un écart7 sous-titres joués l'un après l'autre — pour deux parties de vidéo, pas deux languesOui
Appariement à la main dans un éditeur de texteTu décides, en lisant les deux fichiers côte à côte4 sous-titres, chacun portant deux lignes — le résultat bilingueNon automatisé par le fusionneur — à faire dans un éditeur, ou via l'aller-retour CSV
Fusionneur de sous-titres SRTCombine deux fichiers de sous-titres SRT en un seul, proprement renuméroté. Le mode « à la suite » décale le second fichier pour démarrer après la fin du premier, plus un écart facultatif — idéal pour joindre les sous-titres de deux parties de vidéo. Le mode « superposer » garde les temps d'origine et trie chaque sous-titre chronologiquement, pour fusionner deux pistes.Essayer l'outil

Questions fréquentes

Le fusionneur apparie-t-il le sous-titre 12 avec le 12, ou utilise-t-il les horodatages ?
Ni l'un ni l'autre, car il n'apparie pas du tout. Le mode « superposer » concatène les deux listes de sous-titres et trie le résultat par temps de début ; le mode « à la suite » ajoute un décalage à la seconde liste et la place après la première. Dans les deux cas, chaque sous-titre des deux fichiers survit comme un sous-titre distinct, garde une seule langue, et est renuméroté dans la sortie. Quatre sous-titres anglais et trois français donnent sept sous-titres, pas quatre sous-titres combinés, et le compteur affiché sous la zone de saisie le dit avant même de faire défiler. L'appariement par index serait de toute façon faux ici — les comptes divergent dès qu'un traducteur réunit deux courtes lignes en une — et l'appariement par recouvrement temporel, qui est la bonne approche, exige un seuil pour lequel cet outil n'a aucun champ. Ce que « superposer » te donne, quand les deux pistes ont été repérées sur le même master, c'est un fichier où chaque paire de sous-titres est côte à côte, car les temps de début égaux se trient ensemble et l'ordre de lecture est conservé.
J'ai fusionné 4 sous-titres anglais et 3 français et j'en obtiens 7. Est-ce un bug ?
Non, c'est le sens même de l'entrelacement, et sept est la réponse arithmétiquement correcte pour une opération qui ne combine rien. L'outil fait exactement ce qu'il annonce — fusionner deux fichiers en un seul, renuméroté — et « fusionner des fichiers » n'est pas la même opération que « fusionner des sous-titres ». Si tu attendais quatre sous-titres portant chacun deux langues, tu attendais une étape d'appariement que cet outil ne contient pas. Lis la sortie à sept sous-titres comme une piste de lecture entrelacée plutôt que bilingue : partout où les deux pistes sources avaient le même calage, tu verras les deux lignes se suivre, ce qui est exploitable pour apprendre ; partout où les calages diffèrent, une langue apparaîtra simplement seule. S'il te faut un vrai fichier bilingue, les deux textes doivent finir dans un même corps de sous-titre séparés par un retour à la ligne, et l'on y arrive soit dans un éditeur de texte, soit par l'aller-retour CSV, qui ramène désormais un sous-titre sur deux lignes intact.
Que fait un lecteur avec deux sous-titres occupant exactement la même fenêtre ?
Il n'existe pas de réponse valable partout, et c'est un fait sur le format plutôt qu'une lacune de cet article. SubRip n'a pas de spécification : la fiche de la Bibliothèque du Congrès ne liste aucun document de spécification et décrit le format comme partiellement documenté et mal normalisé. Rien ne définit donc ce qu'un moteur de rendu devrait faire quand deux entrées revendiquent le même intervalle. Certains les empilent en lignes séparées, certains n'en affichent qu'une, certains en suppriment une sans le dire, et le même fichier peut se comporter différemment dans un lecteur de bureau, une application mobile et un navigateur, car les chemins de rendu diffèrent. Le conteneur n'aide pas davantage : quand du SubRip est intégré dans du Matroska, le temps de début devient l'horodatage du bloc et la longueur devient une durée de bloc, et comme il n'existe pas de réglages généraux pour ce codec, il n'y a nulle part où consigner une préférence. Teste un échantillon de trente secondes dans le lecteur que tu utiliseras vraiment, et là plutôt qu'ailleurs par commodité.
Puis-je placer l'original en haut de l'écran et la traduction en bas ?
Pas depuis un fichier SRT, car SubRip n'a aucun positionnement. La mise en forme gérée par le programme d'origine se limitait au gras, à l'italique, au souligné et à la couleur, hérités des balises HTML, et rien n'y traite du placement ; le conteneur Matroska confirme la même chose de l'autre côté, en stockant un sous-titre SRT comme du texte plus un horodatage plus une durée, et en laissant vides les données privées du codec, faute de réglages généraux à consigner. La commande {\an8} que l'on croise parfois dans les fichiers rippés appartient à un autre format et ne fonctionne que dans les lecteurs qui veulent bien l'honorer. Ce que tu contrôles, c'est l'ordre des lignes à l'intérieur d'un même sous-titre, ce qui suppose de mettre les deux langues dans le même sous-titre et d'accepter le placement que le lecteur choisira pour le bloc entier. Si le placement compte vraiment, utilise plutôt WebVTT : sa ligne d'horodatage accepte une liste de réglages comprenant alignement, ligne et position, et il définit des blocs REGION pour les zones de défilement — un placement réel et spécifié, et non une convention.
Quand le mode « à la suite » est-il le bon choix, et quel piège recèle-t-il ?
C'est le bon choix pour un travail : un film livré en deux fichiers vidéo, avec un fichier de sous-titres chacun. L'outil trouve le plus grand temps de fin du premier fichier, y ajoute l'écart que tu saisis en secondes, et ajoute ce total à chaque horodatage du second, si bien que la seconde partie démarre proprement après la première. Le piège est qu'il ajoute aux horodatages existants du second fichier au lieu de les remplacer. C'est correct quand le second fichier est calé à partir de zéro, ce qui est le cas habituel lorsque les deux parties ont été sous-titrées séparément. C'est faux quand le second fichier a été découpé dans un plus long et porte encore ses positions d'origine : testé avec un second fichier dont le premier sous-titre était à 00:10:00, l'ajout après une première partie de 12 secondes avec un écart de 1 seconde l'a placé à 00:10:13 et non à 00:00:13, laissant dix minutes de silence au milieu du résultat. La correction prend trente secondes — décale le second fichier de moins son propre premier horodatage avant de fusionner — mais rien ne te prévient : vérifie donc le premier sous-titre de la seconde moitié dans la sortie.

Articles qui pourraient t'intéresser

Tous les guides
TutorielSous-titres décalés : mesurer l'écart et décaler un SRT d'un nombre exact de secondesMesure 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.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.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.ExplicationMP3, WAV, FLAC : ce que chaque conversion détruit réellementL'un de ces formats stocke les échantillons, un autre les mêmes échantillons compressés, le troisième une supposition sur ce que tu aurais entendu. Quelles conversions entre eux sont gratuites, lesquelles sont seulement coûteuses, et lesquelles sont des portes à sens unique — avec l'arithmétique de chacune.ExplicationNormalisation de crête contre normalisation de sonie, et la cible qu'on ne peut pas atteindreAmplifier jusqu'à ce que l'échantillon le plus fort touche un plafond ne change presque rien à la sensation de force sonore. Mesurer en LUFS, si. Cet outil mesure — en deux passes, correctement — puis affiche un résultat qu'il n'a jamais vérifié, et qui sur du matériel ordinaire peut s'écarter de bien plus d'un décibel.TutorielRetirer le son d'une vidéo sans toucher à l'imageUne seule commande ffmpeg, aucun encodeur, et un résultat dont le flux vidéo est octet pour octet celui du départ — vérifié par somme de contrôle. Plus la raison pour laquelle le fichier ne rétrécit presque pas, et la différence entre une piste silencieuse et pas de piste du tout.

Outils similaires

Fusionneur de sous-titres SRTCombine deux fichiers de sous-titres SRT en un seul, proprement renuméroté. Le mode « à la suite » décale le second fichier pour démarrer après la fin du premier, plus un écart facultatif — idéal pour joindre les sous-titres de deux parties de vidéo. Le mode « superposer » garde les temps d'origine et trie chaque sous-titre chronologiquement, pour fusionner deux pistes.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.Convertisseur SRT vers CSVConvertis un fichier de sous-titres SRT en un CSV prêt pour tableur, avec des colonnes index, début, fin et texte. Les champs contenant des virgules ou des retours à la ligne sont correctement mis entre guillemets selon la norme CSV, pour un ouverture propre dans Excel, Sheets ou Numbers. Copie ou télécharge le fichier.Convertisseur CSV vers SRTReconstruis un fichier de sous-titres SRT valide à partir d'un CSV index, début, fin et texte. Les temps acceptent le format hh:mm:ss,mmm ou un simple nombre de secondes, une ligne d'en-tête est ignorée automatiquement, et les sous-titres sont renumérotés dans l'ordre. Idéal pour retransformer un tableur traduit ou édité en sous-titres.

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 ?