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- 1Extract the audioffmpeg, mono 16 kHz
- 2TranscribeEvery word gets a start and an end
- 3Build the cuesWhere the subtitle quality is decided
- 4Validate the SRTBefore anything is paid for
- 5TranslateOne batch per language, four at a time
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.
An agent doing itOne language at a time
- Retypes every timecode, and eventually mistypes one
- The whole file crosses the context window, once per language
- Generation prices for a mechanical job
- Nothing to resume if it stops halfway
A batch translatorTwenty at a time
- Numbering and timecodes kept byte for byte
- Four batches in flight, none of it through a model context
- One credit per three words
- A manifest, so a rerun pays for nothing twice
50Sprachen, sortiert nach YouTube-Publikum
34Credits pro Sprache bei einem 101-Wörter-Clip
0npm-Abhängigkeiten