Communitygithub.com

iamjeffia/estudio-ia

Conception sonore et mixage vidéo en studio. Utilisez-la chaque fois que vous devez ajouter du son à une vidéo ou animation (effets synchronisés, musique, narration, mix final, prévisualisation sonore) ou enrichir la bibliothèque d'effets.

Qu'est-ce que estudio-ia ?

Cette skill vous guide dans la conception sonore complète d'une vidéo : synchronisation des effets sur les événements visuels, mixage avec la narration, intégration musicale et respect des niveaux de référence. Elle exploite le script `som.py` qui, à partir d'une liste d'événements et d'un fichier audio (voix, musique), génère un mix final, des stems séparés (effets, voix, musique, tons) et un rapport de conformité LUFS. Elle inclut également des outils pour analyser le tempo d'une musique (`batida.py` via beat_this), séparer la voix d'un morceau (`separar.py` via MelBand ou BS-RoFormer), niveler et cataloguer des packs d'effets, et vérifier le niveau d'un son d'ambiance avant livraison. La règle d'or est qu'un son décrit chaque action visible (pop, whoosh, impact, riser) et que le pic sonore tombe exactement sur l'image. La skill s'adresse aux utilisateurs de Claude Code, Cursor ou Codex et fonctionne dans un environnement Python avec `uv`.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/iamjeffia/estudio-ia/tree/HEAD/.agents/skills/som-do-video

Demander à votre IA préférée

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

Documentation

Son de la vidéo

Date : 2026-10-22 · Type : skill · Statut : en vigueur

Résumé : le son d'une vidéo part d'une liste d'événements (un par élément qui apparaît, disparaît ou frappe l'écran) et d'une commande, som.py, qui place chaque effet avec le pic sur la bonne image, installe la musique sous la voix et délivre le mix avec un rapport. Le son n'attend pas le rendu : une fois le timing de l'animation fixé, il peut déjà être fait. Les chiffres du mix ont un seul propriétaire, 06-méthode/règles.md ; cette skill fournit la méthode, les commandes et la table principale.

Quand l'utiliser

  • Toute vidéo avec motion, interface, tutoriel, publicité ou vidéo seulement musicale qui nécessite des effets synchronisés.
  • Vidéo narrée : voix sèche devant, musique en dessous, effets discrets.
  • Vidéo avec personnes ou lieux qui semble "muette" : son d'ambiance (ambiance et foley). Voir reference/son-ambiance.md.
  • Pour traiter une musique : mesurer les beats et le drop (batida.py) ou séparer la voix (separar.py).

La méthode

  1. Un son pour chaque action visible, et le son décrit l'action. Carte qui entre fait pop, bouton fait clic, changement d'écran fait whoosh, tampon frappe, chiffre défile. La densité est par action, pas par mot : au maximum deux effets sonores ensemble sous la voix.
  2. Seul un son motivé par l'image entre. Whoosh sur un cut fixe, horloge sans horloge à l'écran et riser sans rien qui monte déconnectent le son de la vidéo. Avant de mixer, regardez la vidéo et notez ce qui bouge, quand et avec quel matériau.
  3. Le pic tombe sur l'image de l'événement. Clic, pop, tampon et impact : le pic sur l'image où l'élément touche. Whoosh : le pic au milieu du geste (~0,2 s après le début ; la carte par défaut le fait déjà). Riser : se termine sec sur le drop ou le cut.
  4. Tonal seulement en hype, transition et surprise. Coup sur le ton à l'impact, sur le tampon et sur le logo ; pad court sur la grande transition ; cloche sur la révélation. Jamais sur clic, pop ou touche, qui deviennent "musiquette" et fatiguent. Passez --ton (ex. : Am) seulement quand la musique a un ton connu.
  5. Musique par moments, pas un tapis. Ouverture douce ; décélération avant le drop ; respiration ; climax sur la grosse caisse. Avec narration, la musique reste bien en dessous de la voix et monte dans les respirations et les passages sans parole.
  6. Respiration avant le drop. L'instrumental chute sec pendant ~0,3–0,5 s sur le dernier beat avant le drop (--drop T le fait), et le mot-clé ou le plus grand changement d'image va sur la première image du drop. Mesurez le drop avec batida.py, pas à l'œil.
  7. Couches seulement sur les pics. 2–3 sons ensemble sur le drop, le logo et la fermeture ; ailleurs, un son par action. Variez la hauteur quand le même son se répète (la carte alterne entre les variations de la catégorie).
  8. Voix sèche. Narration sans réverbération ni écho.
  9. Écoutez les couches séparées. som.py enregistre ecoute/voix.wav, musique.wav, effets.wav et tonals.wav. La synchronisation se vérifie sur le stem des effets, jamais sur le mix.

