Principe et format Overtone
Overtone introduit le format .overtone.json, qui conserve chaque mot prononcé une seule fois, accompagné de son horodatage et de l’identifiant du locuteur. Le fichier centralise ensuite plusieurs cuts : chaque coupe correspond à un profil d’aspect (par défaut 16:9 et 9:16, mais tout ratio nommé est supporté). Ainsi, les mêmes mots et leurs temps sont réutilisés pour générer des sous‑titres adaptés à chaque forme d’écran sans duplication de données. Le format évite les limites de WebVTT ou TTML, qui ne stockent que des repères déjà découpés, en conservant les mots bruts et en appliquant les règles de mise en forme à la volée.
Pipeline de transcription et d’ajustement
Le processus débute par une phase d’écoute : un modèle texte (gpt‑transcribe) extrait les mots, tandis qu’un service de timing (Azure AI Speech) fournit les timestamps et les identifiants de locuteur. Si la variable ELEVENLABS_API_KEY est définie, ElevenLabs Scribe ajoute une seconde couche d’écoute. Lorsque les sorties divergent, un LLM chooser réécoute le segment et sélectionne la version la plus plausible. Un LLM de correction intervient ensuite, utilisant le contexte fourni (langue, glossaire) pour rectifier les erreurs de reconnaissance, ajuster les noms propres et marquer les mots clés. Les corrections sont limitées à la structure du texte ; les timestamps restent inchangés, garantissant la cohérence temporelle.
Pour les découpes de lignes, Overtone applique un jeu de règles versionnées : chaque règle empêche les coupures sur des mots faibles, maintient les noms et les nombres groupés, attribue un locuteur par sous‑titre et transforme les pauses en sauts de ligne ou de sous‑titre. Le même jeu de règles produit des coupes identiques pour chaque profil d’aspect, assurant une expérience de lecture homogène quel que soit le dispositif.
Intégration et utilisation pratique
Le CLI, compatible avec Node.js 22.12 ou supérieur, propose deux modes distincts. En mode recut, aucune dépendance à ffmpeg n’est requise ; il suffit de télécharger un fichier SRT et d’exécuter :
curl -O https://download.blender.org/demo/movies/ToS/subtitles/TOS-en.srt
npx overtone-captions recut TOS-en.srtLe résultat comprend le fichier TOS-en.overtone.json, les versions .horizontal et .vertical au format VTT et SRT, ainsi qu’une transcription brute. Pour la transcription à partir d’une vidéo, le pipeline utilise ffmpeg et les API d’OpenAI et d’Azure :
overtone transcribe talk.mp4 --language en --context "Panel about urban cycling"
# mode dry‑run pour estimer le coût sans envoi de données
overtone transcribe talk.mp4 --dry-runLe mode --local fonctionne hors ligne grâce à whisper.cpp et Ollama. L’intégration front‑end se fait via le plugin videojs‑overtone :
import videojs from 'video.js';
import 'videojs-overtone';
videojs('my-video').overtone({ src: 'talk.overtone.json' });Des exportations WebVTT ou SRT sont générées à la demande, permettant d’utiliser les sous‑titres dans n’importe quel lecteur standard. Le dépôt inclut un benchmark (bench/RESULTS.md) qui compare la taille du fichier et la précision temporelle par rapport aux formats classiques.
Limites et perspectives
Le modèle dépend fortement de services externes pour la reconnaissance initiale ; les coûts d’API et la disponibilité réseau peuvent impacter la viabilité à grande échelle. Le recours à un LLM pour la correction introduit une couche de complexité supplémentaire et nécessite une validation manuelle des suggestions incertaines. Enfin, la précision des timestamps reste liée à la qualité du service de timing, ce qui peut varier selon la langue ou le bruit de fond. Malgré ces contraintes, Overtone propose une architecture modulaire qui sépare clairement la transcription, la correction et la mise en forme, facilitant l’adaptation à de nouveaux moteurs ou à des règles de découpe personnalisées.