Communitygithub.com

sound-design

Design de som para vídeos com a CLI local AudioFX (`sfx`). 65 efeitos como filtergraphs ffmpeg, incluindo momentos cinematográficos sintetizados ancorados a um segundo (impact hit, riser, whoosh, sub drop, trailer braam, gap antes do drop, corte com cauda de reverb, reverb ou echo throw, stutter, voz de trailer, voz de arquivo), amostras gravadas sobrepostas em um segundo exato (da biblioteca de som do usuário, como Epidemic Sound, do ElevenLabs ou de arquivos locais), mixagem de voz, música e efeitos em uma linha do tempo com o volume da música reduzido sob a voz, música ajustada ao vídeo (uma faixa cortada na duração do vídeo com seu drop no corte principal, stems tratados um a um) e tratamentos (rádio AM, linha fixa, celular, alto-falantes do dispositivo, walkie-talkie, TV antiga, vinil, cassete, subaquático, atrás da parede, reverb de banheiro a catedral, eco, longe, robô, monstro, fantasma, sonho, flashback, choque pós-explosão, câmera lenta, parada de fita, varreduras de filtro, swell reverso, passa-baixa/alta, voz limpa, normalização LUFS).

O que é sound-design?

Sound-design é uma habilidade que transforma o design de som de vídeos em filtergraphs ffmpeg, oferecendo 65 efeitos via a CLI local AudioFX (`sfx`). Ela sintetiza momentos cinematográficos (como impact hit, riser, whoosh, sub drop, trailer braam) ancorados a um segundo exato, e permite sobrepor amostras gravadas de bibliotecas como Epidemic Sound ou do ElevenLabs, ou de arquivos locais, em um segundo preciso. A ferramenta também suporta mixagem completa de voz, música e efeitos em uma linha do tempo, com redução automática do volume da música sob a voz, ajuste de música ao vídeo (cortando a faixa na duração do vídeo e alinhando o drop ao corte principal) e uma vasta gama de tratamentos de áudio, de rádio AM a subaquático, passando por reverb, eco, vozes robóticas e normalização LUFS. É útil sempre que precisar construir, editar ou mixar o áudio de um vídeo (usando ffmpeg, Python com numpy, Remotion, vídeos de lançamento, reels, explicadores), quando uma cena pedir algo que soe 'como se...', ao tratar uma voz, música ou efeito, ao preparar um drop, um hit em um corte, um título ou uma transição sonora, ao escolher ou cortar música para um vídeo, ou ao normalizar o loudness para exportação, mesmo que o pedido nunca mencione efeitos de áudio.

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

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Sound design com AudioFX

AudioFX transforma efeitos de design de som em filtergraphs do ffmpeg. Cada efeito é uma string que vai diretamente para ffmpeg -af, ou é aplicado a um arquivo com a CLI. O que você ouve no estúdio web é exatamente o que sai da renderização.

Comando

Ao longo deste documento, sfx significa:

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

Se sfx não for um comando nesta máquina, use o caminho completo. Ele funciona a partir de qualquer pasta. Se falhar por causa do ffmpeg, execute sfx doctor.

