Communitygithub.com

xieyuhai/video-zh-dubbing

Wandeln Sie eine englische Video-URL (YouTube, Bilibili, jede yt-dlp-kompatible Seite) oder eine lokale Datei in eine fertig synchronisierte MP4-Datei mit natürlicher Mandarin-Übersetzung und synchronisierten chinesischen Untertiteln um – unter Verwendung von faster-whisper, lokaler Ollama-Zwei-Durchlauf-Übersetzung und optionaler lokaler CosyVoice-Sprachausgabe.

Was ist video-zh-dubbing?

Diese Skill führt eine vollständige Pipeline zur Videobearbeitung aus, die ein englisches Video in eine chinesisch synchronisierte MP4-Datei umwandelt. Sie transkribiert den Audiostream mit faster-whisper, übersetzt die Transkription mit einem lokalen Ollama-Modell (oder optional mit OpenAI/Google-APIs) und generiert eine natürliche Mandarin-Sprachausgabe mit CosyVoice oder Edge TTS. Die Pipeline unterstützt mehrere Audio-Modi (Ersetzen, Mischen, Hintergrundtrennung mit Demucs), Untertiteloptionen (weich eingebettet, eingebrannt, keine) und verschiedene Sprachmodelle. Sie ist plattformunabhängig (macOS, Linux, Windows) und erfordert Python 3.10+, FFmpeg und eine lokale faster-whisper-Installation. Die Skill führt Prüfungen durch, ob die Ausgabedatei gültig ist, erstellt einen detaillierten Bericht und stellt sicher, dass keine DRM- oder Urheberrechtsverletzungen auftreten. Sie ist besonders nützlich für Entwickler, die englische Tutorials oder technische Inhalte für ein chinesisches Publikum lokalisieren möchten, ohne auf teure kommerzielle APIs angewiesen zu sein.

Funktioniert mit✓Claude Code✓Codex CLI~Cursor
npx skills add xieyuhai/video-zh-dubbing

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Video zu Chinesisch-Dub

Verwenden Sie die gebündelte Python-Pipeline, um ein vollständiges chinesisch synchronisiertes Video zu erstellen. Geben Sie nicht nur einen vorgeschlagenen Workflow an, wenn der Benutzer eine URL bereitgestellt und um das fertige Artefakt gebeten hat: Führen Sie die Pipeline aus, wenn die Terminalausführung verfügbar ist und der Benutzer die erforderlichen Netzwerk-/Download-Aktionen autorisiert hat.

Erfordert Python 3.10+, FFmpeg/ffprobe, Netzwerkzugriff für URL-Downloads und ein lokales faster-whisper-Modell. Online-Übersetzung und -Sprache sind optional; verwenden Sie das lokale CosyVoice-Backend, wenn natürliches Mandarin ohne eine kostenpflichtige Sprach-API benötigt wird.

Ermitteln Sie <skill-root> als das Verzeichnis, das diese SKILL.md enthält; gehen Sie nicht davon aus, dass das aktuelle Arbeitsverzeichnis des Aufrufers das Skill-Verzeichnis ist. Bevorzugen Sie <skill-root>/.venv/bin/python unter macOS/Linux oder <skill-root>/.venv\Scripts\python.exe unter Windows, wenn diese virtuelle Umgebung existiert; verwenden Sie andernfalls den aktiven Python-Interpreter. Die folgenden Befehle gehen davon aus, dass das aktuelle Verzeichnis auf <skill-root> geändert wurde.

