Aller au contenu
OneKitly

SRT vers texte : obtenir une transcription propre à partir de sous-titres

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

Voir le profil
En bref

Ce convertisseur retire exactement deux choses : le numéro du sous-titre et la ligne d'horodatage. Tout ce qui se trouve entre l'horodatage et la ligne vide passe intact, ce qui est un choix délibéré et aussi ce que l'on comprend le plus souvent de travers. Donne-lui un fichier de sous-titres et les balises d'italique survivent en <i>…</i>, les balises de couleur en <font color="#ffff00">, la commande de positionnement en {\an8}, les descriptions sonores en [MOUETTES], les tirets de dialogue sous forme d'un tiret suivi d'une espace, et dans un fichier WebVTT les balises de voix survivent en <v Roger Bingham>, avec les balises de classe et les horodatages en ligne <00:00:07.500> utilisés pour le surlignage mot à mot. Ce qu'il gère bien, côté WebVTT, c'est la structure autour des sous-titres : l'en-tête WEBVTT, les blocs de commentaire NOTE, les blocs STYLE, les blocs REGION, les identifiants de repère et la liste de réglages après la flèche sont tous supprimés. La seconde chose à savoir concerne l'option de fusion. « Fusionner chaque sous-titre sur une seule ligne » joint les lignes à l'intérieur d'un sous-titre ; elle ne joint jamais une phrase répartie sur deux sous-titres, et rien dans le fichier ne le permettrait — une coupure de sous-titre décide de la quantité de texte à l'écran, pas d'une fin de phrase. Une ligne « Le problème avec le port » suivie d'un sous-titre « c'est qu'il n'a jamais vraiment gelé » ressort en deux lignes dans les deux modes. Les sous-titres défilants qui répètent une ligne ne sont pas dédoublonnés non plus. Prévois une passe de rechercher-remplacer pour le balisage et une relecture pour les jointures.

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

La moitié facile : numéros, horodatages, lignes vides

Un fichier SubRip, ce sont quatre choses répétées : un compteur, une ligne d'horodatage, une ou plusieurs lignes de texte, et une ligne vide qui ferme le bloc. Trois de ces quatre sont de l'échafaudage. Retire-les et tu as une transcription : c'est par là que commence tout convertisseur de sous-titres vers le texte, et c'est là qu'ils réussissent tous. Celui-ci lit chaque bloc, avance jusqu'à trouver une ligne contenant la flèche, et garde tout ce qui suit jusqu'à la ligne vide. Le compteur est jeté qu'il soit ou non dans l'ordre, si bien qu'un fichier aux numéros dupliqués ou désordonnés se convertit sans problème.

Une conséquence à connaître : un sous-titre sans texte compte quand même comme un sous-titre. Certains encodeurs émettent un bloc vide pour faire disparaître un sous-titre de l'écran ; le convertisseur trouve sa ligne d'horodatage, conserve le rien qui suit, et la transcription s'ouvre sur deux lignes vides avant la première vraie phrase. Sans gravité, mais cela ressemble à un défaut de ton export plutôt qu'à une particularité de ta source : autant le reconnaître.

La moitié difficile : tout ce que le convertisseur laisse en place

Le texte de sous-titres n'est pas du texte brut. Le programme SubRip d'origine gérait un petit jeu de mises en forme héritées du HTML — gras, italique, souligné, couleur — et ces balises voyagent avec le fichier. Les fansubs et les rips en ajoutent d'autres : {\an8} pour remonter un sous-titre en haut de l'image quand il entrerait en collision avec un texte incrusté, et des descriptions sonores entre crochets comme [MOUETTES] ou [MUSIQUE], qui relèvent du sous-titrage pour sourds et malentendants. Deux locuteurs dans un même sous-titre sont conventionnellement marqués par un tiret et une espace en tête de chaque ligne. Rien de tout cela n'est retiré ici, et rien ne devrait l'être sans une décision de ta part : qu'une transcription conserve ou non ses descriptions sonores dépend entièrement de son usage.

