Video Studio - montage vidéo automatique
Cette compétence produit des vidéos finalisées, et pas seulement des instructions. Tout passe par une porte unique : scripts/autovideo.py.
Les connaissances métier (angles de caméra, rythme, son, sous-titres, CapCut, films IA, leçons pratiques) se trouvent dans references/ pour
prendre les bonnes décisions lors de l'établissement du storyboard et de la lecture des rapports de contrôle qualité.
Chemin du script : dossier contenant ce fichier + /scripts/ (installation selon le README : ~/.claude/skills/video-studio/scripts).
0. Commandes slash pour l'utilisateur
/video:plan discuter idée - scénario - storyboard - éclairage · /video:make monter une nouvelle vidéo · /video:revoice remplacer la voix off ·
/video:subs sous-titres · /video:reframe changer de format (vertical/carré) · /video:library banque de plans · /video:qc contrôle qualité ·
/video:voices choisir une voix selon l'objectif · /video:fix corriger les saccades/fps/tremblements · /video:critic critique indépendante · /video:slop détecter et corriger les artefacts IA (AI slop) · /video:capcut exporter vers CapCut.
Si l'utilisateur s'exprime en langage naturel (sans utiliser les commandes), le système suit le tableau ci-dessous.
0b. Outils MCP video-studio (à privilégier quand ils sont disponibles)
Lorsque les outils mcp__video-studio__* sont présents dans la session, appelez-les directement plutôt que d'exécuter les scripts avec Bash :
- Rapides :
video_probe,video_qc,contact_sheet,voices_suggest,voices_catalogue,pronunciation_preview,shot_search,motion_stills,slop_check,slop_compare. - Tâches longues (renvoient
job_id, suivi viajob_status/job_list) :make_video,revoice_video,subtitle_video,convert_fps,reframe_video,stabilize_video,motion_graphic,critic_kit,voice_samples. Enregistrement unique :claude mcp add --scope user video-studio -e PYTHONIOENCODING=utf-8 -- python <repo>/scripts/mcp_server.py.
1. Choisir la commande selon la demande
| L'utilisateur veut | Action à réaliser |
|---|---|
| Créer une nouvelle vidéo à partir d'une idée/scénario + banque de sources (vidéos, images) | Écrire project.json selon templates/project_make.json → autovideo.py make project.json --out NOM_v1.mp4 |
| Changer la voix off / remplacer la voix d'une vidéo existante | autovideo.py revoice VIDEO.mp4 --script paroles.txt [--voice auto --muc-dich thoi_su] --out NOM_v1.mp4 [--subs] |
| Ajouter des sous-titres à une vidéo | autovideo.py subs VIDEO.mp4 --script paroles.txt --out NOM_sub.mp4 (détection automatique des repères sur l'audio) |
| Vérifier une vidéo avant livraison | autovideo.py qc VIDEO.mp4 (+ contact_sheet.py pour un contrôle visuel) |
| Changer le fps (24/25/30/50/60/120), ralenti, corriger les saccades | fps_convert.py convert SOURCE DEST --fps 24 [--slowmo 4] (RIFE GPU) |
| Passer du paysage au portrait/carré avec suivi du sujet ; panoramique/zoom virtuel ; stabilisation | camera.py reframe / move / stabilize |
| Sélectionner les meilleurs plans parmi les rushes, rechercher par description | shot_select.py scan / best / search |
| Étalonner les couleurs entre les plans, appliquer un look cinéma | grade.py match / look / apply |
| Exporter pour une plateforme, détecter les temps forts musicaux | deliver.py export <preset> / beats |
| Discuter idée, storyboard, éclairage, angles de caméra avant montage | /video:plan + references/11-dien-anh-cao-cap.md |
| Cartes de trajet, chapitres, graphiques de données (motion graphics par code) | motion_html.py stills/render + templates/motion/*.html, ou scène "nguon": {"html": ...} |
| Scénario/film qui sonne « IA » : phrases creuses, chiffres non sourcés, affirmations gratuites, rythme uniforme, effets excessifs | /video:slop (slop_guard.py mesure → nouvel agent propose des corrections → compare mesure à nouveau) |
| Évaluation du film avant envoi (évaluateur différent du monteur) | /video:critic (critic.py + nouvel agent, évalue jusqu'à ce que tous les critères ≥ 8) |
| Choisir une voix selon l'objectif | voices.py suggest --muc-dich thoi_su --gioi-tinh nu, générer 2-3 échantillons vocaux suggérés, les envoyer à l'utilisateur pour écoute |
| Transférer vers CapCut pour réglages manuels | ajouter --capcut NOM_BROUILLON à make/revoice, ou capcut_api.py build --spec |
| Film IA / micro-drama | references/09-phim-ai-pipeline.md + storyboard.py jobs |
Toutes les commandes sont automatiques : ne pas écraser les fichiers existants, sauvegarder les fichiers intermédiaires dans <sortie>_work/, écrire BAO_CAO_QC.md (défauts d'image, indice de saccade, LUFS, % de paroles correspondant au scénario). Lire le rapport avant d'envoyer et citer les mesures dans la réponse.
2. Créer project.json pour make (le plus important)
- Chaque
canh(scène) contient une idée unique de parole.nguon(source) peut être :{"file", "vao", "ra"}(vidéo),{"anh", "hieu_ung": zoom_in|zoom_out|pan_left|pan_right},{"mau": "#0E2440"}. - La durée de la scène se calcule automatiquement = max(
thoi_luong, durée de la voix + 0,9 s). La scène vidéo recule automatiquement à l'intérieur d'un plan original ; si la source n'est pas assez propre, la scène se retire automatiquement, pas de freeze. - L'image doit correspondre exactement aux paroles (bon chantier, bon événement) - choisir la source via
probe_qc.py --inventory+contact_sheet.pysur la source, ne pas deviner d'après le nom du fichier. chuyen_canh(transition) :cutpour une même idée,dissolvelors d'un changement d'idée/d'espace. Durée de scène ≤ 7-8 s.- Les paroles sont écrites comme parlées ; chiffres et unités en l'état (
119 km,100 km/h) -tts_vi.pynormalise automatiquement (trait d'union/tiret n'est pas lu comme « à »). chu_tren_hinh(texte à l'écran) : court, seulement les chiffres/noms présents dans les paroles ; ne pas utiliser "—".- Avancé :
fpsdu projet quelconque (sources à fps différent passent automatiquement parfps_convert), scène vidéo avecslowmo,camera(push/pan virtuel),on_dinh(stabilisation),khung_thong_minh(suivi intelligent du sujet lors de l'export vertical) ; le projet peut avoirmau(étalonnage + look) etcat_theo_nhac(montage sur les temps forts). - Pas de voix imposée :
"giong": "auto"(par défaut) choisit selon"muc_dich"(objectif :doanh_nghiepentreprise,thoi_suactualités,tai_lieudocumentaire,quang_caopublicité,mang_xa_hoiréseaux sociaux,huong_dantutoriel,sang_trongsolennel,tre_emenfants,su_kienévénement) +"gioi_tinh"(genre),"vung"(région),"am_sac"(timbre : grave/moyen/aigu), basé sur le profil de chaque voix (voices.py profile: justesse de prononciation, hauteur, vitesse). Ou spécifier : nom de voix VieNeu,{"edge": "vi-VN-HoaiMyNeural"},{"clone": "mau_giong.wav"}(le locuteur doit donner son accord), ou enregistrement réel"ghi_am": "cau3.wav"pour chaque scène. Chaque scène/personnage peut avoir une voix différente. Toujours proposer 2-3 voix suggérées (voices.py suggest) à l'utilisateur pour écoute avant validation. - Précision : dictionnaire de prononciation
templates/phat_am.json+"phat_am"propre au projet (abréviations, noms propres) ; chaque phrase est écoutée par Whisper, si une phrase a une précision <"do_chinh_xac"(0,97), elle est relue automatiquement jusqu'à"doc_lai"fois, avec rapport par phrase ; les sous-titres sont alignés mot par mot. - Options de montage :
"phong_cach"(style) :trang_trong(solennel) |dien_anh(cinéma, letterbox 2.39, filmique) |tai_lieu(documentaire) |nang_dong(dynamique, montage sur les temps forts) |mang_xa_hoi(réseaux sociaux, suivi du sujet). Transitions par scène :cut,dissolve,fade_black,dip_white,wipe_left/right,slide_left/right,zoom_in. Format :"khung":fill(remplir, rogner) |fit_blur(conserver intégralité, fond flou) |smart(suivi du sujet)."letterbox": 2.39. Toutes les options peuvent être écrasées scène par scène. - Graphismes animés :
"nguon": {"html": "templates/motion/route_map.html", "params": {...}}(carte de trajet dessinée progressivement, cartes chapitre...).makeexporte également une version audio seule_chi_nhac.mp4. Brief du réalisateur +facts.mdavant le montage d'un grand film (references/12). - Anti artefacts IA :
"facts": "facts.md"(chaque chiffre + phrase originale + document + date) et"luat": ["~/.video_studio/luat/<client>.json"](règles du client, en dehors du dépôt).makevérifie automatiquement et inscrit une section « Anti artefacts IA » dans le rapport ;"chan_khi_slop": truepour s'arrêter s'il reste des chiffres inventés ou des violations de règles. Si le client modifie une phrase manuellement, recopier le texte exact dans le livre de règles (slop_guard.py ghi) pour que les films suivants le détectent automatiquement (references/13). - Sélection automatique de plans :
"kho_canh": "kho.json"(provenant deshot_select.py scan --clip) et"nguon": {"tim": "aerial view of a highway at sunset"}→ récupérer le plan le plus pertinent, suffisamment long, pas déjà utilisé, de bonne qualité. Écrire la description de recherche en anglais.
3. Règles immuables
- Ne pas supprimer/écraser une version livrée. Nouvelle version
_vN. Remplacer la version principale uniquement après approbation de l'utilisateur :mv -nde l'ancienne version vers_luu_<description>,cp -nde la nouvelle,cmppour confirmer. - Mesurer avant de parler - utiliser les chiffres du
BAO_CAO_QC.md; si pas encore mesuré, dire que ce n'est pas mesuré. - Contenu véridique : chantier/unité corrects, pas de stock étranger, pas de QR, pas de pub, pas de slogan hors sujet, pas de personnes non autorisées.
- Traduction à 100 % du sens et du contexte ; en cas de doute, demander.
- Ne pas saisir de mot de passe/clé API à la place de l'utilisateur.
- Télécharger les modèles uniquement de sources fiables, privilégier
.safetensors, installer un venv dédié. - Communication en français.
- Ne pas fournir de chiffres inventés : tout chiffre à l'écran ou dans la narration doit figurer dans
factsou être déclaré[calcul: ...]. Les corrections proposées par un agent ne sont acceptées qu'après une nouvelle mesure viaslop_guard.py compare(l'auteur ne peut pas s'auto-valider).
4. Charger les références si nécessaire
| Quand | Fichier |
|---|---|
| Processus, versions, rapport client | references/01-quy-trinh.md |
| Angles de caméra, taille de plan, rythme de coupe, transitions, images fixes | references/02-ngon-ngu-hinh-anh.md |
| Saccades, à-coups, images aberrantes, changement de fps | references/03-khung-hinh-chuyen-dong.md |
| Couleur, scale/crop, logo, export | references/04-hinh-anh-mau-xuat.md |
| Voix, TTS, musique, LUFS | references/05-am-thanh-giong-doc.md |
| Sous-titres, traduction, texte à l'écran | references/06-phu-de-dich-chu.md |
| CapCut (MCP, VectCutAPI, web) | references/07-capcut.md |
| QC avant livraison | references/08-qc-giao-file.md |
| Films IA / micro-drama | references/09-phim-ai-pipeline.md |
| Leçons apprises à nos dépens | references/10-bai-hoc-thuc-te.md |
| Éclairage, objectifs, ouverture/obturateur/ISO/ND selon situation, prompt vidéo IA, angles, couleur, son, montage | references/11-dien-anh-cao-cap.md |
| Anti artefacts IA : chiffres sourcés, livre de règles client, relecteur aveugle, re-mesure avant validation | references/13-chong-ai-slop.md |
| Brief du réalisateur, règles anti « mouvement IA », graphismes par code, cycle de critique, grands projets (GES, 3D, état des lieux) | references/12-dao-dien-motion-va-phe-binh.md |
5. Scripts
| Script | Rôle |
|---|---|
autovideo.py | Porte principale : make, revoice, subs, qc |
voices.py | Profil de chaque voix, suggestion par objectif, multiples sources vocales (VieNeu, Edge, clone, enregistrement) |
accuracy.py | Dictionnaire de prononciation, écoute phrase par phrase, relecture automatique des phrases incorrectes |
motion_html.py | Graphismes animés en HTML + seek(t) (Playwright), motion blur subframe automatique |
critic.py | Kit d'évaluation indépendant : contact/phone/strip, images mortes, texte suffisamment long, vérification artefacts IA (avec slop_guard) |
slop_guard.py | Anti artefacts IA déterministe : chiffres sourcés/déduits, phrases creuses, affirmations gratuites, rythme, montage uniforme, livre de règles client ; compare valide/rejette les corrections |
mcp_server.py | Serveur MCP : 21 outils (rapides + file d'attente de jobs) pour que Claude appelle directement |
probe_qc.py | Inventaire des sources / QC vidéo (images aberrantes, flashs, images répétées, freeze, saccade, cadence, LUFS, bordures noires) |
contact_sheet.py | Planche contact 3 images/plan pour contrôle visuel |
fps_convert.py | Convertisseur fps 24-120, ralenti, motion blur 180°, détection d'images interpolées (RIFE/flow) |
camera.py | Recadrage intelligent (visage + saillance), panoramique/zoom virtuel, stabilisation vidstab |
shot_select.py | Banque de plans : détection de plans, notation, recherche par description (CLIP) |
grade.py | LUT d'étalonnage, balance automatique, look ; application de LUT |
deliver.py | Préréglages d'export par plateforme, détection des temps forts musicaux |
cadence_fix.py | Correction de cadence par segment via optical flow (ancienne version, pas besoin de GPU) |
tts_vi.py | VieNeu-TTS vietnamien (25 voix), normalisation du texte, exécution automatique dans un venv dédié |
speech_check.py | % de paroles correspondant au scénario (Whisper), estimation du dialecte |
voice_mix.py | Placement des paroles sur les repères, chaîne de traitement vocal, ducking, LUFS, montage vidéo |
subs.py | Découpage des sous-titres, SRT/ASS, incrustation |
demucs_split.py | Séparation voix/musique |
capcut_api.py | Création d'un brouillon CapCut desktop via VectCutAPI |
storyboard.py | Vérification du storyboard, shotlist, file d'attente de jobs pour films IA |
Environnement (installation via install.ps1) : ffmpeg dans le PATH ; Python 3.12 (numpy, opencv, soundfile, librosa, Pillow, faster-whisper, torch, demucs) ;
VieNeu dans ~/tools/venv_vieneu (modifiable via VIENEU_PY) ; RIFE dans ~/tools/rife/ (RIFE_BIN) ; YuNet dans ~/tools/models/ (YUNET_ONNX) ; VectCutAPI dans ~/tools/VectCutAPI (port 9001).