Schnellstart

  1. Überprüfen Sie die Voraussetzungen:

    python3 scripts/check_environment.py
    
  2. Installieren Sie FFmpeg und Python-Abhängigkeiten. Siehe README.md für macOS-, Windows- und Linux-Befehle.

  3. Für eine natürliche Übersetzung ohne kostenpflichtige API verwenden Sie ein bereits installiertes Ollama-Modell mit --translation-provider ollama --ollama-model MODELL. Die Pipeline führt es lokal in zwei Durchläufen aus und validiert jede Segment-ID; überprüfen Sie vor der Auslieferung Fachbegriffe und Timing. Wenn kein lokales Modell verfügbar ist, verwenden Sie --translation-provider google nur mit Erlaubnis als Online-Entwurf und polieren Sie die zeitgestempelten Segmente manuell nach, oder übergeben Sie überprüftes JSON über --segments-file. Verwenden Sie OPENAI_API_KEY oder DEEPSEEK_API_KEY nur, wenn dies ausdrücklich erlaubt ist; wechseln Sie niemals zu einer nicht zugelassenen API.

  4. Konvertieren Sie eine Video-URL (Bilibili, YouTube oder jede von yt-dlp unterstützte Seite):

    python3 scripts/translate_video.py "https://www.youtube.com/watch?v=VIDEO_ID" \
      --translation-provider ollama --ollama-model MODELL --output-dir ./output
    

    Bilibili-URLs können einen Teilparameter wie ?p=2 enthalten; übergeben Sie die vollständige Ziel-URL.

  5. Oder verarbeiten Sie ein lokales Video:

    python3 scripts/translate_video.py ./input.mp4 \
      --translation-provider ollama --ollama-model MODELL --output-dir ./output
    

Standardwerte und Optionen

  • Die Quellsprache ist standardmäßig Englisch (--source-language en); verwenden Sie auto, um sie zu erkennen.
  • Die chinesische Stimme ist standardmäßig zh-CN-XiaoxiaoNeural; verwenden Sie --voice zh-CN-YunxiNeural für eine jüngere männliche Stimme oder --voice zh-CN-YunyangNeural für eine männliche Erzählerstimme.
  • Für eine natürlich klingende, kostenfreie Sprachausgabe pro Aufruf bevorzugen Sie ein lokal installiertes Fun-CosyVoice3-0.5B im zero-shot-Modus, wenn eine ausdrücklich autorisierte Referenzclip und ein exaktes Transkript verfügbar sind. Verwenden Sie andernfalls CosyVoice-300M-SFT mit einem integrierten Sprecher (z. B. 中文女). Klonen Sie niemals eine Stimme ohne Erlaubnis. Das Modell wird einmal für alle Segmente geladen, schreibt PCM16-WAV-Clips und speichert den Fortschritt (Checkpointing). Siehe README.md für die Flags.
  • Wenn Edge TTS nicht erreichbar ist, setzen Sie DASHSCOPE_API_KEY und verwenden Sie --tts-provider dashscope --voice Cherry für Qwen3 TTS. Der übersetzte Transkripttext wird an DashScope gesendet.
  • Die Übersetzung ist standardmäßig auf auto eingestellt, was nur ein explizit konfiguriertes lokales OLLAMA_MODEL verwendet und andernfalls vor der Übersetzung anhält. Wählen Sie --translation-provider openai oder google explizit aus, bevor ein Transkript an einen externen Übersetzer gesendet wird. Ollama erfordert seinen lokalen Dienst und ein installiertes Modell; die Skill lädt niemals automatisch eines herunter. Verwenden Sie --translation-context "Videothema und Schlüsselbegriffe", wenn der Dateiname nicht klar das Thema identifiziert; andernfalls wird der Titel oder Dateiname verwendet.
  • --audio-mode replace ersetzt den Quell-Audio durch chinesische Sprache (Standard, zuverlässig). --audio-mode mix behält die Originalspur bei niedriger Lautstärke unter der chinesischen Stimme. --audio-mode background versucht, die Originalgesangsstimme mit optionalem Demucs zu trennen und mischt dann die chinesische Stimme mit dem verbleibenden Hintergrund. Wenn Demucs nicht verfügbar ist oder fehlschlägt, meldet das Skript das Problem und fällt sicher auf Audio-Ersetzung zurück.
  • --subtitle-mode soft bettet auswählbare chinesische Untertitel in die MP4 ein und schreibt auch eine externe SRT-Datei (Standard). Überprüfen Sie zuerst die Quellframes: Wenn Untertitel bereits in das Bild eingebrannt sind, behalten Sie soft bei, um sich überschneidende doppelte Texte zu vermeiden. burn brennt Untertitel in das Bild und erfordert einen FFmpeg-Build mit dem subtitles/libass-Filter und einer verwendbaren chinesischen Schriftart. none lässt Untertitel aus der MP4 weg, schreibt aber dennoch eine SRT-Begleitdatei zur Überprüfung.
  • Optimieren Sie ASR mit --model small (ausgewogener Standard), --model medium oder --model large-v3. Größere Modelle benötigen mehr Speicher und dauern länger. Der erste Lauf lädt das ausgewählte Modell herunter.
  • Verwenden Sie --cookies-from-browser chrome nur, wenn Sie angemeldet sind und die Seite Ihre eigene Browser-Sitzung erfordert. Dies liest lokale Browser-Cookies; es ist standardmäßig nicht aktiviert.
  • Verwenden Sie --keep-intermediates, um heruntergeladene Quell-Audiodateien, WAV-Dateien und generierte Sprachclips zur Fehlerbehebung aufzubewahren.
  • Verwenden Sie --segments-file path/to/translated.segments.json, um überprüfte Übersetzungen nach einem TTS-Fehler wiederzuverwenden, ohne Erkennung und Übersetzung zu wiederholen.
  • Verwenden Sie --reuse-tts-dir path/to/tts_segments mit einem vorhandenen Satz generierter Clips, um das Timing anzupassen und neu zu rendern, ohne den Sprachdienst erneut aufzurufen.

