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 besoin | Commande |
|---|---|
| Le catalogue | sfx list (ou --json) |
| Paramètres, plages et quand utiliser un effet | sfx describe <effect> |
| Traiter un fichier audio ou vidéo | sfx apply <input> <output> <step...> |
| Le graphe de filtres pour votre propre ffmpeg | sfx graph <step...> |
| Mesurer la sonie et les pics | sfx analyze <file> |
| La durée d'une vidéo et ses coupes franches | sfx cuts <video> |
| Où un morceau monte (candidats au drop) et descend | sfx sections <file> |
| Mixer voix, musique et effets sur une ligne de temps, la musique mise en retrait sous la voix | sfx 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 ajuster | sfx 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-7limite l'effet à cette fenêtre, avec un fondu enchaîné de--fadeseconde (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,.mkvou.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
- 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.mp4affiche la durée de la vidéo et ses coupes franches (un--thresholdplus bas, par défaut 10, attrape les plus légères). Notez les temps en secondes. - Choisissez l'effet dans le tableau ci-dessous. En cas de doute,
sfx listetsfx describe. Commencez avec les valeurs par défaut : elles sont réglées pour sonner clairement sans en faire trop. - 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).
- Utilisez des fenêtres pour les changements dans un clip (
@debut-fin) au lieu de couper et assembler des fichiers. - 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 -16pour les podcasts,-23pour la diffusion). Pour un fichier unique,loudnessà la fin de sa chaîne fait de même. Vérifiez ensuite avecsfx analyzeque la sonie est proche de la cible et que le pic vrai reste à -1 dBTP ou moins. - Vous ne pouvez pas écouter. Dites quels effets vous avez appliqués et à quels moments, et proposez
sfx studiopour 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> :
| Moment | Chaî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) |
atest la seconde de la coupe dans le fichier que vous traitez. Pourriserc'est là où il se termine ; pourwhoosh, là où il culmine ; pourdrop-gap, là où le silence commence.- Ajustez le niveau avec
level(dB) avant de touchergain:hitetsub-droparrivent 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) etarchival(entretien d'archive) sont des traitements vocaux, sansat.- 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=onsetmesure où se trouve l'attaque de l'échantillon et place celle-ci surat. Les échantillons commencent souvent avec 20 à 300 ms de silence ou de pré-roll ; avec le défautalign=start, ce silence fait arriver l'impact en retard. Utilisezalign=peakpour les whoosh et les gonflements, dont le point le plus fort est ce qui atterrit sur la coupe.levelen dB,lengthpour n'utiliser que les premières secondes,fadeIn/fadeOutpour le façonner.sync=<s>définit le point de synchronisation manuellement (avecalign=start).- Un échantillon remplace le
hit,braamouwhooshsynthétisé ; gardez leriser,drop-gapetsub-dropautour. - 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
doppleravecatsur son point le plus proche, puis superposez-le avecsyncsur 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 analyzesur le résultat et réduisezlevelsi 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) :
- Réutilisez d'abord.
sfx sample list: si un échantillon approprié est déjà présent, utilisez-le. - 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. - Téléchargez avec
DownloadSoundEffect(fileType: WAV). Il renvoie une URL signée qui expire. - 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. - Utilisez-le avec le
library:<id>quesample adda 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--sfxatterrit sur sa seconde, commealign=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 avecsfx 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--videoet 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, puissfx 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),startetlength(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,falseou{ 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(nulllaisse 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) :
- Mesurez la vidéo.
sfx cuts cut.mp4imprime sa durée (disons 30,000 s) et ses coupes franches. Convenez avec l'utilisateur de la coupe principaleCoù le drop doit atterrir (disons 12,4 s). - Trouvez et conservez un morceau.
SearchRecordingsavecquery: { term: "..." }, unfilter(bpm: {min,max},duration: {min,max}