WebVTT apporte son propre vocabulaire, et le traitement qu'en fait le convertisseur se scinde nettement en deux. La structure autour des sous-titres est gérée : la ligne d'en-tête WEBVTT, les blocs de commentaire NOTE, les blocs STYLE porteurs de CSS, les blocs REGION définissant des zones de défilement, l'identifiant facultatif situé au-dessus de la ligne d'horodatage et la liste de réglages qui peut suivre la flèche — alignement, position, ligne, région — sont tous retirés, car ils ne se trouvent jamais dans le corps du sous-titre. Le balisage à l'intérieur du corps, lui, n'est pas traité du tout. Une balise de voix, que la spécification définit comme une balise ouvrante v accompagnée d'une annotation nommant le locuteur, arrive dans ta transcription sous la forme du texte littéral <v Roger Bingham>. Les balises de classe arrivent en <c.yellow>…</c>. Le surlignage mot à mot arrive sous forme d'horodatages nus comme <00:00:07.500> plantés au milieu d'une phrase.

Le nettoyage relève du rechercher-remplacer et prend une minute, mais fais-le dans le bon ordre. Retire d'abord les balises appariées, car supprimer les seuls chevrons laisserait derrière du texte d'attribut orphelin. Décide ensuite du sort des crochets — à conserver pour une transcription d'accessibilité, à supprimer pour une source de traduction. Décide enfin des tirets, qui portent une vraie information dans un sous-titre à deux voix et ne sont que du bruit dans un sous-titre à une voix. Ce n'est qu'après cela qu'il vaut la peine de relire pour le sens.

Une phrase, deux sous-titres : la jointure qu'aucun outil ne peut faire à ta place

Les sous-titres sont coupés là où l'écran s'arrête, pas là où la phrase s'arrête. Une même proposition s'étale couramment sur deux sous-titres, et dans la transcription cela donne deux lignes qui se lisent comme des fragments. Le convertisseur propose une option de fusion, et il faut être précis sur ce qu'elle fusionne : la case joint les lignes à l'intérieur d'un sous-titre, si bien qu'un sous-titre sur deux lignes n'en fait plus qu'une. Elle ne joint pas, et ne peut pas joindre, d'un sous-titre à l'autre. Testé sur un fichier dont le premier sous-titre dit « Le problème avec le port » et le second « c'est qu'il n'a jamais vraiment gelé », les deux modes renvoient deux lignes distinctes.

Ce n'est pas tant un défaut qu'une limite de l'entrée. Rien dans un fichier SubRip ne marque la fin d'une phrase ; le seul signal disponible, c'est la ponctuation et les majuscules du texte lui-même, et les deux sont peu fiables d'une langue à l'autre. L'heuristique qui marche assez bien à la main est simple : joins un sous-titre au précédent quand celui-ci ne se termine pas par un point, un point d'interrogation, un point d'exclamation ou un guillemet fermant, et quand le suivant ne commence ni par une majuscule ni par un tiret de dialogue. Appliquée par une machine, cette règle massacre les substantifs allemands, les abréviations et les points de suspension ; appliquée par un lecteur qui connaît la langue, elle prend quelques minutes sur une transcription de long métrage.

L'autre désordre récurrent vient du sous-titrage en direct. Les sous-titres de diffusion défilent souvent : une ligne apparaît en bas, puis remonte quand la suivante arrive, et l'encodeur écrit les deux états comme deux sous-titres distincts ; la même phrase figure donc deux ou trois fois de suite dans le fichier. Le convertisseur ne dédoublonne pas — il n'a aucune raison de le faire, une réplique réellement répétée étant possible aussi — si bien qu'une transcription issue d'un direct peut ressortir à peu près deux fois trop longue. Y remédier suppose une relecture, et c'est le meilleur argument pour demander à ton fournisseur la version apparaissant d'un bloc plutôt que la version défilante.

SRT ou VTT : le même convertisseur deux fois

Il y a deux convertisseurs sur ce site, un pour SubRip et un pour WebVTT, et en pratique ils se comportent de façon identique. Tous deux lisent des blocs, tous deux ignorent ce qui n'a pas de ligne d'horodatage, tous deux suppriment les blocs NOTE et STYLE, tous deux acceptent une virgule ou un point avant les millisecondes, et tous deux acceptent un horodatage avec ou sans champ des heures. La seule différence formelle est que celui pour WebVTT reconnaît et saute nommément le bloc d'en-tête WEBVTT — et celui pour SubRip le supprime de toute façon, car un bloc d'en-tête ne contient pas de ligne d'horodatage et ne devient donc jamais un sous-titre. Testés côte à côte sur le même fichier WebVTT, les deux produisent une sortie identique octet pour octet.

