Communitygithub.com

sound-design

Conception sonore pour vidéos avec l'interface en ligne de commande locale AudioFX (`sfx`). 65 effets sous forme de filtres ffmpeg, incluant des moments cinématographiques synthétisés ancrés à la seconde près (impact, montée, whoosh, sub drop, braam de bande-annonce, silence avant le drop, coupure avec queue de réverb, réverb ou écho jeté, bégaiement, voix de bande-annonce, voix d'archive), des échantillons enregistrés superposés à une seconde exacte (depuis la bibliothèque sonore de l'utilisateur comme Epidemic Sound, depuis ElevenLabs ou des fichiers locaux), le mixage voix-musique-effets sur une ligne de temps avec la musique mise en retrait sous la voix, la musique ajustée à la vidéo (un morceau coupé à la longueur de la vidéo avec son drop sur la coupe principale, pistes traitées une par une) et des traitements (radio AM, ligne fixe, téléphone portable, haut-parleurs d'appareil, talkie-walkie, vieille télé, vinyle, cassette, sous-marin, derrière le mur, réverb de salle de bain à cathédrale, écho, lointain, robot, monstre, fantôme, rêve, flashback, choc post-explosion, ralenti, arrêt de bande, balayages de filtre, gonflement inversé, passe-bas/haut, voix nette, normalisation LUFS).

Qu'est-ce que sound-design ?

Sound-design pour vidéos est une compétence d'agent IA qui transforme la conception sonore en filtres ffmpeg via l'outil CLI `sfx`. Elle offre 65 effets, allant de moments cinématographiques synthétisés (impact, montée, whoosh, braam, sub drop, etc.) à des échantillons réels superposés avec précision temporelle (depuis des bibliothèques comme Epidemic Sound, ElevenLabs ou des fichiers locaux). La compétence permet le mixage complet avec ducking automatique de la musique sous la voix, l'ajustement de la musique à la vidéo (coupe du morceau à la longueur, placement du drop sur la coupe principale, traitement des pistes individuelles) et une large gamme de traitements audio (radio AM, téléphone, sous-marin, rêve, flashback, réverbérations, etc.). Prise en charge sur les plateformes utilisant ffmpeg (Python, Remotion, montage vidéo classique). Le workflow guide l'utilisateur à travers l'identification des moments clés, le choix des effets, l'application avec fenêtres temporelles, le mixage final avec normalisation LUFS, et l'offre d'un studio web pour réglages auditifs. La compétence gère aussi les demandes en espagnol.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/NachoEstevo/audiofx/tree/HEAD/skills/sound-design

Demander à votre IA préférée

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

Documentation

Conception sonore avec AudioFX

AudioFX transforme les effets de conception sonore en filtres ffmpeg. Chaque effet est une chaîne qui se place directement dans ffmpeg -af, ou s'applique à un fichier via l'interface en ligne de commande. Ce que vous entendez dans le studio web est exactement ce qui sort du rendu.

Commande

Dans ce document, sfx signifie :

node {{AUDIOFX_DIR}}/bin/sfx.mjs

Si sfx n'est pas une commande sur cette machine, utilisez le chemin complet. Elle fonctionne depuis n'importe quel dossier. Si elle échoue à cause de ffmpeg, exécutez sfx doctor.

Vous avez besoinCommande
Le cataloguesfx list (ou --json)
Paramètres, plages et quand utiliser un effetsfx describe <effect>
Traiter un fichier audio ou vidéosfx apply <input> <output> <step...>
Le graphe de filtres pour votre propre ffmpegsfx graph <step...>
Mesurer la sonie et les picssfx analyze <file>
La durée d'une vidéo et ses coupes franchessfx cuts <video>
Où un morceau monte (candidats au drop) et descendsfx sections <file>
Mixer voix, musique et effets sur une ligne de temps, la musique mise en retrait sous la voixsfx mix <output> --voice v.wav --music m.wav [--sfx hit.wav@6] [--video cut.mp4], ou sfx mix project.json <output>
Conserver un échantillon enregistré et le superposer`sfx sample add <file
Une nouvelle voix, son ou chanson, déjà traitée`sfx generate <sfx
Laisser l'utilisateur écouter et ajustersfx studio (ouvre http://127.0.0.1:5177)

Une étape s'écrit effet[:param=valeur,param=valeur][@debut-fin] :

