Automatische Untertitel (Sprache in Untertitel)
Extrahiert gesprochene Sprache aus Audio-/Videodateien und erstellt Untertitel. Basierend auf dem gemeinsamen Skript skills/shared/scripts/asr.py (faster-whisper-Wrapper), parametergesteuert und reproduzierbar mit chinesisch-freundlicher Satzerkennung. Optional können Untertitel in das Video eingebrannt werden (unter Verwendung von skills/shared/scripts/video_ops.py / ffmpeg subtitles-Filter).
Erledigt ausschließlich "Sprache → Untertiteldatei (+ optionales Einbrennen)". Allgemeine Videobearbeitung siehe video-editing; reine Rauschunterdrückung siehe audio-denoise; intelligentes Schneiden langer Videos mit Untertiteleinbrennung siehe clipify.
Eingabe
| Feld | Erforderlich | Beschreibung |
|---|---|---|
| input_file | Ja | Pfad zur Audio- oder Videodatei (bei Video wird die Tonspur automatisch extrahiert) |
| format | Nein | srt (Standard) / ass / txt / json |
| language | Nein | auto (Standard) oder ISO 639-1-Code wie zh/en |
| model | Nein | tiny/base (Standard)/small/medium/large-v3, größer = genauer aber langsamer |
| burn | Nein | Ob Untertitel in das Video eingebrannt werden sollen (erfordert Videoeingabe) |
Unterstützt: mp3/wav/m4a/aac/flac (Audio); mp4/mkv/mov/webm (Video).
Ausgabe
- Untertiteldateien im Verzeichnis
outputs/Thema/(SRT/ASS/TXT/JSON) - Bei Einbrennung: Video mit fest eingebrannten Untertiteln (
*-sub.mp4) - Bericht: Erkannte Sprache, Anzahl der Untertitel, verwendetes Modell, Ausgabepfade
Voraussetzungen
- Beim ersten Start wird das Modell von HuggingFace heruntergeladen, Internetverbindung erforderlich. Das Skript liest die Umgebungsvariable
EASEL_PROXYoderhttp(s)_proxyals Proxy; wenn keine gesetzt ist, wird direkt verbunden. Alternativ kann vorherexport https_proxy=... http_proxy=...gesetzt werden. - In CPU-Umgebungen reichen die Standardeinstellungen
--device cpu --compute-type int8.
Ausführungsschritte
Skriptpfade (relativ zum Projektstamm): skills/shared/scripts/asr.py, skills/shared/scripts/video_ops.py.
1. Untertiteldatei erstellen
# Video → SRT (automatische Tonspurextraktion + Spracherkennung)
python skills/shared/scripts/asr.py transcribe \
-i input.mp4 -o outputs/Thema/input.srt --language zh
# Video → ASS (mit Styling, **Schriftgröße und Abstände passen sich an Hoch-/Querformat an**): Bei Videoeingabe automatische Erkennung von Breite und Höhe
python skills/shared/scripts/asr.py transcribe \
-i input.mp4 -o outputs/Thema/input.ass --format ass --model small
# Reines Audio → ASS: Keine Größenerkennung möglich, Standard ist Hochformat 1080x1920; für Querformat --res 1920x1080 hinzufügen
python skills/shared/scripts/asr.py transcribe \
-i voice.mp3 -o outputs/Thema/voice.ass --format ass --res 1920x1080
- ASS-Stil passt sich an die Zielvideogröße an: Schriftgröße basiert auf der kürzeren Seite (min(w,h)*0.05, passend für Hoch- und Querformat, nicht zu groß im Querformat), unterer Rand basiert auf Höhe, linker/rechter Rand auf Breite,
PlayRes= echte Breite und Höhe. Bei Videoeingabe automatische Erkennung; bei reinem Audio--res Breite x Höheangeben. Für eingebrannte Untertitel mit Styling bevorzugt diese ASS-Datei verwenden (nächster Abschnitt), einfacher und anpassungsfähiger als rohes SRT mit manuellemforce_style. - Standardmäßig ~18 Zeichen pro Zeile (Chinesisch), bei Überlänge automatischer Zeilenumbruch/Aufteilung;
--max-line-charskann angepasst werden. - Wenn
-onicht angegeben wird, wird ein Projektverzeichnis basierend auf dem Eingabedateinamen erstellt, z.B.talk.mp4→ Ausgabe inoutputs/talk/talk.srt; bei bestehenden Projekten explizit-o outputs/Thema/<Dateiname>.<Format>angeben. - Verfügbare Modelle/Sprachen anzeigen:
python skills/shared/scripts/asr.py info.
2. (Optional) Untertitel in Video einbrennen
Wenn der Benutzer "harte Untertitel/Untertitel einbrennen" wünscht, mit ffmpeg subtitles (SRT) oder ass (ASS) Filter:
# SRT einbrennen (anpassbares Styling)
ffmpeg -y -i input.mp4 \
-vf "subtitles=outputs/Thema/input.srt:force_style='FontName=Noto Sans CJK SC,FontSize=20,PrimaryColour=&H00FFFFFF,OutlineColour=&H80000000,BorderStyle=1,Outline=2'" \
-c:a copy outputs/Thema/input-sub.mp4
# ASS einbrennen (Stil bereits in der ASS-Datei, originalgetreu)
ffmpeg -y -i input.mp4 \
-vf "ass=outputs/Thema/input.ass" \
-c:a copy outputs/Thema/input-sub.mp4
- Bei Pfaden mit Sonderzeichen den Wert von
subtitles=in einfache Anführungszeichen setzen und Doppelpunkte escapen. - Für weiche Untertitel (deaktivierbar) statt Einbrennen:
ffmpeg -i in.mp4 -i sub.srt -c copy -c:s mov_text out.mp4.
3. Ergebnisse und Bericht
- Untertiteldateien und eingebrannte Videos werden in
outputs/Thema/geschrieben. - Dem Benutzer berichten: Erkannte Sprache, Anzahl der Untertitel, Modell, Dateipfade; Hinweis, dass ein erneuter Durchlauf mit
--model/--max-line-charsmöglich ist.
Regeln
- Video-Tonspur zuerst extrahieren — Das Skript extrahiert automatisch mit ffmpeg eine 16kHz-Mono-WAV-Datei, das Originalvideo bleibt unverändert.
- Chinesisch-freundliche Satzerkennung — Zeilenumbrüche nach Satzzeichen/Länge, um zu lange Zeilen zu vermeiden.
- Niemals Originaldateien löschen — Es werden nur neue Dateien in
outputs/erstellt. - Modellauswahl — Für Geschwindigkeit
base, für Genauigkeitsmall/medium; CPU mit int8. - Einbrennen erfordert Videoeingabe — Bei reinem Audio werden nur Untertiteldateien erstellt.
- Keine Profilabhängigkeit — Transkription erfordert kein Benutzerprofil.
Eigene Referenz
- SYSTRAN/faster-whisper — CTranslate2-beschleunigte Whisper-Inferenz
- openai/whisper — Ursprüngliches Whisper-Modell und ASR-Methode
- FFmpeg
subtitles/assFilter (Untertiteleinbrennung)