Chiffres principaux

Propriétaire : 06-méthode/règles.md. Si là-bas il y a un autre chiffre, c'est celui-là qui compte. La Table applique déjà ces valeurs toute seule.

QuoiValeur
Master avec voix ou musique−14 LUFS intégré, pic vrai ≤ −1 dBTP (limiteur à 4×)
Musique sous la voix~15 dB en dessous quand il y a de la parole (le rapport mesure ; acceptable 12–18)
Mix sans voix avec musique réellepiste nivelée à −19 LUFS avant les effets ; effets ×2,2 ; limiteur ; master −14
Pièce seulement son d'ambiance−25 LUFS intégré (plafond −24), court terme ≤ −20, momentané ≤ −16, pic ≤ −3. Ne jamais normaliser à −14
Son d'ambiance avec voixstem du son d'ambiance ≥ 15 LU sous la voix
Bibliothèque d'effetscourts −20 LUFS de pic momentané, nappes −24, pic ≤ −3 dBTP ; position at = événement − pic_ms/1000
Synchronisationmédiane ≤ 25 ms sur le stem des effets
Beatsbeat_this, File2Beats(checkpoint_path="final0") ; coupe à ≤ 2 images du beat

Pas à pas

Toutes les commandes s'exécutent depuis la racine du studio.

  1. Bibliothèque prête ? Si 05-bibliotheque/son/sfx/catalogue.json n'existe pas : uv run scripts/son/synthetiser_sfx.py. Sons enregistrés : uv run scripts/son/niveler.py <dossier du pack> (détails dans 05-bibliotheque/son/README.md).
  2. Événements. Exportez depuis le moteur d'animation un evenements.json dans le dossier audio/ du projet. Format, types acceptés et comment exporter depuis After Effects, HyperFrames et Remotion : reference/evenements.md.
  3. Musique avec beat ? uv run scripts/son/battement.py musique.mp3 --fps 30 donne BPM, temps forts et drop probable. Animez les coupes sur cette grille.
  4. Besoin de la voix ou de l'instrumental de la musique ? uv run scripts/son/separer.py musique.mp3 (voix + instrumental) ou --mode 6 (six stems).
  5. Mix :
    uv run scripts/son/son.py --evenements 04-projets/<video>/audio/evenements.json \
      --voix 04-projets/<video>/audio/voix.wav --musique 04-projets/<video>/audio/musique.wav \
      --video 04-projets/<video>/rendu/previsualisation.mp4 --drop 12.4
    
    Produit mix.wav, ecoute/*.wav, rapport-son.json et previsualisation-son.mp4 (l'image est copiée ; seul le son change).
  6. Lisez le rapport et corrigez jusqu'à n'avoir aucun avertissement. "événements sans son" = type que la carte ne connaît pas : changez le type par un connu, mettez "son": "catégorie" dans l'événement ou écrivez un --carte (ci-dessous). LUFS, pic et "musique sous la voix" hors cible apparaissent aussi.
  7. Son d'ambiance ? uv run scripts/son/verifier_son_ambiance.py <mix seulement ambiance> ou ... ecoute/effets.wav --voix ecoute/voix.wav. Non validé ne part pas en livraison.
  8. Écoutez. La prévisualisation avec son va au propriétaire du studio pour approbation. Dans la vidéo finale, exécutez la même commande avec --video rendu/final.mp4 : c'est un simple remux, sans nouveau rendu.

Sons propres au projet (--carte)

Un fichier .py avec CARTE = {type: fonction(M, e)} surcharge la carte par défaut seulement pour les types que vous listez :

# 04-projets/<video>/audio/carte.py
CARTE = {
    "logo": lambda M, e: (M.pose("logo", e["t"], -11), M.pose("impact", e["t"], -16), M.coup(e["t"], -20)),
    "piece": lambda M, e: M.pose("succes/succes-2", e["t"], -14, st=3),   # st = demi-tons au-dessus
}

Fonctions de la Table qui servent dans la carte : M.pose(son, t, gain_db, pan, aligne="pic"|"debut"|"fin", st=demi-tons, fin=duree, fondu=s, salle=True), M.tonal(t, lufs), M.coup(t, lufs), M.texture(t0, t1, lufs), M.riser(t_pic). son accepte une catégorie ("whoosh", alterne entre les variations), un fichier de la bibliothèque ("whoosh/whoosh-2") ou un chemin.

Commandes

ScriptPour quoi
uv run scripts/son/son.py --evenements E.json [--voix V] [--musique M] [--video P.mp4] [--ton Am] [--drop T] [--carte carte.py]le mix complet, le rapport et le son collé à la vidéo
uv run scripts/son/synthetiser_sfx.py [--echantillon preuve.wav]génère la bibliothèque initiale synthétisée
uv run scripts/son/niveler.py DOSSIER [--categorie X] [--nappe] [--destination D]met un pack au standard et met à jour le catalogue
uv run scripts/son/verifier_son_ambiance.py MIX.wav [--voix VOIX.wav]rejette un son d'ambiance trop fort (code de sortie 1)
uv run scripts/son/battement.py MUSIQUE [--fps 30] [--json grille.json] [--video rendu.mp4]beats, temps forts, BPM et drop (beat_this)
uv run scripts/son/separer.py MUSIQUE [--mode voix|6] [--sortie DOSSIER]voix + instrumental (MelBand Big Beta 4) ou 6 stems (BS-RoFormer SW)

Autres options de son.py : --voix-entre, --musique-entre, --musique-depuis (aligner des passages), --duree, --impact T0 T1 (musique monte au niveau de la voix), --lufs, --pic, --fx -10 (effets en LUFS relatifs à la voix), --sortie.

battement.py et separer.py utilisent l'IA et nécessitent l'extra : uv sync --extra cpu (ou --extra gpu avec carte NVIDIA). Les modèles se téléchargent seuls à la première utilisation (beat_this ~80 MB ; chaque modèle de séparation ~300–700 MB, stockés dans ~/.cache/estudio-ia/). Sans l'extra, les deux s'arrêtent avec l'instruction d'installation.

Erreurs courantes

SymptômeCause probableQue faire
Effets "trop forts" dans une vidéo d'ambianceson d'ambiance normalisé à −14son.py sans voix ni musique vise déjà −25 ; vérifiez avec verifier_son_ambiance.py
Effets disparaissent sous la musique dans une vidéo sans voixpiste masterisée (−8 à −11 LUFS)la Table nivelle la piste à −19 et monte les effets ×2,2 ; s'ils disparaissent encore, vol plus grand dans l'événement
Son "en retard" sur le whooshévénement marqué à la fin du gestemarquez le début du geste ; la carte place le pic 0,2 s après
Même son répété semble robotiquecatégorie avec une seule variationnivelez plus de sons dans cette catégorie ou utilisez un st différent dans --carte
Rapport : "catégories échangées"la bibliothèque n'a pas la catégorieexécutez synthetiser_sfx.py ou nivelez un pack avec cette catégorie

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

Skills associés