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
ffmpegeffprobeno PATH, Python 3.10+.earshotno PATH:uv tool install "earshot[mcp] @ git+https://github.com/Leonxlnx/earshot"depoisearshot 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)
python3 SKILL_DIR/scripts/find_cues.py VIDEO --out foley/cues-candidates.jsonimprime os picos de movimento (mudança entre quadros) e escreve folhas de contato emfoley/sheets/.- 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.
- 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>.jsonpara sons de um tiro;--kind texturepara 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)
earshot timeline OUT.mp4 --cues "t1,t2,..." --out foley/timeline_v1.jsonpython3 SKILL_DIR/scripts/check.py foley/timeline_v1.json id1,id2,... foley/check_v1.jsonUm cue passa quando o início ouvido está dentro de 40 ms do quadro e pelo menos 6 dB acima da cama.- 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).
- Escreva
plan_v2.json, renderize, ouça novamente. Repita até que TODOS PASSEM e o pico verdadeiro seja ≤ −1 dBTP. - 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.