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
-
Vérifiez les prérequis :
python3 scripts/check_environment.py -
Installez FFmpeg et les dépendances Python. Consultez le fichier
README.mdpour les commandes macOS, Windows et Linux. -
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 googleuniquement avec permission comme brouillon en ligne et peaufinez manuellement les segments horodatés, ou transmettez le JSON révisé via--segments-file. UtilisezOPENAI_API_KEYouDEEPSEEK_API_KEYuniquement lorsque cela est explicitement autorisé ; ne passez jamais à une API non autorisée. -
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 ./outputLes URL Bilibili peuvent inclure un paramètre de partie tel que
?p=2; transmettez l'URL cible complète. -
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) ; utilisezautopour la détecter. - La voix chinoise par défaut est
zh-CN-XiaoxiaoNeural; utilisez--voice zh-CN-YunxiNeuralpour une voix masculine jeune ou--voice zh-CN-YunyangNeuralpour une voix de narration masculine. - Pour une synthèse vocale naturelle sans frais par appel, préférez un modèle
Fun-CosyVoice3-0.5Binstallé localement en modezero-shotlorsqu'un clip de référence explicitement autorisé et une transcription exacte sont disponibles. Sinon, utilisezCosyVoice-300M-SFTavec 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 fichierREADME.mdpour les indicateurs. - Si Edge TTS est inaccessible, définissez
DASHSCOPE_API_KEYet utilisez--tts-provider dashscope --voice Cherrypour 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èleOLLAMA_MODELlocal explicitement configuré et s'arrête avant la traduction sinon. Sélectionnez--translation-provider openaiougoogleexplicitement 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 replaceremplace l'audio source par la voix chinoise (par défaut, fiable).--audio-mode mixconserve la piste originale à faible volume sous la voix chinoise.--audio-mode backgroundtente 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 softintè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, conservezsoftpour éviter un chevauchement de texte en double.burnincruste les sous-titres dans l'image et nécessite une version de FFmpeg avec le filtresubtitles/libass et une police chinoise utilisable.noneomet 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 chromeuniquement 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-intermediatespour 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.jsonpour 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_segmentsavec 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
- 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. - Utilisez ffprobe pour inspecter les flux et la durée. Extrayez l'audio PCM 16 kHz mono.
- Transcrivez avec faster-whisper, en conservant les horodatages source. Échouez clairement si aucune parole n'est détectée.
- 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.
- 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.
- 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.
- É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.
- 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.