Comment créer des sous-titres bilingues : deux langues dans un seul fichier SRT ou VTT
Créez un fichier SRT ou VTT bilingue lisible : fusionnez par horodatage, faites tenir deux langues dans un même sous-titre, choisissez celle qui s'affiche en haut et utilisez un vérificateur gratuit.

Pour créer des sous-titres bilingues, il vous faut un fichier de sous-titres synchronisé, une traduction de ce fichier qui conserve la même synchronisation, et un sous-titre pour chaque instant qui contient les deux langues : les lignes originales d'abord, puis les lignes traduites, sous un même horodatage. Tout traducteur qui produit un fichier double le fait pour vous, et un outil de fusion le fait si vous avez déjà deux fichiers. Le format SRT standard ne nécessite aucune syntaxe particulière pour cela.
Créer le fichier est la partie facile. La difficulté vient du fait que la synchronisation a été conçue pour une seule langue. Un sous-titre qui tient sur deux lignes d'anglais doit maintenant contenir quatre lignes, dans les mêmes quelques secondes, sur la même image. C'est pourquoi ce guide consacre l'essentiel de son propos à ce qu'il faut corriger après la fusion.
Nous avons rédigé un fichier de test de 12 sous-titres, produit des versions en espagnol, en chinois et en arabe, et écrit un vérificateur gratuit. Les fichiers proviennent du code de génération de sous-titres de BookTranslator, exécuté localement. Nous avons rédigé les traductions à la main plutôt que de faire appel à un modèle, afin que ces tests montrent ce qui arrive au fichier, et non la qualité d'une traduction. Le README contient les détails. Le vérificateur nécessite Python 3 et rien d'autre.
Réponse rapide : à quoi ressemble un sous-titre bilingue
2
00:00:03,400 --> 00:00:06,600
There's another one at six,
but the station closes at midnight.
Hay otro a las seis,
pero la estación cierra a medianoche.
C'est du SRT valide. Chaque sous-titre conserve son numéro et son horodatage, et chaque ligne de texte sous l'horodatage s'affiche à l'écran en même temps. WebVTT fonctionne de la même manière.
Choisissez d'abord la configuration
| Vous voulez | Utilisez | Pourquoi |
|---|---|---|
| Regarder dans presque n'importe quel lecteur, ou envoyer un seul fichier à quelqu'un | Un SRT fusionné | C'est un fichier de sous-titres ordinaire, sans nécessiter de fonctionnalité du lecteur |
| Regarder sur votre propre ordinateur avec un contrôle sur chaque langue | Deux fichiers séparés dans un lecteur compatible avec deux pistes | Chaque langue conserve sa propre synchronisation et peut être déplacée ou désactivée |
| Afficher les langues dans des tailles différentes sur une page web | Un VTT avec une classe pour chaque langue | WebVTT prend en charge le style ; SRT n'a pas de moyen standard de le faire |
| Publier une vidéo qui s'affiche de la même manière partout | Sous-titres incrustés | Le texte fait partie de l'image et les spectateurs ne peuvent pas le désactiver |
Pour deux pistes, mpv propose une option --secondary-sid. Son manuel indique que la deuxième piste est dessinée en haut de l'écran par défaut, ce qui sépare les langues. Nous n'avons pas testé mpv nous-mêmes.
Pour l'incrustation, le filtre subtitles de FFmpeg nécessite une compilation avec libass. La version 9.0.1 de FFmpeg que nous avons installée pour ce test ne l'avait pas, alors exécutez ffmpeg -filters | grep subtitles avant de compter dessus. Nous n'avons pas testé l'incrustation.
Étape 1 : Réunir deux langues dans un seul fichier
Si vous avez un seul fichier, traduisez-le avec un outil qui génère un fichier double. BookTranslator le fait pour chaque tâche SRT et VTT : vous obtenez un fichier traduit et un fichier bilingue avec les mêmes horodatages, et vous pouvez commencer sur le traducteur de sous-titres. Si vous devez d'abord choisir un outil, consultez notre comparatif de logiciels de sous-titres.
Si vous avez deux fichiers, appariez-les par temps, pas par numéro de sous-titre. C'est là que la fusion échoue, car deux pistes d'une même vidéo découpent rarement leurs lignes de la même façon. Notre seconde piste espagnole coupe deux sous-titres longs en deux et omet l'effet sonore, l'année et la musique.
python3 check_bilingual_subs.py merge sample-source.srt sample-es-own-timing.srt -o merged.srt
L'appariement par numéro de sous-titre (l'option --index du script) a produit 10 erreurs sur 12 sous-titres, à partir du sous-titre 2, où la moitié de l'espagnol manquait. Au sous-titre 3, la traduction correspondait à une autre ligne :
3
00:00:06,800 --> 00:00:08,000
So where do we wait?
pero la estación cierra a medianoche.
L'appariement par temps a donné la bonne traduction sous 9 sous-titres, a laissé seuls les 3 sous-titres sans espagnol et a signalé la seule ligne espagnole qui ne correspondait à rien, pour que vous puissiez la placer à la main. Le script attribue un sous-titre de la seconde piste au sous-titre de la première piste avec lequel il chevauche le plus, à condition que ce chevauchement couvre au moins la moitié de sa longueur. Des outils comme submerger fusionnent aussi des fichiers ; nous ne les avons pas testés. Quel que soit l'outil utilisé, vérifiez les sous-titres après la première coupure.
Étape 2 : Vérifier le fichier
python3 check_bilingual_subs.py check sample-source.srt sample-es-bilingual.srt --max-target-cps 17
Il compare le fichier bilingue à la source et suppose que les lignes originales viennent en premier, alors exécutez-le avant d'inverser l'ordre. Il vous avertit si les lignes du haut ne correspondent pas à la source. Voici ce qu'il a trouvé dans le fichier espagnol :
| Sous-titre | Secondes | Lignes | Caractères/s original | Caractères/s espagnol | Problème |
|---|---|---|---|---|---|
| 2 | 3.2 | 4 | 19.4 | 17.8 | Quatre lignes, espagnol trop rapide |
| 5 | 2.7 | 2 | 6.7 | 7.0 | ' dans le texte |
| 7 | 1.0 | 2 | 4.0 | 4.0 | Même texte deux fois |
| 8 | 1.8 | 2 | 1.7 | 1.7 | Même texte deux fois |
| 9 | 1.2 | 4 | 20.8 | 22.5 | Quatre lignes, les deux langues trop rapides |
| 10 | 3.6 | 2 | 18.3 | 19.4 | Les deux lignes dépassent 42 caractères, espagnol trop rapide |
Les sous-titres 6 et 12 sont aussi revenus avec quatre lignes. Les quatre autres sous-titres étaient corrects.
Les limites de vitesse et de longueur de ligne viennent de Netflix, car ses chiffres sont publics et précis, et ils varient selon la langue. Son guide anglais autorise 42 caractères par ligne, deux lignes et jusqu'à 20 caractères par seconde pour les programmes pour adultes. Son guide espagnol latino-américain autorise 17 caractères par seconde pour les sous-titres traduits, et son guide chinois simplifié autorise 16 caractères par ligne et 9 par seconde. Utilisez donc --max-target-line 16 --max-target-cps 9 pour le chinois. Ces guides ne couvrent qu'une langue à la fois, avec deux lignes au maximum. Nous ne connaissons aucune norme équivalente pour deux langues dans un même sous-titre, donc la valeur par défaut du vérificateur de trois lignes à l'écran, et tout ce qui suit dans la section suivante, relève de notre jugement.
Le vérificateur affiche aussi un nombre combiné, qui a atteint 43,3 caractères par seconde au sous-titre 9. N'essayez pas de corriger ce nombre. Personne ne lit chaque caractère des deux langues avec une attention totale. Considérez-le comme une indication des sous-titres à surveiller.
Étape 3 : Corriger les sous-titres à quatre lignes
Voici ce que coûtent quatre lignes. Dans l'affichage de sous-titres intégré de Chromium à 1280x720, le sous-titre anglais sur deux lignes occupait 10,6 % de la hauteur de l'image, et le même sous-titre avec l'espagnol ajouté en occupait 21,9 %.


