Comment extraire le texte brut d'un fichier de sous-titres SRT ou VTT
Extraire le dialogue brut d'un fichier de sous-titres semble trivial jusqu'à ce que vous tombiez sur des numéros de cue, des horodatages et des phrases coupées en plein milieu. Voici comment bien faire les choses.
Les fichiers de sous-titres stockent trois éléments entremêlés : un numéro d’index, une plage temporelle et le texte proprement dit. Si tout ce que vous voulez, c’est le texte (pour une citation de blog, un article, un index de recherche, ou pour l’envoyer à un autre outil), le timing et la numérotation ne sont que du bruit à éliminer.
L’approche manuelle, et où elle échoue
Un simple rechercher-remplacer avec une regex pour les lignes d’horodatage (\d{2}:\d{2}:\d{2}[,.]\d{3}\s*-->\s*...) traite le cas évident. Là où ça se complique :
- Des numéros de cue qui ressemblent à du texte. Une ligne contenant juste
42pourrait être un index de cue, ou, plus rarement, faire partie du dialogue (un personnage qui lit un nombre à voix haute). Un nettoyage naïf ne peut pas toujours faire la distinction de manière fiable à grande échelle. - Des phrases coupées entre plusieurs cues. Les sous-titres sont découpés pour la lisibilité à l’écran (environ une ligne toutes les quelques secondes), pas pour la grammaire. Une même phrase s’étale régulièrement sur deux ou trois cues consécutifs. Supprimer les lignes de timing sans rassembler les fragments vous laisse avec des bouts de phrases décousus au lieu d’une prose fluide.
- Les balises de formatage en ligne.
<i>,<b>, ainsi que les balises de voix/couleur du VTT (<v Speaker>,<c.colorname>) doivent elles aussi être supprimées, sinon elles apparaîtront comme du texte brut entre chevrons dans votre résultat. - Les fins de ligne mixtes. Les fichiers exportés depuis différents outils ou systèmes d’exploitation mélangent parfois
\r\net\n, ce qui peut casser des motifs regex qui supposent l’un ou l’autre.
À quoi ressemble un bon résultat
Un texte correctement extrait se lit comme une prose normale : des phrases complètes, des sauts de paragraphe là où il y a des pauses naturelles, aucun numéro ou fragment d’horodatage égaré, aucune trace de balisage. L’objectif est un document qui donne l’impression que quelqu’un a simplement transcrit le dialogue depuis le début, sans aucune trace du format de sous-titres d’origine.
Le faire sans le nettoyage manuel
Notre convertisseur SRT vers TXT (et son équivalent, le convertisseur VTT vers TXT) gère tout cela automatiquement : numéros de cue et horodatages supprimés, balises retirées, phrases coupées entre plusieurs cues rassemblées en paragraphes cohérents. Tout se passe entièrement dans votre navigateur, donc rien dans le fichier n’est envoyé où que ce soit.