Communitygithub.com

ekcheungAI/foley

Adicione efeitos sonoros a vídeos mudos ou com áudio bruto do início ao fim — encontre cada momento que precisa de som, busque sons CC0 no Openverse, selecione e corte com o earshot, posicione no quadro exato com ffmpeg, e corrija atrasos, sons abafados ou estouros até todos os cues passarem.

O que é foley?

Este skill para agentes de IA (como Claude Code, Cursor, Codex) automatiza o processo de design de som para vídeos, detectando automaticamente momentos que necessitam de efeitos sonoros e sincronizando-os com precisão de quadro. Ele usa `ffmpeg` e `ffprobe` para processamento de vídeo, `earshot` para medições acústicas precisas de sincronia e volume, e a API do Openverse para buscar sons licenciados CC0 (sem necessidade de atribuição). O fluxo de trabalho começa com a detecção de picos de movimento no vídeo, que são apresentados em folhas de contato para que o agente (ou o usuário) nomeie cada evento (ex.: "soco", "porta", "whoosh"). Em seguida, sons CC0 são baixados, classificados por similaridade acústica com o evento desejado e cortados com base em medições de ataque e pico. O agente monta uma trilha sonora, renderiza um vídeo de prévia e usa `earshot timeline` para verificar se cada som está dentro de 40 ms do quadro alvo e pelo menos 6 dB acima do fundo. O processo é iterativo: falhas são corrigidas deslocando sons, ajustando volume ou limitando picos até que todos os cues passem. O skill é útil para criadores de conteúdo, editores de vídeo e desenvolvedores que precisam de efeitos sonoros rápidos, legais e sincronizados com precisão.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/ekcheungAI/foley-skill/tree/HEAD/foley

Perguntar na sua IA favorita

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

Documentação

foley: efeitos sonoros que acertam o quadro

Você não pode ouvir. earshot são seus ouvidos: nunca diga que um som "encaixa" ou "está sincronizado" sem um número do earshot. SKILL_DIR abaixo = a própria pasta deste skill (mostrada como seu diretório base quando o skill carrega). Trabalhe na pasta do vídeo. Mantenha tudo que você criar sob foley/ ao lado do vídeo.

Necessidades

  • ffmpeg e ffprobe no PATH, Python 3.10+.
  • earshot no PATH: uv tool install "earshot[mcp] @ git+https://github.com/Leonxlnx/earshot" depois earshot doctor --fetch (~1.1 GB de modelos, apenas CPU).
  • Internet para Openverse (limite anônimo: cerca de 20 requisições por minuto, 200 por dia).

1. Encontre os cues (olhe, depois meça)

  1. python3 SKILL_DIR/scripts/find_cues.py VIDEO --out foley/cues-candidates.json imprime os picos de movimento (mudança entre quadros) e escreve folhas de contato em foley/sheets/.
  2. Leia as folhas de contato. Nomeie cada momento que precisa de um som (batida, passo, porta, whoosh em uma virada rápida, crash, cama de ambiente) e escolha seu quadro exato; use os picos de movimento para restringir, mas confie no que você vê. Pule contatos que você não consegue ver.
  3. Escreva foley/cues.json: [{"id": "hit1", "t": 0.625, "kind": "hit", "what": "punho encontra palma aberta"}, ...].

2. Busque sons CC0

Para cada tipo, 2–4 palavras de busca: python3 SKILL_DIR/scripts/fetch_cc0.py "soco impacto" foley/sounds/hit --limit 8. Ele mantém apenas resultados license=cc0 de source=freesound e registra título, criador, licença e página de origem em foley/sounds/sources.json. CC0 não precisa de crédito, mas diga ao usuário para abrir a página de origem se o uso for comercial: o Openverse não garante a precisão da licença.

3. Escolha e corte com earshot

  • earshot rank "<como o momento soa>" foley/sounds/<tipo> --top 3 --out foley/rank-<tipo>.json. Descreva o som, não a imagem ("um tapa curto e seco de um punho em uma palma aberta").
  • earshot find FILE "<mesmas palavras>" --kind event --top 3 --out foley/find-<id>.json para sons de um tiro; --kind texture para uma cama de ambiente. Rejeite cortes marcados como "head cut" / "tail cut".
  • Anote o ponto de sincronia de cada corte: para batidas é o ataque (início + ~5 ms); para whooshes é o ponto mais alto, não o início.

4. Posicione

Escreva foley/plan_v1.json (veja o cabeçalho de scripts/mix.py) e execute python3 SKILL_DIR/scripts/mix.py foley/plan_v1.json. O vídeo é copiado, nunca re-codificado.

5. Ouça e corrija (a parte importante)

  1. earshot timeline OUT.mp4 --cues "t1,t2,..." --out foley/timeline_v1.json
  2. python3 SKILL_DIR/scripts/check.py foley/timeline_v1.json id1,id2,... foley/check_v1.json Um cue passa quando o início ouvido está dentro de 40 ms do quadro e pelo menos 6 dB acima da cama.
  3. Corrija apenas o que falhou, pelo valor medido:
    • atrasado / adiantado → desloque esse evento pelo offset (whooshes geralmente estão atrasados porque seu pico vem depois do início);
    • abafado (< 6 dB acima da cama) → aumente-o ou abaixe a cama;
    • pico verdadeiro acima de −1 dBTP ou estouro → abaixe a batida mais alta (um limitador não consegue capturar um transiente nas primeiras amostras).
  4. Escreva plan_v2.json, renderize, ouça novamente. Repita até que TODOS PASSEM e o pico verdadeiro seja ≤ −1 dBTP.
  5. Loudness: uma trilha só de efeitos sonoros tem picos e geralmente mede cerca de −20 LUFS com pico verdadeiro ≤ −1 dBTP. Isso é esperado; ajuste a loudness final depois, na edição com voz/música. Não aumente aqui.

6. Relatório

Escreva foley/report.md: cada cue (tempo, quadro, o que), o arquivo usado (título, criador, página de origem CC0), o offset e nível da primeira audição, o que você mudou e os números finais. Diga claramente que as verificações são medições do earshot, não audição humana, e sugira que o usuário ouça uma vez.

Regras

  • Apenas sons CC0, a menos que o usuário peça o contrário. Nunca use um som sem sua linha em sources.json.
  • Não invente uma batida que você não pode ver. Não afirme que um som "soa bem"; cite o earshot.
  • Mantenha o vídeo original intocado; escreva <nome>-sfx.mp4.

Habilidades Relacionadas