Erforderliche Ausgabeprüfungen

Das Skript muss überprüfen, ob die MP4-Datei existiert, nicht leer ist, einen Video-Stream und einen Audio-Stream enthält und eine Dauer nahe der Eingabe aufweist. Es erzeugt eine SRT-Datei, ein übersetztes Segment-JSON und einen Verarbeitungsbericht neben der finalen MP4. Jede fehlgeschlagene Stufe muss die Pipeline anhalten und eine nützliche Fehlermeldung liefern, anstatt so zu tun, als wäre die Ausgabe vollständig.

Überprüfen Sie vor der Auslieferung das übersetzte JSON/SRT auf falsch transkribierte Namen und Begriffe, unnatürliche wortwörtliche Formulierungen und Segmente, die beschleunigt oder beschnitten wurden. Überprüfen Sie auch ein gerendertes Frame: Lehnen Sie Glyphenfehler-Boxen, Bildschirm-Untertitel außerhalb des Bildbereichs und doppelt eingebrannte Untertitel ab. Hören Sie bei CosyVoice vor dem Rendern eines langen Videos ein kurzes Beispiel an; überprüfen Sie die tatsächliche Aussprache von Dezimalzahlen, Codenamen und englischen Begriffen, nicht nur deren geschriebenen Text. Ein überprüftes Segment kann spoken_text hinzufügen, um eine Zahl oder einen Dateinamen natürlich auszuschreiben, während zh_text die genaue Untertitelung bleibt. Ihre Bedeutung muss übereinstimmen. Vermeiden Sie es, abgeschnittene Sprache oder auffällige Beschleunigungen auszuliefern.

Arbeitsablauf

  1. Unterscheidung zwischen URL und lokaler Datei. Für URLs laden Sie nur das angeforderte Video mit yt-dlp herunter (--no-playlist). Wenn eine Bilibili-Seite 412 zurückgibt, kann das Skript die öffentliche Bilibili-API nur verwenden, wenn das Video ausdrücklich als herunterladbar markiert ist; bewahren Sie den angeforderten ?p=-Teil. Umgehen Sie niemals DRM, Paywalls oder Kontobeschränkungen.
  2. Verwenden Sie ffprobe, um Streams und die Dauer zu überprüfen. Extrahieren Sie Mono-16-kHz-PCM-Audio.
  3. Transkribieren Sie mit faster-whisper, wobei die Quell-Zeitstempel erhalten bleiben. Melden Sie klar einen Fehler, wenn keine Sprache erkannt wird.
  4. Übersetzen Sie mit Themen- und umgebendem Sprachkontext und polieren Sie dann zu einem prägnanten, idiomatischen Mandarin. Bewahren Sie IDs, Reihenfolge, Bedeutung, Zahlen, Namen und Fachbegriffe. Überprüfen Sie Quell-Erkennungsfehler anhand des Videothemas.
  5. Generieren Sie jedes chinesische Sprachsegment über den ausgewählten Sprachdienst. Passen Sie es konservativ an sein Zeitstempelfenster an; warnen Sie im Bericht, wenn ein Segment aggressive Beschleunigung oder Kürzung benötigt.
  6. Erstellen Sie eine vollständige chinesische Sprachspur. Wenden Sie den angeforderten Audiomodus an; die optionale Demucs-Trennung ist eine Verbesserung, keine harte Abhängigkeit.
  7. Schreiben Sie chinesische SRT- und übersetzte JSON-Dateien. Muxen oder brennen Sie Untertitel wie angefordert, exportieren Sie eine breit kompatible H.264/AAC-MP4 und überprüfen Sie das Ergebnis.
  8. Melden Sie genaue Ausgabepfade, ausgewählte Einstellungen, Warnungen und alle verbleibenden Überprüfungsanforderungen.

