Communitygithub.com

resolve-multicam-workflow

Compétence Claude Agent pour DaVinci Resolve Studio : synchronisation audio, montage multicam automatique à partir d'une transcription Whisper, étalonnage cinéma via des nodes de groupe partagés, contrôle qualité flou/tremblement non destructif avec changement d'angle, et incrustation de titres. Par wunder-media.

Qu'est-ce que resolve-multicam-workflow ?

Ce skill définit un pipeline complet et éprouvé pour la création de projets vidéo multicam dans DaVinci Resolve Studio, entièrement piloté par script et sans intervention manuelle dans l'interface graphique. Il automatise les étapes clés : synchronisation audio (via cross-corrélation ou Timecode Atomos AirGlu), transcription avec faster-whisper large-v3, découpage automatique basé sur les pauses de parole, construction du clip multicam (via manipulation directe du DRT XML, contournant la limitation de l'API), étalonnage cinématographique avec une chaîne de 4 nodes partagés (incluant émulation pellicule, LUT de finition et création de look film), et insertion de titres overlay. Le skill insiste sur la non-destructivité (nodes réglables, jamais de LUTs gravées), le partage des nodes entre angles de caméra pour une correction uniforme, et la vérification systématique des erreurs (comme les trous noirs dans les clips multicam). Il propose également une méthode de rendu des vidéos courtes (Instagram, extraits) qui préserve les angles multicam, contrairement à un simple AppendToTimeline. Le guide inclut de nombreuses références (procédure pas à pas, outils API, pièges à éviter, étalonnage couleur) et des scripts prêts à l'emploi dans le dossier `vorlagen/`. Le skill bénéficie de permissions explicites pour contrôler DaVinci Resolve via computer-use et scripts Python, et clarifie les réponses techniques récurrentes pour éviter des questions inutiles.

Compatible avec✓Claude Code~Codex CLI~Cursor
npx skills add web594/resolve-multicam-workflow

Demander à votre IA préférée

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

Documentation

Créer un projet film (wunder-media)

Pipeline éprouvé des projets Projet-A → Projet-C → Projet-B. Toujours suivre ce déroulement, ne pas réinventer. Dossier de travail par projet : C:\claude\resolve-prep\<nom_court>\.

À lire en premier (dans cet ordre)

  1. references/ablauf.md — les 8 étapes des données brutes au montage multicam finalisé avec titres. Les « décisions » auparavant ouvertes sont désormais répondues en haut dans Autorisations & réponses permanentes — ne pas redemander.
  2. references/api-werkzeuge.md — ce que Resolve peut faire par script (rctl.py, grade-set, node-add, Fusion, modèle de titre) et où sont les limites dures de l'API.
  3. references/fallstricke.md — pièges appris à grands frais. Avant chaque étape, vérifier brièvement si quelque chose concerne l'étape en cours. Cela évite la plupart des impasses.
  4. ⭐ references/farbgebung.md — quel skill de look est utilisé : le standard est resolve-kino-look-nodekette, le remplacement est resolve-lut-look-kette ; les LUTs/outils achetés d'abord ; et la vérification de la caméra (caméscope grand public Rec.709 → émulation film pas du tout ou seulement un très faible %). Lire avant tout étalonnage. Ensuite references/kino-look-nodekette.md — la même chaîne sous forme de recette avec toutes les valeurs mesurées et le modèle DRX (chaîne entière en 0,04 s au lieu d'une heure de clics).
  5. ⭐ references/vorbild-projekt.md — le modèle pour les projets multicam : structure des dossiers, état attendu de la médiathèque (y compris le Bin Anlegen), le déroulement couleur éprouvé et la limite Claude ↔ Humain. À lire pour chaque projet multicam — décrit précisément l'état jusqu'auquel Claude crée de manière autonome.
  6. references/timecode-sync.md — variante de l'étape 2 : caméras fonctionnant avec Atomos AirGlu avec timecode commun → décalages directement à partir des fichiers au lieu de la corrélation croisée. Contient la configuration des appareils (serveur/client, région Europe, le piège « Source accroché sur HDMI ») et la contre-épreuve obligatoire vorlagen/tc_pruefen.py. À lire si les données brutes proviennent de Shogun/Ninja Ultra et portent un timecode.
  7. references/grafik-einblendungen.md — étape 9 : intégrer des infographies/overlays et livrer la vidéo (YouTube long + Instagram court). À lire pour les séries de conférences/interviews avec un intervenant récurrent avant de construire les graphiques.
  8. vorlagen/ — scripts modèles prêts à l'emploi (issus du Projet-B, le plus propre). Copier vers C:\claude\resolve-prep\<nom_court>\, ajuster les constantes d'en-tête, exécuter. overlay_tools.py s'exécute directement (check / zoomsafe / mov / place).

