Communitygithub.com

video-zh-dubbing : vidéo anglaise doublée en mandarin

Transforme une URL de vidéo anglaise ou un fichier local en MP4 fini doublé en chinois, avec une traduction mandarin naturelle et des sous-titres chinois synchronisés, en local autant que possible.

Qu'est-ce que video-zh-dubbing : vidéo anglaise doublée en mandarin ?

Étape 3 de la recette Localisation vidéo (doublage entrant), depuis xieyuhai/video-zh-dubbing (créé le 2026-10-13). Gère YouTube, les vidéos Bilibili en plusieurs parties et toute URL yt-dlp ou fichier local. Transcription faster-whisper, traduction Ollama locale en deux passes avec validation des segments (ou JSON relu), CosyVoice local optionnel pour un mandarin naturel, assemblage FFmpeg avec sous-titres chinois synchronisés. API payantes seulement avec autorisation explicite.

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

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Doublage Vidéo vers le Chinois

Utilisez le pipeline Python fourni pour produire une vidéo complète doublée en chinois. Ne vous contentez pas de fournir un flux de travail suggéré lorsque l'utilisateur a fourni une URL et demandé l'artefact final : exécutez le pipeline si l'exécution en terminal est disponible et que l'utilisateur a autorisé les actions réseau/téléchargement nécessaires.

Nécessite Python 3.10+, FFmpeg/ffprobe, un accès réseau pour les téléchargements d'URL, et un modèle faster-whisper local. La traduction et la synthèse vocale en ligne sont optionnelles ; utilisez le backend local CosyVoice lorsque le mandarin naturel est nécessaire sans API de synthèse payante.

Résolvez <skill-root> comme le répertoire contenant ce fichier SKILL.md ; ne supposez pas que le répertoire de travail actuel de l'appelant est le répertoire de la compétence. Préférez <skill-root>/.venv/bin/python sur macOS/Linux ou <skill-root>/.venv\Scripts\python.exe sur Windows lorsque cet environnement virtuel existe ; sinon, utilisez l'interpréteur Python actif. Les commandes ci-dessous supposent que le répertoire actuel a été changé en <skill-root>.

Démarrage rapide

  1. Vérifiez les prérequis :

    python3 scripts/check_environment.py
    
  2. Installez FFmpeg et les dépendances Python. Consultez le fichier README.md pour les commandes macOS, Windows et Linux.

  3. Pour une traduction naturelle sans API payante, utilisez un modèle Ollama déjà installé avec --translation-provider ollama --ollama-model MODEL. Le pipeline l'exécute localement en deux passes et valide chaque identifiant de segment ; révisez les termes techniques et le timing avant la livraison. Si aucun modèle local n'est disponible, utilisez --translation-provider google uniquement avec permission comme brouillon en ligne et peaufinez manuellement les segments horodatés, ou transmettez le JSON révisé via --segments-file. Utilisez OPENAI_API_KEY ou DEEPSEEK_API_KEY uniquement lorsque cela est explicitement autorisé ; ne passez jamais à une API non autorisée.

  4. Convertissez une URL vidéo (Bilibili, YouTube, ou tout site supporté par yt-dlp) :

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

    Les URL Bilibili peuvent inclure un paramètre de partie tel que ?p=2 ; transmettez l'URL cible complète.

  5. Ou traitez une vidéo locale :

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

