Rendu — musique, sons, sous-titres, export final
Entrée : videos/<video>/ avec un storyboard.json approuvé (adapté à la voix : contient audio
et timing) et un audio/voice-script.json approuvé. Sortie :
audio/music.wav musique choisie ou générée
audio/mix.wav bande sonore finale (voix + musique duckée + SFX), -14 LUFS
audio/mix.json chaque événement sonore (plan, repère, fichier, temps) pour vérification
render/final.mp4 1080x1920 (selon le format), 30 ips, H.264 + AAC
render/cover.png couverture / miniature en pleine résolution
render/qc.json rapport de contrôle qualité
Cette étape ne modifie pas les visuels ni les paroles. Animation ou timing erroné → compétences storyboard / voix-off. Gratuit par défaut : musique de bibliothèque ou générée par code, effets sonores générés par code. Musique payante (générée par IA) seulement si l'utilisateur le demande ou approuve un devis.
Étape 1 — Musique
- Lire le
music.mood/ lesnotesdu storyboard et la durée de la vidéo. - Chercher dans
studio/library/music/(index.jsonliste les pistes avec tags d'ambiance, bpm, licence). Choisir la meilleure correspondance ; si aucune ne convient, le dire. - Pas de correspondance → générer la solution de repli gratuite, avec le lift ("drop") au début du
plan de révélation (temps de début de scène — calculé à partir des durées/transitions) :
node studio/scripts/make-music.mjs --out videos/<video>/audio/music.wav --duration <s> --mood upbeat|calm|cinematic|tense --bpm <n> --drop <s> [--silence <from>-<to>](tense: tonalité mineure, pulsation de battement, fin non résolue ;--silencecoupe une fenêtre avant un son de révélation — en ambiance tense, une horloge qui tic-tac suit). Vidéo Univers : suivreuniverse.json→music/sfx. Pistes de la bibliothèque : copier/convertir enaudio/music.wav; le rognage, le fondu et le ducking se font dans le mixage. - Enregistrer dans
storyboard.json→music.file,music.source(piste + licence, ou "code-generated"), facultatifmusic.db(par défaut -16 dB avant ducking).
Étape 2 — Effets sonores
Les repères sont déjà dans les sfx de chaque plan (mots simples, ancrés aux images ou aux mots
parlés par l'étape voix-off). Le mixeur fait correspondre les mots → sons via
studio/library/sfx/index.json (généré par node studio/scripts/make-sfx.mjs ; les sons
personnalisés vont dans custom, vérifiés en premier).
repeat + every jouent un repère plusieurs fois ; syncEnd: true le place à la fin du plan ;
les montées sonores se terminent sur leur repère. Les whoosh de transition sont facultatifs
(--auto-whoosh) — l'utilisateur préfère un son discret : moments signature uniquement
(≈ 1 repère toutes les 2 s au maximum, aucun sur la plupart des transitions). Si un storyboard a
beaucoup plus de repères que cela, les réduire aux moments clés avant le mixage et le dire.
Corriger les lignes "No sound matched" du mixeur en ajoutant des mots-clés ou un son
personnalisé — jamais en modifiant la conception du storyboard.
Étape 3 — Mixage
node studio/scripts/mix.mjs videos/<video> (--dry pour prévisualiser le nombre d'événements
d'abord)
La voix reste au-dessus ; la musique est duckée par la voix (sidechain) et fondue à la fin ; SFX à
-12 dB (--sfx-db, ou storyboard.sfxDb) ; limiteur de mastering et normalisé à -14 LUFS /
-1,5 dBTP. Définit storyboard.finalAudio. Relancer après toute modification audio.
Étape 4 — Sous-titres
Activés par défaut pour les formats sociaux. Dans storyboard.json :
"captions": { "enabled": true, "y": 83, "size": 50, "skipLines": ["L11"] }
- Les phrases (≤ 4 mots, équilibrées, coupées sur les pauses) proviennent des timings vocaux ; le mot parlé est surligné dans la couleur de surbrillance de la marque.
skipLines: lignes VO dont les mots sont déjà à l'écran (numéros de téléphone, URL).- Par plan :
captionY(% du cadre) pour les déplacer,captions: falsepour les masquer là où les mêmes mots sont à l'écran (ex. un nom en bas de l'écran). - Les garder dans la zone de sécurité (83 % par défaut) et hors des éléments de design importants.
Vérifier avec une planche contact (les sous-titres apparaissent sur les images où quelqu'un parle) :
node studio/scripts/render.mjs videos/<video>/storyboard.json --sheet --scale 0.25 --out <scratchpad>/captions-sheet.png
Regarder une fois ; corriger les collisions avec captionY / captions: false.
Étape 5 — Rendu final, couverture, QC
node studio/scripts/render.mjs videos/<video>/storyboard.json --final
node studio/scripts/render.mjs videos/<video>/storyboard.json --cover
node studio/scripts/qc.mjs videos/<video>
Le QC doit passer : résolution, fréquence d'images, codecs, durée = storyboard, loudness
-14 ±1,5 LUFS. Avertissements (pic réel, silences, images noires) → expliquer ou corriger. Ne pas
regarder le MP4 ; envoyer render/final.mp4 (et la couverture) à l'utilisateur avec le résumé QC
et ce que contient le mixage (source musicale, nombre d'événements sonores, sous-titres
activés/désactivés).
Étape 6 — Approuver
Utilisateur satisfait → "status": "final" dans storyboard.json → render, terminé.
Modifications : retouches musique/son/sous-titres → étapes 1 à 5 ici ; changements visuels ou de
timing → compétence storyboard / voix-off, puis relancer cette étape.