Résumé du déroulement

#ÉtapeOutil
1Examiner les données brutes (ffprobe : caméras, parties, fps, pistes audio, Log/Rec709)references/ablauf.md
2Synchronisation audio avec la piste principale (Tascam/dr10L), décalages en JSONvorlagen/sync.py
2bAvec enregistreurs Atomos AirGlu : décalages directement depuis le timecode au lieu de la corrélation croisée — le prouver d'abord avec tc_pruefen.pyreferences/timecode-sync.md, vorlagen/tc_pruefen.py
3Projet + Bins + Import + Timeline source par caméravorlagen/prep.py
4Transcription (faster-whisper large-v3, CUDA)vorlagen/transcribe.py
5Plan de coupe automatique à partir des pauses de parole (paramètres calmes, voir ci-dessous)vorlagen/make_cutplan.py
6Timeline de montage. Avec ≥2 caméras, TOUJOURS multicam avec coupes — clip multicam par construction DRT, PAS par interface graphiquevorlagen/mcbuild/build_mc_drt.py
6bVérification image-son (obligatoire) : la timeline de montage est RACCOURCIE par rapport à la durée audio (passages sautés sans image) - morceler le son, puis mesurervorlagen/sync_pruefen.py
7Vérifier (trous, chevauchements, angles, rendu image noire), puis étalonnage (skill resolve-kino-look-nodekette, nodes partagés)vorlagen/verify_cut.py, references/farbgebung.md
8Post-traiter : trouver le bon début, enlever l'organisationnel, échanger les angles flous/tremblants ; générique de début (overlay)references/ablauf.md
8bNettoyer + remise : timelines intermédiaires dans le Bin Anlegen, vérifier l'état cible par rapport au modèlereferences/vorbild-projekt.md
9Incrusations graphiques + livraison (infographies à partir de la transcription, Instagram court 9:16, sous-titres, −14 LUFS)references/grafik-einblendungen.md, vorlagen/overlay_tools.py, vorlagen/infografik/, vorlagen/verify_overlays.py, vorlagen/instagram_kurz.py

Prérequis toujours : Resolve en cours d'exécution, Paramètres → Système → Général → « Scripting externe » = Local. Si scriptapp("Resolve") is None → redémarrer complètement Resolve.

⛔ NE PAS OUBLIER : Le multicam est créé ENTIÈREMENT par script — jamais à la souris

Instruction de l'utilisateur (27.07.2026, explicite) : Cette connaissance ne doit pas être perdue à nouveau, et elle DOIT être exécutée ainsi, pas autrement. Les versions antérieures de ce skill affirmaient que le clip multicam « ne se fait qu'à la main dans l'interface graphique ». C'est faux. Il est construit avec vorlagen/mcbuild/build_mc_drt.py → import_mc2.py → verify_mc.py (vérifié le 27.07.2026, Resolve 21.0.3 : clip multicam + 21 angles montés sans un seul clic).