Você precisaComando
O catálogosfx list (ou --json)
Parâmetros, intervalos e quando usar um efeitosfx describe <efeito>
Processar um arquivo de áudio ou vídeosfx apply <entrada> <saída> <passo...>
O filtergraph para seu próprio ffmpegsfx graph <passo...>
Medir loudness e picossfx analyze <arquivo>
A duração e cortes duros de um vídeosfx cuts <vídeo>
Onde uma música sobe (candidatos a drop) e caisfx sections <arquivo>
Mixar voz, música e efeitos em uma linha do tempo, com a música reduzida sob a vozsfx mix <saída> --voice v.wav --music m.wav [--sfx hit.wav@6] [--video cut.mp4], ou sfx mix project.json <saída>
Manter uma amostra gravada e sobrepô-la`sfx sample add <arquivo
Uma nova voz, som ou música, já processados`sfx generate <sfx
Deixar o usuário ouvir e ajustarsfx studio (abre http://127.0.0.1:5177)

Um passo é escrito efeito[:parâmetro=valor,parâmetro=valor][@de-para]:

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"
  • Os passos são executados em ordem.
  • @3.2-7 limita o efeito a essa janela, com um --fade de cruzamento de segundos (0.25 por padrão) entre o sinal seco e o processado. @3.2- significa de 3,2 s até o fim.
  • Se a saída for .mp4, .mov, .mkv ou .webm, a imagem é copiada sem recodificação e o áudio é substituído.
  • Se você errar um parâmetro, a CLI lista os válidos. Não adivinhe: execute sfx describe.

Fluxo de Trabalho

  1. Leia o roteiro ou a edição e marque os momentos que precisam de tratamento: uma voz vindo de um telefone, a câmera submersa, uma memória, um drop, um corte cômico. sfx cuts video.mp4 imprime a duração do vídeo e seus cortes duros (um --threshold mais baixo, padrão 10, captura os mais suaves). Anote os tempos em segundos.
  2. Escolha o efeito da tabela abaixo. Quando estiver em dúvida, sfx list e sfx describe. Comece com os padrões: eles são ajustados para soar claros sem exageros.
  3. Trate cada faixa separadamente, antes de mixar. Efeitos de era, personagem e espaço vão na voz ou no efeito específico, não na mixagem completa. A exceção é um recurso narrativo que afeta tudo que você ouve (subaquático, choque de explosão, sonho).
  4. Use janelas para mudanças dentro de um clipe (@de-para) em vez de cortar e emendar arquivos.
  5. Mix e normalize no final com sfx mix (veja "Mixagem"): ele reduz a música sob a voz e normaliza o mestre para -14 LUFS para redes sociais e YouTube (--loudness -16 para podcasts, -23 para transmissão). Para um único arquivo, loudness no final de sua cadeia faz o mesmo. Em seguida, verifique com sfx analyze se o loudness está próximo do alvo e se o pico verdadeiro permanece em -1 dBTP ou inferior.
  6. Você não pode ouvir. Diga quais efeitos você aplicou e em que momentos, e ofereça sfx studio para que o usuário possa ajustá-los de ouvido. Se eles enviarem novos valores, o estúdio fornece o comando exato para copiar.

Momentos cinematográficos: o que vende um corte

Vídeos de lançamento não soam "cinematográficos" por causa de um filtro na voz, mas por causa de elementos colocados no instante certo: um riser subindo para o corte, um gap de silêncio e um hit com sub quando o produto aparece. Esses efeitos sintetizam esses elementos dentro do mesmo filtergraph (sem amostras licenciadas) e são ancorados com at=<segundo>:

MomentoCadeia (o corte em T)
Hit no corte, revelação do produto"riser:at=T,length=2.5" "drop-gap:at=T-0.45,gap=0.45" "hit:at=T"
Título ou logo"braam:at=T" "sub-drop:at=T,level=-4"
Texto ou UI entrando"whoosh:at=T,length=0.8" (pico em T)
Corte para preto"stop-tail:at=T,decay=3.5" "sub-drop:at=T,level=-4"
Pontuar uma palavra"throw:at=T,kind=echo" na voz
Falha técnica (glitch)"stutter:at=T,slice=0.12,repeats=4" (alonga o áudio)
  • at é o segundo do corte no arquivo que você está processando. Para riser é onde ele termina; para whoosh, onde ele atinge o pico; para drop-gap, onde o gap começa.
  • Ajuste o nível com level (dB) antes de tocar em gain: hit e sub-drop já vêm altos.
  • Poucos e precisos: um ou dois momentos a cada 15 s. Um hit em cada corte cansa.
  • trailer-voice (voz profunda e épica com ambiente) e archival (entrevista de arquivo) são tratamentos de voz, sem at.
  • Precisa de um som real gravado (um impacto com peso, uma porta, vidro, chuva) em vez de um sintetizado? Sobreponha uma amostra em T: veja a próxima seção.

Amostras reais como camadas

Hits sintetizados são rápidos e gratuitos, mas um impacto gravado, whoosh ou foley geralmente soa mais real. O efeito layer mixa qualquer arquivo de áudio no sinal em um segundo exato, dentro do mesmo filtergraph:

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 mede onde está o ataque da amostra e coloca isso em at. As amostras geralmente começam com 20-300 ms de silêncio ou pré-roll; com o padrão align=start, esse silêncio faz o hit atrasar. Use align=peak para whooshes e swells, cujo ponto mais alto é o que cai no corte.
  • level em dB, length para usar apenas os primeiros segundos, fadeIn / fadeOut para moldá-lo. sync=<s> define o ponto de sincronização manualmente (com align=start).
  • Uma amostra substitui os hit, braam ou whoosh sintetizados; mantenha o riser, drop-gap e sub-drop ao redor dela.
  • Para tratar a própria amostra (reverb, distância, um alto-falante), processe-a primeiro com sfx apply sample.wav sample-fx.wav ... e sobreponha o resultado.
  • Uma passagem (carro, moto, drone): renderize a amostra isolada através de doppler com at em seu ponto mais próximo, depois sobreponha-a com sync nesse segundo para que a passagem caia no corte: sfx apply car.wav car-pass.wav "doppler:at=2,speed=90", depois "layer:file=car-pass.wav,at=6,sync=2".
  • Os níveis das amostras variam muito. Após sobrepor, execute sfx analyze no resultado e reduza level se o pico atingir 0 dBFS.

Onde as amostras vivem

As amostras são áudio licenciado que pertence à assinatura do usuário. Elas vivem em ~/.audiofx/samples, cada uma com um .json (id, título, fonte, tipo, stem) ao lado, e nunca em uma pasta de projeto ou repositório:

sfx sample add <arquivo-ou-url> --title "Porta batendo, madeira pesada" --id <id da biblioteca> --source epidemic-sound
sfx sample list            # a referência library:<id> de cada amostra, duração e onde está seu ataque

sample add copia um arquivo local ou baixa uma URL, mede o ataque e imprime a referência library:<id> para usar em layer:file=.... O estúdio mostra as amostras em sua aba Samples, e seus momentos podem usar uma em vez do impacto ou whoosh sintetizado.

Buscando de uma biblioteca de som (Epidemic Sound MCP)

Quando o usuário tem o Epidemic Sound MCP conectado (ferramentas SearchSoundEffects e DownloadSoundEffect):

  1. Reutilize primeiro. sfx sample list: se uma amostra adequada já estiver lá, use-a.
  2. Pesquise com SearchSoundEffects: um termo curto e concreto ("impacto cinematográfico grave", "whoosh rápido curto", "vidro quebrando"), first: 5, e um filtro de duração em milissegundos que se encaixe no uso (impactos e whooshes abaixo de 4000; ambientes mais longos). Escolha por título, tags e duração.
  3. Baixe com DownloadSoundEffect (fileType: WAV). Ele retorna uma URL assinada que expira.
  4. Mantenha-o: sfx sample add "<assetUrl>" --title "<título>" --id <id> --source epidemic-sound. Nunca escreva a URL assinada em um arquivo e nunca salve o áudio dentro do projeto.
  5. Use-o com o library:<id> que sample add imprimiu: "layer:file=library:<id>,at=T,align=onset".

Você não pode ouvir, então não afirme que uma amostra "soa bem". Relate o que você pode medir (duração, onde está o ataque, o pico do resultado) e, quando a escolha for importante, adicione dois ou três candidatos e deixe o usuário escolher de ouvido na aba Samples do estúdio. Se um download falhar com RETRY_LATER, espere os segundos indicados antes de tentar novamente.

Mixagem: sfx mix

sfx mix coloca clipes de voz, música e efeitos em uma linha do tempo, reduz a música sob a voz e normaliza o mestre, em uma única passagem do ffmpeg. A forma rápida usa uma flag por clipe, arquivo@segundo:

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
  • A música cai 10 dB enquanto uma voz toca (--duck <dB>, --no-duck). O ataque de um clipe --sfx cai em seu segundo, como align=onset.
  • O mestre é normalizado para -14 LUFS (--loudness <LUFS|off>), depois um teto de -1 dB. A mixagem é medida e levada ao alvo com um ganho fixo, mantendo sua dinâmica; quando os picos atingem o teto primeiro, o limitador é empurrado até 6 dB para fechar a lacuna, então uma mixagem com hits muito altos ainda pode ficar abaixo do alvo: verifique com sfx analyze. O áudio AAC de um vídeo pode atingir cerca de 0,3 dB acima do teto ( "master": { "ceiling": -1.5 } mantém em -1 dBTP).
  • A mixagem dura --duration, senão a duração do vídeo, senão até o final do último clipe. Com --video e uma saída de vídeo, a imagem é copiada e o áudio substituído.
  • --print escreve o JSON do projeto em vez de renderizar: edite-o, depois sfx mix mix.json final.mp4.

Um arquivo de projeto dá a cada clipe e faixa suas próprias configurações. Os caminhos são relativos ao arquivo do projeto, e library:<id> funciona onde quer que um arquivo funcione:

{
  "version": 1,
  "video": "cut.mp4",
  "tracks": [
    { "id": "voz", "role": "voice", "clips": [{ "file": "vo.wav", "at": 1.5, "steps": [{ "effect": "voice-clean" }] }] },
    { "id": "musica", "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 }
}
  • Clipe: file, at (segundo na linha do tempo), start e length (a parte do arquivo a ser usada), gain (dB), fadeIn, fadeOut, align (start, onset, peak), steps.
  • Faixa: id, role (voice, music, sfx), gain, mute, solo, steps, duck (true, false ou { depth, attack, release, threshold }; ativado por padrão para música).
  • Passo: { "effect": "underwater", "params": { "depth": 0.8 }, "from": 4, "to": 9.5, "fade": 0.35 }. Passos de clipe são executados no tempo do clipe (0 = início do clipe); passos de faixa são executados no tempo da linha do tempo, então suas janelas se alinham com o vídeo.
  • Mestre: steps, loudness (null deixa o nível como mixado), ceiling (dB, padrão -1).

Música ajustada ao vídeo

O objetivo é uma faixa cortada na duração exata do vídeo, com seu drop no corte principal do vídeo. Você não pode ouvir qual subida é "o" drop: meça, proponha com números e deixe o usuário confirmar de ouvido. Com o Epidemic Sound MCP (SearchRecordings, DownloadRecording, EditRecording, PollEditRecordingJob, DownloadRecordingEdit):

  1. Meça o vídeo. sfx cuts cut.mp4 imprime sua duração (digamos 30.000 s) e seus cortes duros. Combine com o usuário o corte principal C onde o drop deve cair (digamos 12,4 s).
  2. Encontre e mantenha uma faixa. SearchRecordings com query: { term: "..." }, um filter (bpm: {min,max}, duration: {min,max}

...

[truncado para tradução]

Individual skills in this repo

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

Habilidades Relacionadas