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
- 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.
- 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.
- 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.
- 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. - 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.
- Respiration avant le drop. L'instrumental chute sec pendant ~0,3–0,5 s sur le dernier beat avant le drop (
--drop Tle fait), et le mot-clé ou le plus grand changement d'image va sur la première image du drop. Mesurez le drop avecbatida.py, pas à l'œil. - 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).
- Voix sèche. Narration sans réverbération ni écho.
- Écoutez les couches séparées.
som.pyenregistreecoute/voix.wav,musique.wav,effets.wavettonals.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.
| Quoi | Valeur |
|---|---|
| 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éelle | piste 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 voix | stem du son d'ambiance ≥ 15 LU sous la voix |
| Bibliothèque d'effets | courts −20 LUFS de pic momentané, nappes −24, pic ≤ −3 dBTP ; position at = événement − pic_ms/1000 |
| Synchronisation | médiane ≤ 25 ms sur le stem des effets |
| Beats | beat_this, File2Beats(checkpoint_path="final0") ; coupe à ≤ 2 images du beat |
Pas à pas
Toutes les commandes s'exécutent depuis la racine du studio.
- Bibliothèque prête ? Si
05-bibliotheque/son/sfx/catalogue.jsonn'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). - Événements. Exportez depuis le moteur d'animation un
evenements.jsondans le dossieraudio/du projet. Format, types acceptés et comment exporter depuis After Effects, HyperFrames et Remotion : reference/evenements.md. - Musique avec beat ?
uv run scripts/son/battement.py musique.mp3 --fps 30donne BPM, temps forts et drop probable. Animez les coupes sur cette grille. - 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). - Mix :
Produituv 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.4mix.wav,ecoute/*.wav,rapport-son.jsonetprevisualisation-son.mp4(l'image est copiée ; seul le son change). - 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. - 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. - É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
| Script | Pour 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ôme | Cause probable | Que faire |
|---|---|---|
| Effets "trop forts" dans une vidéo d'ambiance | son d'ambiance normalisé à −14 | son.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 voix | piste 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 geste | marquez le début du geste ; la carte place le pic 0,2 s après |
| Même son répété semble robotique | catégorie avec une seule variation | nivelez 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égorie | exécutez synthetiser_sfx.py ou nivelez un pack avec cette catégorie |