Résumé de la procédure (détails dans references/ablauf.md étape 6) :

  1. Construire une timeline de montage imbriquée (apply_cut.py) et l'exporter en DRT (Timeline.Export(chemin, 1)).
  2. À partir d'un projet antérieur quelconque avec multicam, exporter un DRT comme modèle.
  3. build_mc_drt.py insère dans le nouveau DRT un élément <Sm2MpMulticamClip> + un SeqContainer de définition (une piste par caméra, UserDefinedName = « Angle N », MediaRef = DbId de la timeline source) et redirige les clips de coupe vers le multicam.
  4. ImportTimelineFromFile → timeline de montage multicam prête.

⭐⭐ Le seul piège qui fait échouer : L'association Séquence multicam → conteneur de définition ne se trouve pas dans le XML en clair, mais codée en UTF-16 dans les FieldsBlobs zstd de MpFolder.xml. Par conséquent, ne jamais générer de nouveaux UUIDs — les DbIds de l'élément multicam, de la séquence et du conteneur issus du modèle doivent être repris inchangés (Resolve attribue de toute façon de nouveaux IDs lors de l'importation). Sinon, un clip multicam sans angles apparaît : Frames 0, image noire.

Autorisations & réponses permanentes — NE PLUS REDEMANDER

L'utilisateur a décidé ; Claude l'exécute sans redemander et crée le projet jusqu'au montage multicam finalisé et étalonné avec titres de manière autonome.

Autorisations à prendre immédiatement dès le début (ne pas demander une par une) :

  • Activer computer-use tout de suite : request_access(["DaVinci Resolve"]), motif « Contrôler Resolve (multicam, étalonnage, titres) ». Couvre toute la pipeline ; ne redemander que pour un programme SUPPLÉMENTAIRE. Lancer Resolve si nécessaire via open_application.
  • Les scripts/vérifications se font via Bash + py C:\claude\resolve-ctl\rctl.py … et les scripts modèles — partie intégrante, simplement exécuter (pas besoin de demander).
  • Médias hors ligne (projet créé sur un autre disque, p. ex. E:→F:) ? Relier à nouveau sans redemander : mp.RelinkClips(clips, r"<dossier du projet sur le disque actuel>").

Réponses techniques permanentes (ne plus jamais redemander) : 0. Rythme de montage : légèrement plus calme qu'avant (utilisateur, 27.07.2026). Dans le Projet-A, certaines coupes arrivaient trop tôt : après une coupe, le spectateur a besoin de quelques secondes pour s'adapter à la nouvelle image — si un contre-champ court suit immédiatement, l'effet est saccadé. Quelques secondes de plus par plan suffisent. Valeurs dans make_cutplan.py : MIN_SHOT 6.0, CUT_MIN 6.0, CUT_MAX 11.0, PARA_GAP 1.2, MAX_STD 50, CALM_GAP 12.0 (pause de calme : après un cutaway, pas de nouveau), division mécanique 55/42/10. De plus : premier plan toujours caméra principale et pas de cutaways avant le début du contenu (ANFANG), sinon une coupe tombe juste après le début du film.

  1. ≥2 caméras → TOUJOURS livrer le multicam monté (véritable clip multicam par construction DRT, vorlagen/mcbuild/), afin que l'utilisateur puisse basculer chaque clip sur une autre caméra lors de l'édition. Ne plus demander « Nesting ou Multicam ». ⭐⭐ Cela vaut aussi pour TOUTE vidéo dérivée — version courte, extrait, copie de travail, version Instagram (utilisateur, 23.08.2026, explicite) : Elles doivent être de véritables timelines multicam avec les angles du montage principal, sinon l'utilisateur ne peut plus échanger de plan lors du montage fin. ⛔ AppendToTimeline avec le clip multicam ne SUFFIT PAS — cela met certes des clips multicam dans la timeline cible, mais tous sur l'Angle 1 ; la sélection d'angle est perdue. L'angle n'est que dans le FieldsBlob du clip et n'est pas définissable via l'API. Bonne méthode : vorlagen/kurzvideo_drt.py + vorlagen/kurzvideo_import.py (exporter le montage principal en DRT, reprendre les clips des passages souhaités avec FieldsBlob inchangé, recalculer Start/Duration/In, importer ; audio ensuite par passage via l'API sur A1). L'étalonnage vient avec le DRT. 1b. ⭐⭐ Fréquence de lecture = fréquence de la timeline — À DÉFINIR IMMÉDIATEMENT lors de la création (utilisateur, 23.08.2026). proj.SetSetting("timelinePlaybackFrameRate", "<fps>") appartient au même bloc de paramètres que timelineFrameRate, avant que la première timeline n'existe. Si elle est mal définie (par défaut souvent 24), le son est de mauvaise qualité à la lecture — et dès qu'une timeline existe dans le projet, SetSetting refuse le changement (False, même au niveau de la timeline). Dans l'interface, c'est encore possible : roue crantée en bas à droite → Paramètres principaux → Format de timeline → taper « Fréquence de lecture » → Enregistrer. La définir lors de la création évite ce détour.
  2. Look — le standard est fixé, NE PAS demander la direction, simplement construire (utilisateur, 18.08.2026). Détails et vérification de la caméra : references/farbgebung.md.
    • ⭐ Standard : Skill resolve-kino-look-nodekette — la chaîne de 4 nodes Émulation film → Balance des blancs+Luminosité (réglable) → LUT de finition (40 %) → Générateur de look film (Halation/Vignette). Transférable complètement par DRX (0,04 s). Nécessite projet en DaVinci YRGB (pas Color Managed).
    • Remplacement : Skill resolve-lut-look-kette — même idée sous forme de chaîne pure LUT (Log→ARRI Rec.709 · node réglable · Rec.709→ARRI LogC · Émulation film · Look cinéma). À prendre si les plugins manquent/ne correspondent pas à la caméra, si une série est déjà construite dessus ou si l'utilisateur le souhaite.
    • Dans les deux chaînes, d'abord les LUTs et outils ACHETÉS ; les versions gratuites seulement si un outil manque ou si la caméra n'a pas de profil dans le plugin.
    • ⚠️ Avant de construire, vérifier quelles caméras sont dans le projet. Matériel Log (FS7 II, S-Log3) → chaîne comme prévu. Caméscope grand public Rec.709 (Sony AX100, CX900E et similaires) → Émulation film pas du tout ou seulement un très faible %, sinon les couleurs deviennent artificielles ; obtenir le caractère film via les autres nodes. → Toujours construire la chaîne de nodes, sans redemander. Faire confirmer seulement la luminosité fine.
  3. LUTs UNIQUEMENT pour ces trois étapes de look. Chaque correction (balance des blancs, luminosité, dominante/ magenta/bleu, saturation, contraste) comme valeur de node réglable de Resolve, jamais comme LUT gravée supplémentaire — afin que l'écart par rapport à l'original reste traçable et que les valeurs individuelles soient réversibles.
  4. ⭐ Contenus de nodes identiques entre caméras = Nodes PARTAGÉS (Shared Nodes) : les nodes de look identiques (conversion ARRI, stock film, cinéma) comme nodes partagés, afin qu'une modification agisse sur TOUS les clips/caméras. Seules les corrections spécifiques à la caméra (p. ex. ajustement large→rapproché) restent locales. Détails dans references/ablauf.md/fallstricke.md. 4b. ⭐⭐ Node de balance des blancs : UN node partagé par angle — toujours le créer ainsi (utilisateur, 24.08.2026, explicite « merci de mémoriser pour toujours »). Le node réglable 2 (« Balance des blancs + Luminosité ») est créé par angle comme un node partagé qui se trouve sur tous les clips de cet angle — alors une correction modifie l'angle entier d'un coup. Il n'est pas partagé entre angles (chaque angle a ses propres valeurs). Les nodes de look 1/3/4 sont de toute façon partagés. Recette (vérifiée le 24.08.2026 sur Projet-M, 3 angles × 21/22 clips) :
    1. Dans la timeline … import de l'angle, aller sur un clip de référence (SetCurrentTimeline + SetCurrentTimecode, OpenPage("color")).
    2. Un seul clic en computer-use : Clic droit sur le node 2 → « Enregistrer comme node partagé ». (L'API ne peut pas le faire ; un clic est acceptable.)
    3. Tout le reste par script : refItem.CopyGrades(tous_les_autres_clips_de_l_angle) — CopyGrades transfère les nodes partagés comme le même objet, le label devient partout … Shared Node <n>. Cela vaut aussi entre timelines : les copies des timelines d'angle créées lors de l'import DRT des vidéos courtes (… nah import 1…12), les traiter en même temps, sinon les vidéos courtes dépendent d'un ancien étalonnage non repris.
    4. Vérifier : lire les labels des nodes (tous identiques ?) et mesurer une image par angle.
    5. Faire en même temps : Régler l'interpolation LUT sur tétraédrique — Shift+9 → Color Management → « Look-up-Tables » → « Interpolation 3D-LUT » → Enregistrer (pas de clé API).

4c. ⭐ Supprimer les copies de nodes partagés inutilisées à la fin (utilisateur, 27.08.2026, pour toujours). Chaque application d'une DRX/chaîne de look contenant des nodes partagés crée une nouvelle entrée dans la liste des nodes partagés, au lieu d'utiliser l'existante — en cas d'application clip par clip, donc une copie par clip (Projet-M : 198 entrées, dont seulement 12 utilisées, 186 fiches mortes, toutes octet-identiques). L'image reste correcte, mais la liste devient inutilisable et la base de données du projet grossit.

  • Éviter : Appliquer la chaîne une seule fois et utiliser CopyGrades pour la propager (en tant que node partagé, il ne crée pas de copie).
  • Purger a posteriori : vorlagen/remove_useless_shared_nodes.py (vérifié 27.08.2026 sur Projet-M : 186 → 12). Doit être exécuté après TOUT import DRT qui a chargé des nodes partagés. Le script compare le nodeIndex de tous les clips du projet avec la liste des nodes partagés, supprime les copies orphelines et rétablit l'ordre. Ne touche pas aux timelines archivées (celles avec (Archiv) ou (Backup) dans le nom de timeline — les conserver, car elles pourraient être nécessaires).
  1. Le profil de rendu EXISTE déjà — l'utiliser (profil avec sortie DNxHR HQ 10-bit, pas le recréer). Depuis l'interface (computer-use) ou ApplyColorGrade / CopyGrades ? ApplyColorGrade n'existe pas comme fonction de l'API publique (dans la console Workspace → Script → Resolve, cela dépend du nom de l'API). CopyGrades fonctionne, mais transmet tout l'étalonnage d'un clip complet, y compris les nodes partagés et le ColorSpaceTransform. Version plus sûre : l'utilisateur applique la DRX une fois par angle, puis le script CopyGrades distribue — voir la recette ci-dessus.

  2. Pour l'export DRT (étape 6) : Timeline.Export() exporte vers un dossier ; le fichier s'appelle <NomTimeline>.drt ; pour l'import ultérieur, ImportTimelineFromFile attend le chemin complet du fichier. L'API n'a pas de gestion d'erreur détaillée pour les échecs d'export — vérifier manuellement le fichier (existe-t-il ? taille plausible ?).

Questions explicites qui peuvent / doivent être posées :

  • Quand une décision technique entre deux options Toutes deux permises n'est pas clarifiée dans les références (p. ex. « Préfères-tu la version A ou B ? »).
  • Sélection de l'angle (étape 5) : Le plan de coupe ne contient que les points de montage (entrées/sorties) ; l'attribution réelle de l'angle (quelle caméra sur quel clip) reste une décision éditoriale — le script répartit par défaut avec un ratio de partitions mécanique (55/42/10 %). L'utilisateur PEUT le modifier explicitement (p. ex. « je préfère plus de caméra A, moins de B ») ou laisser la répartition automatique. Ne pas demander à l'avance — la répartition mécanique est le standard. Modifications uniquement sur demande.
  • Paramètres de la fenêtre de fusion (étape 8, titres) : Position et police sont basées sur le modèle ; ajustements uniquement sur demande.
  • Noms de fichiers de livraison : Suggérer une convention raisonnable, laisser confirmer.
  • Aucune EXPLICATION de code (pourquoi un script fonctionne de telle manière) — cela perd du temps et des tokens. Si un script échoue, lire l'erreur, la communiquer, suggérer une correction technique — pas de leçon.

⚙️ Valeurs de script (ne pas changer !)

Tirées des discussions avec le client et valables pour tous les projets de ce type :

ParamètreValeurRaison
MIN_SHOT6,0 sDurée minimale d'un plan (moins → trop saccadé)
CUT_MIN6,0 sIntervalle entre deux coupes (similaire)
CUT_MAX11,0 sRythme maximal (intervalles plus longs → ralentissement)
PARA_GAP1,2 sIntervalle entre un passage parlé et le suivant (trop court → chevauchement)
MAX_STD50Écart type max. dans le flux audio (limite de bruit de fond)
CALM_GAP12,0 sPause de calme après un cutaway (pas de nouveau cutaway)
partition55/42/10 %Caméra A/B/C (ou par défaut : angle principal ≈55 %, deuxième ≈42 %, troisième ≈10 %)
fps export50 fpsFréquence d'images de livraison pour tous les projets actuels
audio−14 LUFSNiveau de livraison pour les interviews/conférences (sans normalisation forte)

(Remarque : les 50 fps ne changent pas la fréquence de la timeline originale — les rushes peuvent être en 25, 50 ou 60 ; la sortie est toujours calculée en 50 fps. Applicable uniquement si les rushes le supportent raisonnablement.)

✂️ POST-PRODUCTION (Étape 8)

Après étalonnage et vérification, une dernière étape manuelle (ou via computer-use) :

  1. Début correct : Le plan de coupe place les premiers plans de la caméra A (≈65 s non parlées avant le contenu). Trouver le point où le sujet commence réellement à parler / l'action commence, couper avant — par exemple placer un marqueur blanc. Cette partie ne peut pas être automatisée, car elle nécessite la compréhension du contenu.
  2. Organisationnel : Enlever les annonces/instructions avant (éventuellement via une timeline de travail).
  3. Contrôle qualité : Parcourir la timeline → plans flous ou tremblants → échanger contre l'angle approprié. Avec le clip multicam, cela se fait directement dans la timeline (clic droit → changer d'angle). Les angles restent synchronisés car le clip multicam contient toutes les caméras.
  4. Titres : Insérer le générique de début (p. ex. modèle Overlay de Resolve). Le titre devrait durer environ 5-10 secondes, selon le projet.

À ce stade, le projet devrait être en état cible (comme décrit dans references/vorbild-projekt.md).

🚀 EXÉCUTION

  1. Activer computer-use → request_access(["DaVinci Resolve"]).
  2. Créer le dossier de travail local : mkdir C:\claude\resolve-prep\<nom_court>.
  3. Copier les scripts de vorlagen/ vers le dossier de travail.
  4. Suivre les 9 étapes (voir ci-dessus).
  5. En cas d'erreur, vérifier references/fallstricke.md et les logs Resolve.
  6. Une fois terminé : Nettoyer les nodes partagés (remove_useless_shared_nodes.py), ranger les timelines (Bin Anlegen), faire le point avec l'utilisateur.

📦 Dépendances

  • Python 3.10+ avec packages : whisper (faster-whisper), numpy, json (standard), subprocess (standard), shutil (standard).
  • DaVinci Resolve Studio 18.6+ (testé avec 21.0.3).
  • ffprobe (depuis FFmpeg) dans le PATH.
  • CUDA-compatible GPU pour Whisper (conseillé, mais CPU possible).
  • Le dossier vorlagen/ doit être copié dans le dossier de travail du projet.

Skills associés