sfx apply voice.wav voice-phone.wav telephone
sfx apply clip.mp4 clip-fx.mp4 "underwater:[email protected]" --fade 0.4
sfx graph "reverb:space=cathedral,mix=0.4" "fade:in=0,out=2"
  • Les étapes s'exécutent dans l'ordre.
  • @3.2-7 limite l'effet à cette fenêtre, avec un fondu enchaîné de --fade seconde (0,25 par défaut) entre le signal sec et traité. @3.2- signifie de 3,2 s à la fin.
  • Si la sortie est .mp4, .mov, .mkv ou .webm, l'image est copiée sans ré-encodage et l'audio est remplacé.
  • Si vous vous trompez sur un paramètre, l'interface liste les valides. Ne devinez pas : exécutez sfx describe.

Flux de travail

  1. Lisez le script ou le montage et repérez les moments qui nécessitent un traitement : une voix qui passe par un téléphone, la caméra qui passe sous l'eau, un souvenir, un drop, une coupe comique. sfx cuts video.mp4 affiche la durée de la vidéo et ses coupes franches (un --threshold plus bas, par défaut 10, attrape les plus légères). Notez les temps en secondes.
  2. Choisissez l'effet dans le tableau ci-dessous. En cas de doute, sfx list et sfx describe. Commencez avec les valeurs par défaut : elles sont réglées pour sonner clairement sans en faire trop.
  3. Traitez chaque piste séparément, avant le mixage. Les effets d'époque, de personnage et d'espace vont sur la voix ou l'effet spécifique, pas sur le mix complet. L'exception est un procédé narratif qui affecte tout ce que vous entendez (sous-marin, choc d'explosion, rêve).
  4. Utilisez des fenêtres pour les changements dans un clip (@debut-fin) au lieu de couper et assembler des fichiers.
  5. Mixez et normalisez à la fin avec sfx mix (voir "Mixage") : il met la musique en retrait sous la voix et normalise le master vers -14 LUFS pour les réseaux sociaux et YouTube (--loudness -16 pour les podcasts, -23 pour la diffusion). Pour un fichier unique, loudness à la fin de sa chaîne fait de même. Vérifiez ensuite avec sfx analyze que la sonie est proche de la cible et que le pic vrai reste à -1 dBTP ou moins.
  6. Vous ne pouvez pas écouter. Dites quels effets vous avez appliqués et à quels moments, et proposez sfx studio pour que l'utilisateur puisse les régler à l'oreille. S'il renvoie de nouvelles valeurs, le studio leur donne la commande exacte à copier.

Moments cinématographiques : ce qui vend une coupe

Les vidéos de lancement ne sonnent pas "cinématographique" à cause d'un filtre sur la voix, mais grâce à des éléments placés au bon instant : une montée qui culmine sur la coupe, un silence et un impact avec sub à l'apparition du produit. Ces effets synthétisent ces éléments dans le même graphe de filtres (pas d'échantillons sous licence) et sont ancrés avec at=<seconde> :

MomentChaîne (la coupe à T)
Impact sur la coupe, révélation du produit"riser:at=T,length=2.5" "drop-gap:at=T-0.45,gap=0.45" "hit:at=T"
Titre ou logo"braam:at=T" "sub-drop:at=T,level=-4"
Texte ou interface qui arrive"whoosh:at=T,length=0.8" (pic à T)
Coupe au noir"stop-tail:at=T,decay=3.5" "sub-drop:at=T,level=-4"
Ponctuer un mot"throw:at=T,kind=echo" sur la voix
Glitch technique"stutter:at=T,slice=0.12,repeats=4" (allonge l'audio)
  • at est la seconde de la coupe dans le fichier que vous traitez. Pour riser c'est là où il se termine ; pour whoosh, là où il culmine ; pour drop-gap, là où le silence commence.
  • Ajustez le niveau avec level (dB) avant de toucher gain : hit et sub-drop arrivent déjà fort.
  • Peu et précis : un ou deux moments par 15 s. Un impact sur chaque coupe devient fatigant.
  • trailer-voice (voix grave et épique avec une pièce) et archival (entretien d'archive) sont des traitements vocaux, sans at.
  • Besoin d'un vrai son enregistré (un impact avec du poids, une porte, du verre, de la pluie) plutôt que d'un son synthétisé ? Superposez un échantillon à T : voir la section suivante.

Échantillons réels comme couches

Les impacts synthétisés sont rapides et gratuits, mais un impact, whoosh ou bruitage enregistré semble généralement plus réel. L'effet layer mixe n'importe quel fichier audio dans le signal à une seconde exacte, dans le même graphe de filtres :

sfx apply mix.wav mix-door.wav "layer:file=door.wav,at=6,align=onset,level=-3"
sfx apply mix.wav mix-hit.wav "riser:at=6,length=2.5" "drop-gap:at=5.55,gap=0.45" "layer:file=library:ab12cd34ef56,at=6,align=onset" "sub-drop:at=6,level=-4"
  • align=onset mesure où se trouve l'attaque de l'échantillon et place celle-ci sur at. Les échantillons commencent souvent avec 20 à 300 ms de silence ou de pré-roll ; avec le défaut align=start, ce silence fait arriver l'impact en retard. Utilisez align=peak pour les whoosh et les gonflements, dont le point le plus fort est ce qui atterrit sur la coupe.
  • level en dB, length pour n'utiliser que les premières secondes, fadeIn / fadeOut pour le façonner. sync=<s> définit le point de synchronisation manuellement (avec align=start).
  • Un échantillon remplace le hit, braam ou whoosh synthétisé ; gardez le riser, drop-gap et sub-drop autour.
  • Pour traiter l'échantillon lui-même (réverbération, distance, un haut-parleur), traitez-le d'abord avec sfx apply sample.wav sample-fx.wav ... et superposez le résultat.
  • Un passage (voiture, moto, drone) : générez l'échantillon isolé via doppler avec at sur son point le plus proche, puis superposez-le avec sync sur cette seconde pour que le passage atterrisse sur la coupe : sfx apply car.wav car-pass.wav "doppler:at=2,speed=90", puis "layer:file=car-pass.wav,at=6,sync=2".
  • Les niveaux des échantillons varient beaucoup. Après la superposition, exécutez sfx analyze sur le résultat et réduisez level si le pic atteint 0 dBFS.

Où vivent les échantillons

Les échantillons sont des fichiers audio sous licence qui appartiennent à l'abonnement de l'utilisateur. Ils se trouvent dans ~/.audiofx/samples, chacun avec un .json (id, titre, source, type, piste) à côté, et jamais dans un dossier de projet ou un dépôt :

sfx sample add <fichier-ou-url> --title "Claquement de porte, bois lourd" --id <id de bibliothèque> --source epidemic-sound
sfx sample list            # chaque échantillon avec library:<id>, durée et emplacement de son attaque

sample add copie un fichier local ou télécharge une URL, mesure l'attaque et imprime la référence library:<id> à utiliser dans layer:file=.... Le studio affiche les échantillons dans son onglet Échantillons, et ses moments peuvent en utiliser un à la place de l'impact ou du whoosh synthétisé.

Récupération depuis une bibliothèque sonore (Epidemic Sound MCP)

Quand l'utilisateur a le MCP Epidemic Sound connecté (outils SearchSoundEffects et DownloadSoundEffect) :

  1. Réutilisez d'abord. sfx sample list : si un échantillon approprié est déjà présent, utilisez-le.
  2. Recherchez avec SearchSoundEffects : un terme court et concret ("impact cinématographique grave", "whoosh rapide court", "verre brisé"), first: 5, et un filtre de durée en millisecondes qui correspond à l'utilisation (impacts et whoosh sous 4000 ; ambiances plus longues). Choisissez par titre, tags et durée.
  3. Téléchargez avec DownloadSoundEffect (fileType: WAV). Il renvoie une URL signée qui expire.
  4. Conservez-le : sfx sample add "<assetUrl>" --title "<titre>" --id <id> --source epidemic-sound. N'écrivez jamais l'URL signée dans un fichier, et ne sauvegardez jamais l'audio dans le projet.
  5. Utilisez-le avec le library:<id> que sample add a imprimé : "layer:file=library:<id>,at=T,align=onset".

Vous ne pouvez pas écouter, donc ne prétendez pas qu'un échantillon "sonne bien". Signalez ce que vous pouvez mesurer (durée, emplacement de l'attaque, pic du résultat) et, quand le choix compte, ajoutez deux ou trois candidats et laissez l'utilisateur choisir à l'oreille dans l'onglet Échantillons du studio. Si un téléchargement échoue avec RETRY_LATER, attendez les secondes indiquées avant de réessayer.

Mixage : sfx mix

sfx mix dispose la voix, la musique et les effets sur une ligne de temps, met la musique en retrait sous la voix et normalise le master, en une seule passe ffmpeg. La forme rapide prend un drapeau par clip, fichier@seconde :

sfx mix final.mp4 --video cut.mp4 --voice [email protected] --music library:<id> --sfx [email protected]
sfx mix final.wav --voice vo.wav --music song.wav --duck 14 --loudness -16
sfx mix --video cut.mp4 --voice [email protected] --music song.wav --print > mix.json
  • La musique descend de 10 dB pendant qu'une voix joue (--duck <dB>, --no-duck). L'attaque d'un clip --sfx atterrit sur sa seconde, comme align=onset.
  • Le master est normalisé vers -14 LUFS (--loudness <LUFS|off>), puis un plafond de -1 dB. Le mix est mesuré et ramené à la cible avec un gain fixe, donc sa dynamique est conservée ; quand les pics atteignent le plafond en premier, le limiteur est poussé jusqu'à 6 dB pour combler l'écart, donc un mix avec des impacts très forts peut quand même atterrir sous la cible : vérifiez avec sfx analyze. L'audio AAC d'une vidéo peut culminer à environ 0,3 dB au-dessus du plafond ("master": { "ceiling": -1.5 } le maintient à -1 dBTP).
  • Le mix dure --duration, sinon la durée de la vidéo, sinon jusqu'à la fin du dernier clip. Avec --video et une sortie vidéo, l'image est copiée et l'audio remplacé.
  • --print écrit le JSON du projet au lieu de le rendre : modifiez-le, puis sfx mix mix.json final.mp4.

Un fichier de projet donne à chaque clip et piste ses propres réglages. Les chemins sont relatifs au fichier du projet, et library:<id> fonctionne partout où un fichier le fait :

{
  "version": 1,
  "video": "cut.mp4",
  "tracks": [
    { "id": "voice", "role": "voice", "clips": [{ "file": "vo.wav", "at": 1.5, "steps": [{ "effect": "voice-clean" }] }] },
    { "id": "music", "role": "music", "clips": [{ "file": "library:<id>", "fadeOut": 2 }], "duck": { "depth": 12, "release": 600 } },
    { "id": "hits", "role": "sfx", "clips": [{ "file": "door.wav", "at": 7.52, "align": "onset", "gain": -3 }] }
  ],
  "master": { "loudness": -14 }
}
  • Clip : file, at (seconde de la ligne de temps), start et length (la partie du fichier à utiliser), gain (dB), fadeIn, fadeOut, align (start, onset, peak), steps.
  • Piste : id, role (voice, music, sfx), gain, mute, solo, steps, duck (true, false ou { depth, attack, release, threshold } ; activé par défaut pour la musique).
  • Étape : { "effect": "underwater", "params": { "depth": 0.8 }, "from": 4, "to": 9.5, "fade": 0.35 }. Les étapes de clip s'exécutent en temps de clip (0 = début du clip) ; les étapes de piste s'exécutent en temps de la ligne de temps, donc leurs fenêtres s'alignent sur la vidéo.
  • Master : steps, loudness (null laisse le niveau tel quel), ceiling (dB, par défaut -1).

Musique ajustée à la vidéo

L'objectif est un morceau coupé à la longueur exacte de la vidéo, avec son drop sur la coupe principale de la vidéo. Vous ne pouvez pas entendre quelle montée est "le" drop : mesurez, proposez avec des chiffres, et laissez l'utilisateur confirmer à l'oreille. Avec le MCP Epidemic Sound (SearchRecordings, DownloadRecording, EditRecording, PollEditRecordingJob, DownloadRecordingEdit) :

  1. Mesurez la vidéo. sfx cuts cut.mp4 imprime sa durée (disons 30,000 s) et ses coupes franches. Convenez avec l'utilisateur de la coupe principale C où le drop doit atterrir (disons 12,4 s).
  2. Trouvez et conservez un morceau. SearchRecordings avec query: { term: "..." }, un filter (bpm: {min,max}, duration: {min,max}

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

Skills associés