C'est commode plutôt que négligent : tu peux coller l'un ou l'autre format dans l'une ou l'autre page et obtenir la même transcription, ce qui est bien ce que tu voulais. Cela signifie aussi qu'aucune des deux pages ne te dira que ton fichier est mal formé. Si la flèche manque ou est mal écrite sur une ligne d'horodatage, tout le bloc disparaît silencieusement de la sortie au lieu de déclencher une erreur, et le seul symptôme est un nombre de sous-titres inférieur à celui attendu. Ce nombre s'affiche sous la zone de saisie ; compare-le au dernier numéro de ton fichier avant de faire confiance au résultat.

Ce que le convertisseur retire et ce qu'il laisse dans ta transcription
ÉlémentComment il apparaît dans le fichierCe que fait le convertisseurCe qui te reste à faire
Numéro et ligne d'horodatage1 / 00:00:01,000 --> 00:00:04,000RetirésRien
En-tête WebVTT, blocs NOTE, STYLE, REGIONWEBVTT / NOTE Transcrit le 11-02-2026RetirésRien
Identifiant et réglages de repèrehello-1 / align:start position:10%RetirésRien
Balises d'italique, de gras et de couleur<i>…</i>, <b>…</b>, <font color="#ffff00">…</font>Conservées telles quellesRetire les balises appariées avant les chevrons
Commande de position et descriptions sonores{\an8}, [MOUETTES], [MUSIQUE]Conservées telles quellesSupprime la commande ; décide du sort des crochets
Tirets de dialogue et balises de voix- Tu l'as vu ? / <v Roger Bingham>Conservés tels quelsConvertis-les en indications de locuteur utiles
Une phrase répartie sur deux sous-titresLe sous-titre 1 s'arrête en pleine proposition, le 2 commence en minusculeDeux lignes distinctes, dans les deux modesJoins à la main : pas de ponctuation à la fin, pas de majuscule au début
Convertisseur SRT vers TXTExtrais la transcription brute d'un fichier de sous-titres SRT en retirant les numéros et les horodatages. Colle les sous-titres et récupère un texte propre — un sous-titre par bloc, ou fusionné sur une seule ligne — prêt à relire, traduire ou réutiliser. Copie ou télécharge le résultat.Essayer l'outil

Questions fréquentes

