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 — Développeur front-end et rédacteur Tech chez OneKitly
Performance web · Formats de fichiers
Vérifié à partir de 3 sources
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.
| Élément | Comment il apparaît dans le fichier | Ce que fait le convertisseur | Ce qui te reste à faire |
|---|---|---|---|
| Numéro et ligne d'horodatage | 1 / 00:00:01,000 --> 00:00:04,000 | Retirés | Rien |
| En-tête WebVTT, blocs NOTE, STYLE, REGION | WEBVTT / NOTE Transcrit le 11-02-2026 | Retirés | Rien |
| Identifiant et réglages de repère | hello-1 / align:start position:10% | Retirés | Rien |
| Balises d'italique, de gras et de couleur | <i>…</i>, <b>…</b>, <font color="#ffff00">…</font> | Conservées telles quelles | Retire les balises appariées avant les chevrons |
| Commande de position et descriptions sonores | {\an8}, [MOUETTES], [MUSIQUE] | Conservées telles quelles | Supprime 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 quels | Convertis-les en indications de locuteur utiles |
| Une phrase répartie sur deux sous-titres | Le sous-titre 1 s'arrête en pleine proposition, le 2 commence en minuscule | Deux lignes distinctes, dans les deux modes | Joins à la main : pas de ponctuation à la fin, pas de majuscule au début |
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 →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
- W3C — WebVTT: The Web Video Text Tracks Format, Candidate Recommendation Draft of 20 May 2026 — defines the WEBVTT header, NOTE comment blocks, STYLE blocks, REGION definition blocks, the optional cue identifier, the cue settings list after the arrow, and the cue voice span whose start tag v carries an annotation naming the speaker
- Library of Congress — Sustainability of Digital Formats, FDD000569, SubRip Subtitle format (SRT): describes the four components of a cue — counter, start and end time separated by two hyphens and a right angle bracket, one or more lines of text, blank line — and records that the SubRip software supported a limited set of text formatting derived from HTML tags including bold, italic, underline and colour
- Matroska — Subtitles technical page: when SRT is muxed into Matroska the cue text is converted to UTF-8 as S_TEXT/UTF8 and placed in the block, and because there are no general settings for SRT the CodecPrivate is left blank — the container carries the text and the timing, and nothing else
Tu as repéré une erreur dans cet article ?