Beispiele

# YouTube-URL; API-Übersetzung; chinesische Frauenstimme; Voice-Over auf extrahierter Hintergrundmusik
OPENAI_API_KEY="$OPENAI_API_KEY" python3 scripts/translate_video.py "https://youtu.be/VIDEO_ID" \
  --translation-provider openai --audio-mode background --subtitle-mode soft --output-dir ./output

# Bilibili Teil 2; verwenden Sie einen konfigurierten LLM-Schlüssel für natürliche Übersetzung
python3 scripts/translate_video.py "https://www.bilibili.com/video/BV1NAuq6uE8t/?p=2" \
  --translation-provider openai --translation-context "Specification-Driven Development SDD und Agentic Programming" \
  --voice zh-CN-YunyangNeural --audio-mode mix --output-dir ./output

# Chinesische Untertitel in das Bild einbrennen
python3 scripts/translate_video.py ./input.mp4 --subtitle-mode burn --output-dir ./output

# Vollständig lokale Sprachausgabe mit CosyVoice3 und einer autorisierten Referenz; keine kostenpflichtigen APIs
python3 scripts/translate_video.py ./input.mp4 --segments-file ./reviewed.segments.json \
  --tts-provider cosyvoice --cosyvoice-python /pfad/zu/cosyvoice-python \
  --cosyvoice-repo /pfad/zu/CosyVoice --cosyvoice-model-dir /pfad/zu/Fun-CosyVoice3-0.5B \
  --cosyvoice-mode zero-shot --cosyvoice-prompt-audio ./reference.wav \
  --cosyvoice-prompt-text-file ./reference.txt --subtitle-mode burn --output-dir ./output

# Lokale Transkription, Ollama-Übersetzung und CosyVoice-Erzählung
python3 scripts/translate_video.py ./input.mp4 --translation-provider ollama --ollama-model MODELL \
  --tts-provider cosyvoice --cosyvoice-python /pfad/zu/cosyvoice-python \
  --cosyvoice-repo /pfad/zu/CosyVoice --cosyvoice-model-dir /pfad/zu/CosyVoice-300M-SFT \
  --cosyvoice-mode sft --output-dir ./output

Sicherheit und Rechte

Verarbeiten Sie nur Videos, die Sie besitzen, für die Sie eine Lizenz zur Bearbeitung haben oder deren Download und Transformation Ihnen anderweitig gestattet ist. Respektieren Sie die Bedingungen und Urheberrechte der Quellplattform. Umgehen Sie niemals DRM oder technische Zugangskontrollen. --cookies-from-browser ist optional und sollte nur die eigene authentifizierte Sitzung des Benutzers verwenden. Veröffentlichen Sie keine synchronisierte Ableitung, ohne die geltenden Rechte zu bestätigen.

Das Projekt dient dem Lernen, der Forschung und dem technischen Austausch. Verwenden Sie es nicht für rechtswidrige Aktivitäten, nicht autorisiertes Stimmenklonen, Betrug, Identitätstäuschung oder irreführende Inhalte. Siehe den Haftungsausschluss in der README.md; die Benutzer sind für ihre Nutzung und Verbreitung der generierten Inhalte im Rahmen des geltenden Rechts verantwortlich.

Verwandte Skills