Retire-t-il les balises d'italique, les tirets de dialogue et les mentions [MUSIQUE] ?
Non. Il retire le numéro et la ligne d'horodatage, et laisse passer le reste exactement tel qu'écrit. Testé sur un fichier réunissant tous les cas courants, la sortie contient toujours <i>…</i>, <b>…</b>, <font color="#ffff00">…</font>, la commande de position de type ASS {\an8}, la description sonore [MOUETTES], les tirets de dialogue en tête de chaque ligne et — en entrée WebVTT — la balise de voix <v Roger Bingham>, les balises de classe comme <c.yellow>…</c> et les horodatages en ligne comme <00:00:07.500>. C'est un choix défendable, car la présence des descriptions sonores dans une transcription dépend de son usage : un document d'accessibilité les veut, une source de traduction non. Mais cela signifie que la conversion n'est qu'une étape sur deux. Prévois ensuite une passe de rechercher-remplacer, et retire des paires de balises complètes plutôt que les seuls chevrons, sous peine de laisser du texte d'attribut orphelin comme color="#ffff00" au milieu de ta prose.
Une phrase court sur deux sous-titres. Comment la ramener sur une seule ligne ?
Pas avec la case de fusion : elle joint les lignes à l'intérieur d'un sous-titre, pas deux sous-titres entre eux, et l'intitulé prête facilement à confusion. Vérifié sur un fichier où le sous-titre 1 s'arrête en pleine proposition et où le 2 la poursuit : le mode par blocs comme le mode fusionné renvoient deux lignes distinctes. La jointure doit être la vôtre, car rien dans le fichier ne la signale. La règle qui fonctionne est négative des deux côtés : joins un sous-titre au précédent quand ce dernier ne se termine pas par un point, un point d'interrogation, un point d'exclamation, un deux-points ou un guillemet fermant, et quand le sous-titre courant ne commence ni par une majuscule ni par un tiret de dialogue. Fais-le en relecture manuelle plutôt qu'en script : abréviations, points de suspension et, en allemand, substantifs capitalisés la mettent en défaut assez souvent pour qu'une passe automatique coûte plus à réparer qu'elle ne fait gagner.
Quelle est la différence entre le convertisseur SRT et le convertisseur VTT ?
En comportement observable, aucune. Ce sont la même routine avec un drapeau, et ce drapeau ne fait que rendre la version WebVTT capable de reconnaître nommément le bloc d'en-tête WEBVTT — que la version SubRip jette de toute façon, ce bloc n'ayant pas de ligne d'horodatage et ne devenant donc jamais un sous-titre. Les deux suppriment les blocs NOTE et STYLE, les deux acceptent une virgule ou un point avant les millisecondes, les deux acceptent un horodatage avec ou sans champ des heures, et les deux ignorent ce qui suit la flèche sur une ligne d'horodatage. Sur le même fichier WebVTT, les deux pages renvoient un texte identique. Utilise la page qui correspond à ton fichier, par confort mental, mais n'attends pas de la page VTT qu'elle nettoie les balises de voix ni de la page SRT qu'elle refuse un .vtt : ni l'un ni l'autre n'arrive. La seule chose à surveiller sur les deux pages est le nombre de sous-titres affiché sous la zone de saisie. Une ligne d'horodatage mal formée fait disparaître tout son bloc sans erreur, et un compte inférieur au dernier numéro de ton fichier en est le seul indice.
Pourquoi ma transcription répète-t-elle deux ou trois fois la même ligne ?
Parce que la source est un sous-titrage défilant. En direct, une ligne apparaît au bas d'une fenêtre de deux ou trois lignes puis remonte à l'arrivée de la suivante, et l'encodeur enregistre chaque état de la fenêtre comme un sous-titre à part entière. La même phrase figure donc dans des sous-titres consécutifs, parfois trois fois, et le fichier est un relevé fidèle de ce qui était à l'écran à chaque instant plutôt que de ce qui a été dit. Le convertisseur ne dédoublonne pas, et il ne devrait pas deviner : une réplique réellement répétée pour l'effet a exactement la même allure dans le fichier. Supprimer les répétitions relève de la relecture — trier les lignes pour les repérer détruirait l'ordre, fais-le donc dans la séquence. Si tu peux agir sur la source, demande des sous-titres apparaissant d'un bloc : chaque phrase n'est écrite qu'une fois et la transcription ressort propre.
Je veux le texte mais aussi les horodatages. Que dois-je utiliser ?
Pas ce convertisseur, qui retire les horodatages par conception et ne propose aucun moyen de les conserver. Utilise plutôt le convertisseur SRT vers CSV : il écrit une ligne par sous-titre avec un index, un début, une fin et le texte, si bien que les temps occupent leurs propres colonnes et que le texte reste lisible et cherchable. Cette forme est aussi celle qu'il te faut si la transcription doit être éditée ou traduite par quelqu'un d'autre, car elle garde chaque ligne rattachée au moment auquel elle appartient et peut être retransformée en fichier de sous-titres ensuite. Le texte brut est la bonne sortie quand la destination est de la prose — un résumé, un index de recherche, un document — et la mauvaise dès que quelqu'un en aval aura besoin de savoir quand une chose a été dite.

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.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.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.TutorielFaire passer une vidéo sous une limite d'envoi sans tâtonnerLe curseur de qualité ne sait pas viser une taille de fichier — ce n'est pas son rôle. Mais la limite et la durée de ton plan fixent déjà le débit auquel tu as droit, et une division te dit si la résolution que tu utilises peut seulement tenir.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é.

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 ?

SRT vers texte : obtenir une transcription propre à partir de sous-titres — OneKitly