Valeurs par défaut et options

  • La langue source est par défaut l'anglais (--source-language en) ; utilisez auto pour la détecter.
  • La voix chinoise par défaut est zh-CN-XiaoxiaoNeural ; utilisez --voice zh-CN-YunxiNeural pour une voix masculine jeune ou --voice zh-CN-YunyangNeural pour une voix de narration masculine.
  • Pour une synthèse vocale naturelle sans frais par appel, préférez un modèle Fun-CosyVoice3-0.5B installé localement en mode zero-shot lorsqu'un clip de référence explicitement autorisé et une transcription exacte sont disponibles. Sinon, utilisez CosyVoice-300M-SFT avec un locuteur intégré (par exemple 中文女). Ne clonez jamais une voix sans permission. Le modèle se charge une seule fois pour tous les segments, écrit des clips WAV PCM16, et enregistre l'avancement. Consultez le fichier README.md pour les indicateurs.
  • Si Edge TTS est inaccessible, définissez DASHSCOPE_API_KEY et utilisez --tts-provider dashscope --voice Cherry pour la synthèse vocale Qwen3. Le texte de la transcription traduite est envoyé à DashScope.
  • La traduction par défaut est auto, ce qui utilise uniquement un modèle OLLAMA_MODEL local explicitement configuré et s'arrête avant la traduction sinon. Sélectionnez --translation-provider openai ou google explicitement avant que toute transcription ne soit envoyée à un traducteur externe. Ollama nécessite son service local et un modèle installé ; la compétence ne télécharge jamais de modèle automatiquement. Utilisez --translation-context "sujet de la vidéo et termes clés" lorsque le nom de fichier n'identifie pas clairement le sujet ; le titre ou le nom de fichier est utilisé sinon.
  • --audio-mode replace remplace l'audio source par la voix chinoise (par défaut, fiable). --audio-mode mix conserve la piste originale à faible volume sous la voix chinoise. --audio-mode background tente de séparer les voix originales avec Demucs optionnel, puis mélange la voix chinoise avec le fond restant. Si Demucs est indisponible ou échoue, le script signale le problème et se replie en toute sécurité sur le remplacement audio.
  • --subtitle-mode soft intègre des sous-titres chinois sélectionnables dans le MP4 et écrit également un fichier SRT externe (par défaut). Inspectez d'abord les images sources : si des légendes sont déjà incrustées dans l'image, conservez soft pour éviter un chevauchement de texte en double. burn incruste les sous-titres dans l'image et nécessite une version de FFmpeg avec le filtre subtitles/libass et une police chinoise utilisable. none omet les sous-titres du MP4 mais écrit toujours un fichier SRT pour révision.
  • Ajustez la reconnaissance vocale avec --model small (équilibré par défaut), --model medium, ou --model large-v3. Les modèles plus grands nécessitent plus de mémoire et prennent plus de temps. Le premier téléchargement télécharge le modèle sélectionné.
  • Utilisez --cookies-from-browser chrome uniquement si vous êtes connecté et que le site nécessite votre propre session de navigateur. Cela lit les cookies du navigateur local ; ce n'est pas activé par défaut.
  • Utilisez --keep-intermediates pour conserver l'audio source téléchargé, les fichiers WAV et les clips vocaux générés pour le dépannage.
  • Utilisez --segments-file path/to/translated.segments.json pour réutiliser les traductions révisées après un échec de synthèse vocale sans répéter la reconnaissance et la traduction.
  • Utilisez --reuse-tts-dir path/to/tts_segments avec un ensemble existant de clips générés pour ajuster le timing et relancer le rendu sans rappeler le service de synthèse vocale.

Vérifications de sortie requises

Le script doit vérifier que le MP4 existe, n'est pas vide, possède un flux vidéo et un flux audio, et a une durée proche de celle de l'entrée. Il émet un fichier SRT, un JSON de segments traduits et un rapport de traitement à côté du MP4 final. Toute étape échouée doit arrêter le pipeline et fournir une erreur utile au lieu de prétendre que la sortie est complète.

Avant la livraison, inspectez le JSON/SRT traduit pour détecter les noms et termes mal transcrits, les formulations mot à mot non naturelles, et les segments qui ont été accélérés ou tronqués. Inspectez également une image rendue : rejetez les boîtes de glyphes manquants, les sous-titres hors écran et les sous-titres incrustés en double. Pour CosyVoice, écoutez un court échantillon avant de rendre une longue vidéo ; vérifiez la prononciation réelle des décimales, des noms de code et des termes anglais, pas seulement leur texte écrit. Un segment révisé peut ajouter spoken_text pour épeler un nombre ou un nom de fichier naturellement, tandis que zh_text reste le sous-titre exact. Leur signification doit correspondre. Évitez de livrer de la parole tronquée ou une accélération notable.

