Guillaume Duvernay

Open Source

multilingual-subtitles

Untertitel in zwanzig Sprachen aus einer Videodatei mit einem Befehl.

Ein lokales Command-Line-Tool. Es extrahiert das Audio, transkribiert es mit einem Zeitstempel für jedes Wort, erstellt eine gültige SRT-Datei und übersetzt diese in jede gewünschte Sprache. Die Zeitcodes werden in keiner Sprache jemals neu geschrieben.

Rolle
Autor
Jahr
2026
Stack
Node ohne npm-Abhängigkeiten, ffmpeg, Mistral, AI Glot CLI
Besuchen
Quellcode

Transkription ist der Teil, der bereits gelöst ist

Ein Dutzend Tools verwandeln ein Video in eine Untertiteldatei. Was die meisten Kanäle an einer Sprache hindert, ist die andere Hälfte: Zwanzig Sprachen zu erstellen, bedeutet einen Tag voller manueller Eingaben, weshalb es niemand tut. Genau für diesen Teil wurde dieses Tool entwickelt, und deshalb heißt es mehrsprachig und nicht Transkription.

Wörter statt Segmente

Der gleiche Mistral-Endpunkt liefert ganze Segmente oder einzelne Wörter zum selben Preis. Ein Segment kann ein siebensekündiger Sprachblock sein, was einem Satz entspricht und keinem Untertitel: Die Umwandlung in Cues bedeutet, zu raten, wann innerhalb dieser sieben Sekunden welche Phrase gesagt wurde, wobei die Schätzung ungenau wird. Mit Wort-Timings gruppiert der Cue-Builder nach Lesbarkeit, und jeder Cue beginnt immer noch exakt bei dem Wort, das er anzeigt.

Warum ein Agent die SRT nicht übersetzen sollte

Bei einer Sprache ist es in Ordnung. Bei zwanzig ist es aus drei Gründen das falsche Tool: Das Modell schreibt jeden Zeitcode neu und vertippt sich irgendwann, die gesamte Datei durchläuft pro Sprache einmal das Kontextfenster, und Sie zahlen Generierungspreise für eine mechanische Aufgabe. AI Glot liest SRT nativ, behält Nummerierung und Zeitcodes Byte für Byte bei und kostet einen Credit pro drei Wörter.

Kosten eines Neustarts

Nichts, wofür Sie bereits bezahlt haben. Ein Manifest speichert die Batch-ID und den Status pro Sprache, sodass eine bereits auf der Festplatte vorhandene Sprache übersprungen wird und ein erstellter, aber nie heruntergeladener Batch fortgesetzt wird, statt ihn doppelt zu kaufen. Wenn eine Sprache fehlschlägt, stoppt dies nicht die anderen.

One command, and the timecodes are never retyped

The pipeline is five steps, and only the third one is worth having an opinion about.

npm run subs -- run ~/Downloads/clip.mp4 --to fr,de,ja
Each step writes a file and stops. Transcription costs cents and translation costs credits, so keeping them apart means the expensive one never runs just because the cheap one worked.

Step three is lib/cues.mjs, and it is the whole file that makes the difference between a transcript and a subtitle. It breaks on sentence ends and on pauses over 0.6 seconds, holds each cue 1.2 seconds minimum without ever biting into the next one, and caps a cue at two lines of 42 characters and six seconds.

For one language, letting an agent do it works. The costs on the left are the ones that only show up at twenty.

50Sprachen, sortiert nach YouTube-Publikum

34Credits pro Sprache bei einem 101-Wörter-Clip

0npm-Abhängigkeiten