Parcourez les sous-titres signalés dans cet ordre :
- Conservez mot pour mot la langue audio. Si les gens écoutent l'original et suivent en texte, un original raccourci ne correspond plus à ce qu'ils entendent.
- Réduisez l'autre langue à une ligne. Notre sous-titre 2 passe de 17,8 caractères par seconde à 13,1 lorsque l'espagnol devient
A las seis hay otro; cierran a medianoche.Cela fait trois lignes à l'écran au lieu de quatre, et cela conserve les deux faits. - N'ajoutez du temps que s'il y a un espace. Vérifiez le début du sous-titre suivant avant de déplacer une heure de fin. Le sous-titre 2 dispose de 0,2 seconde de marge, ce qui ne vaut pas l'effort.
- Ensuite, laissez le reste tranquille. Le sous-titre 9 est
You knew?/Since March.en 1,2 seconde. Il dépasse les limites de vitesse et de lignes, mais nous le laisserions : l'écart de 0,2 seconde qui le suit est trop court pour aider, et un spectateur peut probablement saisir deux courtes répliques d'un coup d'œil. Tous les signalements ne sont pas des bugs.
Pour les longues lignes uniques comme le sous-titre 10, ne divisez chaque langue en deux lignes que si le sous-titre en a le temps. Sinon, raccourcissez la traduction.
Si vous contrôlez l'affichage, vous pouvez aussi rendre une langue plus facile à repérer. Exécutez to-vtt pour donner à chaque langue sa propre classe. Le fichier résultant rendu dans Chromium avec l'anglais à 80 % de sa taille et en gris clair. Cela ne gagne presque pas de place (21,1 % de la hauteur de l'image au lieu de 21,9 %), ce n'est donc pas un remplacement pour couper une ligne. Nous n'avons pas testé si cela aidait les gens à lire.

Cela utilise les classes de sous-titres WebVTT et le sélecteur ::cue(). C'est destiné aux navigateurs. D'autres lecteurs peuvent ignorer les styles ou le fichier VTT.
Étape 4 : Décidez quelle langue mettre en haut
Il existe des recherches à ce sujet. Dans une étude de suivi oculaire de 2026 portant sur 42 hispanophones natifs ayant l'anglais comme langue seconde, les spectateurs passaient plus de temps sur la ligne du haut, quelle que soit la langue, et plus de temps sur la ligne correspondant à l'audio. Les scores de compréhension étaient plus élevés avec l'espagnol, leur langue maternelle, en haut. Une étude antérieure menée auprès de 112 apprenants chinois d'anglais a montré que les sous-titres bilingues aidaient autant à la compréhension que les sous-titres dans leur langue maternelle seule, et que les deux surpassaient les sous-titres anglais ou l'absence de sous-titres.
Il s'agit d'études uniques portant sur des groupes spécifiques de spectateurs, alors prenez-les comme point de départ :
- Suivre un film ou une conférence pour son contenu : mettez en haut la langue que vous lisez le mieux.
- Pratiquer une langue que vous apprenez : mettez cette langue en haut et acceptez de peut-être comprendre un peu moins. La compréhension est ce que l'étude de 2026 a mesuré, pas l'apprentissage ; ce choix relève donc de notre jugement.
- Relire une traduction : l'ordre importe peu, alors laissez-le tel quel.
Le fichier bilingue de BookTranslator place toujours l'original en haut. Pour l'inverser :
python3 check_bilingual_subs.py flip sample-source.srt sample-es-bilingual.srt -o translation-on-top.srt
Ce qui revient erroné, et comment le corriger
Ces problèmes proviennent de l'exécution du code de sous-titres de BookTranslator sur nos fichiers de test, et le vérificateur signale les deux premiers.
- Le texte qui n'a pas besoin d'être traduit apparaît deux fois.
1984et♪ ♪sont ignorés car ils n'ont pas de mots à traduire, donc le fichier bilingue imprime chacun deux fois. Supprimez une ligne à la main. 'peut apparaître dans le texte. Depuis novembre 2026, un sous-titre contenant des balises de mise en forme et une apostrophe peut revenir avec l'apostrophe échappée. Notre ligne originale est devenue<i>Don't answer that.</i>dans le fichier bilingue, et dans un test VTT séparé, une traduction française est devenue<i>Je n'attendrai pas.</i>dans le fichier traduit également. Chromium l'a décodé en VTT et a affiché une apostrophe normale. Mais lorsque nous avons converti le SRT avec FFmpeg, le'est resté dans le texte de sortie, donc supposez que certains lecteurs l'afficheront littéralement. Remplacez'par'avant d'utiliser le fichier. Nous avons signalé cela à nos ingénieurs.- Les paramètres de sous-titres VTT sont supprimés. Les paramètres de position tels que
line:0 align:start position:10%et les blocsNOTEavaient disparu de notre sortie de test VTT, et les étiquettes de locuteur apparaissaient sur les deux lignes. Si votre VTT dépend du placement, rajoutez-le après la traduction. - Le texte de droite à gauche est balisé ligne par ligne. Les lignes en arabe sont revenues entourées de marques de direction Unicode. Nous n'avons examiné qu'un seul sous-titre, dans une copie VTT du fichier sous Chromium, et il s'affichait de droite à gauche. Les lignes qui mélangent l'arabe et des chiffres, comme notre sous-titre 10, sont le cas le plus difficile et nous ne les avons pas visualisées, alors testez dans votre lecteur réel. SRT n'offre aucun autre moyen de définir la direction. Notre guide pour les langues de droite à gauche aborde les problèmes plus généraux pour les livres.
Si votre source est au format ASS ou SSA, la sortie bilingue de BookTranslator ajoute la ligne traduite comme un second événement avec le même style et le même minutage, ce qui constitue une structure différente. Notre guide des sous-titres ASS explique comment ces fichiers sont construits. Si les caractères accentués semblent cassés dans l'une ou l'autre langue, le problème vient généralement de l'encodage du fichier, ce que couvre notre guide de l'encodage des sous-titres.
Avant de partager le fichier
- Lancez le vérificateur et parcourez chaque sous-titre signalé.
- Recherchez
',&et"et remplacez-les. - Supprimez les lignes en double sur les effets sonores, les nombres et la musique.
- Regardez les quelques minutes les plus chargées dans le lecteur que vos spectateurs utiliseront, sur la taille d'écran qu'ils utiliseront.
- Vérifiez que les lignes du bas ne masquent pas le texte à l'écran dans la vidéo.
- Lisez la traduction dans son contexte. Notre flux de travail pour les sous-titres par IA explique comment la relire.
Vous avez un SRT ou un VTT prêt ? Téléversez-le dans le traducteur de sous-titres et consultez le prix avant de payer. Une fois terminé, téléchargez le fichier bilingue ainsi que le fichier traduit. Lancez ensuite le vérificateur dessus, car le nombre de lignes dans un vrai travail dépend de la façon dont le modèle découpe chaque sous-titre traduit.
Articles connexes