Flux de travail

  1. Résolvez l'URL par rapport au fichier local. Pour les URL, téléchargez uniquement la vidéo demandée en utilisant yt-dlp (--no-playlist). Si une page Bilibili renvoie 412, le script peut utiliser l'API publique de Bilibili uniquement lorsque la vidéo est explicitement marquée comme téléchargeable ; préservez la partie ?p= demandée. Ne contournez jamais les DRM, les paywalls ou les restrictions de compte.
  2. Utilisez ffprobe pour inspecter les flux et la durée. Extrayez l'audio PCM 16 kHz mono.
  3. Transcrivez avec faster-whisper, en conservant les horodatages source. Échouez clairement si aucune parole n'est détectée.
  4. Traduisez avec le contexte de la rubrique et de la parole voisine, puis peaufinez en mandarin concis et idiomatique. Préservez les identifiants, l'ordre, le sens, les nombres, les noms et les termes techniques. Vérifiez les erreurs de reconnaissance source par rapport au sujet de la vidéo.
  5. Générez chaque segment vocal chinois via le service de synthèse vocale sélectionné. Ajustez-le à sa fenêtre d'horodatage de manière conservatrice ; avertissez dans le rapport lorsqu'un segment nécessite une accélération ou une troncature agressive.
  6. Construisez une piste vocale chinoise de pleine durée. Appliquez le mode audio demandé ; la séparation Demucs optionnelle est une amélioration, pas une dépendance stricte.
  7. Écrivez le fichier SRT chinois et le JSON traduit. Multiplexez ou incrustez les sous-titres comme demandé, exportez un MP4 H.264/AAC largement compatible et vérifiez le résultat.
  8. Signalez les chemins exacts de sortie, les paramètres sélectionnés, les avertissements et les éventuels besoins de révision restants.

Exemples

# URL YouTube ; traduction par API ; voix féminine chinoise ; voix off sur fond extrait
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

# Partie 2 Bilibili ; utiliser une clé LLM configurée pour une traduction naturelle
python3 scripts/translate_video.py "https://www.bilibili.com/video/BV1NAuq6uE8t/?p=2" \
  --translation-provider openai --translation-context "Développement piloté par spécifications SDD et programmation par agents" \
  --voice zh-CN-YunyangNeural --audio-mode mix --output-dir ./output

# Incruster les sous-titres chinois dans l'image
python3 scripts/translate_video.py ./input.mp4 --subtitle-mode burn --output-dir ./output

# Synthèse vocale entièrement locale avec CosyVoice3 et une référence autorisée ; aucune API payante
python3 scripts/translate_video.py ./input.mp4 --segments-file ./reviewed.segments.json \
  --tts-provider cosyvoice --cosyvoice-python /path/to/cosyvoice-python \
  --cosyvoice-repo /path/to/CosyVoice --cosyvoice-model-dir /path/to/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

# Transcription locale, traduction Ollama et narration CosyVoice
python3 scripts/translate_video.py ./input.mp4 --translation-provider ollama --ollama-model MODEL \
  --tts-provider cosyvoice --cosyvoice-python /path/to/cosyvoice-python \
  --cosyvoice-repo /path/to/CosyVoice --cosyvoice-model-dir /path/to/CosyVoice-300M-SFT \
  --cosyvoice-mode sft --output-dir ./output

Sécurité et droits

Ne traitez que les vidéos que vous possédez, pour lesquelles vous avez une licence d'adaptation, ou que vous êtes autrement autorisé à télécharger et transformer. Respectez les conditions d'utilisation et les droits d'auteur de la plateforme source. Ne contournez jamais les DRM ou les contrôles d'accès techniques. --cookies-from-browser est facultatif et ne doit utiliser que la session authentifiée de l'utilisateur lui-même. Ne publiez pas une adaptation doublée sans confirmer les droits applicables.

Ce projet est destiné à l'apprentissage, à la recherche et aux échanges techniques. Ne l'utilisez pas pour des activités illicites, le clonage non autorisé de voix, la fraude, l'usurpation d'identité ou la diffusion de contenu trompeur. Consultez l'avertissement dans le fichier README.md ; les utilisateurs sont responsables de leur utilisation et de la distribution du contenu généré conformément à la loi applicable.

Skills associés