Communitygithub.com

EditAtlas/사운드-디자인

완성된 영상에 EditAtlas 라이브러리의 실제 사운드 효과를 적용하여 사운드 디자인합니다. 2,278개의 설명된 사운드가 공개 GitHub 저장소에 있으며 SHA-256 체크섬으로 다운로드 가능합니다. 장면의 순간을 찾고 프레임 시트로 확인한 후, 설명과 측정된 수치를 바탕으로 사운드를 선택하여 정확한 프레임에 역할에 맞는 레벨로 배치합니다. 기존 음악과 음성은 유지하거나 대체하고, 새로운 MP4와 별도의 SFX WAV 파일을 렌더링한 후 동기화, 템포, 구멍, 음량 등을 수치로 검증합니다.

사운드-디자인란 무엇인가요?

이 스킬은 AI 에이전트가 완성된 비디오에 대해 실제 사운드 이펙트(SFX) 라이브러리를 사용하여 프로 수준의 사운드 디자인을 수행할 수 있게 합니다. 핵심은 에이전트가 사운드를 '들을 수 없음'을 인지하고, 대신 사운드의 설명과 측정된 수치(예: 공격 시간, 중심 주파수)에 의존하여 결정을 내린다는 점입니다. EditAtlas 라이브러리는 2,278개의 실제 사운드 파일을 제공하며, 각 파일은 설명과 측정 지표와 함께 인덱싱되어 있습니다. 워크플로는 `scripts/` 디렉토리의 Python 스크립트를 통해 수행됩니다: `moments.py`는 비디오의 컷, 움직임, 착지 지점을 분석하고; `sounds.py`는 사운드 검색, 메타데이터 확인, 파형 시각화를 지원하며; `mix.py`는 큐 시트를 기반으로 최종 오디오 믹스를 렌더링합니다; `check.py`는 렌더링된 사운드트랙에서 동기화 정확도, 반복, 음량 등을 검증합니다. 에이전트는 이 모든 과정을 자동화하거나 인간 편집자에게 전달할 검토 보고서를 생성할 수 있습니다. 주요 플랫폼은 Claude Code, Cursor, Codex와 같은 AI 코딩 도구이며, Python 3.9+, FFmpeg, numpy, Pillow 의존성이 필요합니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/EditAtlas/skills/tree/HEAD/skills/sound-design

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

사운드 디자인: 완성된 영상에 실제 사운드 적용하기

목표: 영화가 좋은 라이브러리를 가진 편집자가 컷한 것처럼 들리게 합니다. 모든 사운드는 EditAtlas의 실제 파일이며, 살펴본 프레임에 배치되고, 숫자로 정당화할 수 있는 레벨로 설정됩니다.

전체 과정 내내 두 가지 사실이 적용되므로, 이에 맞춰 계획하십시오:

  • 들을 수 없습니다. 사운드는 설명과 측정된 수치(sounds.py info)로 선택하고, 배치와 레벨은 check.py로 확인하며, 사람에게는 들어볼 짧은 순간 목록을 전달합니다. 사운드가 "좋게 들린다"고 말하지 말고, 무엇을 측정했고 아직 귀가 필요한지 말하십시오.
  • 지어내면 안 됩니다. 주어진 비디오만을 작업하십시오. 비디오가 없으면 요청하십시오. 라이브러리에 없는 사운드가 필요한 순간은 무음으로 남기고 보고서에 명시하십시오.

모든 스크립트는 scripts/에 있습니다 (Python 3.9+, numpy, 프레임 시트용 Pillow, PATH에 ffprobe가 있는 FFmpeg 필요). 스킬 폴더의 경로를 사용하여 자신의 작업 폴더(work/, result/)에서 실행하십시오. 사람의 프로젝트나 이 스킬 폴더에는 절대 쓰지 마십시오.

python SKILL/scripts/moments.py FILM.mp4 --out work/moments             # moments.json, sheet.png, overview.png
python SKILL/scripts/moments.py FILM.mp4 --at 10.4 --out work/at        # 한 시간 주변 0.1초 간격 프레임
python SKILL/scripts/sounds.py search "유리잔 부딪힘" --max-dur 2       # 공개 인덱스에서 ID 검색
python SKILL/scripts/sounds.py info sfx-ID sfx-ID                       # 한 번 다운로드, SHA-256, 측정 수치
python SKILL/scripts/sounds.py sheet sfx-ID sfx-ID --out work/c.png     # 후보 사운드의 파형 + 스펙트로그램
python SKILL/scripts/mix.py work/cues.json --out result/FILM_sfx.mp4    # MP4 + _track.wav + _resolved.json
python SKILL/scripts/check.py result/FILM_sfx_resolved.json --moments work/moments/moments.json --listen-out result/listen.wav

사운드는 https://raw.githubusercontent.com/EditAtlas/sfx/main/에서 가져오며 ~/.cache/editatlas-sfx에 캐시됩니다 (EDITATLAS_SFX_CACHE로 위치 변경 가능). EditAtlas/sfx의 로컬 클론이 있으면 sounds.py의 하위 명령어 앞에 --mirror PATH를 전달하면 다운로드하지 않습니다.

1. 영화와 그 사운드 살펴보기

moments.py를 실행합니다. 이 스크립트는 기존 오디오를 보고 (has_audio, LUFS, 무음 비율) 픽셀 차이로부터 세 가지 종류의 순간을 찾습니다: cut (장면 전환), move (움직임 시작 또는 절정), land (움직임 멈춤: 무언가 안착). 그런 다음 Read 도구로 overview.png와 sheet.png를 엽니다: 숫자는 부드러운 애니메이션(고정된 얼굴 위로 배지가 확대되는 것은 컷으로 감지되지 않음)을 놓치고 카메라 흔들림을 과도하게 보고합니다. 중요한 곳에서는 --at T로 특정 시간 주변 프레임을 그리고 물체가 나타나거나, 안착하거나, 방향을 바꾸는 정확한 프레임을 찾습니다.

영화 자체 오디오가 무엇인지 결정하십시오:

숫자와 화면에서 보이는 것큐 시트 설정
오디오 없음, 또는 silent_share가 1에 가까움"keep_audio": false: 사운드가 영화를 전달하며, 약 -16 LUFS로 조정됨
음악만 있음"keep_audio": true: 사운드는 음악보다 약 3 LU 낮게 배치; 가능하면 비트에 악센트를 넣음
누군가 말하고 있음 (자막, 얼굴, 라발리에 마이크)"keep_audio": true, "under_voice": true: 음성보다 약 8 LU 낮게; 더 적고 가벼운 사운드
합성된 비프음이 이미 믹스에 포함됨질문: 교체하려면 스템이 필요함; 실제 사운드를 겹치면 두 배가 됨

영화 오디오 유지 여부가 명확하지 않으면 사람에게 물어보십시오.

2. 본 내용을 바탕으로 이벤트 목록 작성하기

사운드가 필요한 각 순간에 대해 한 줄씩: 시간, 발생 상황, 사운드 종류. 편집자처럼 생각하십시오:

  • 나타나는 물체 (배지, 칩, 버튼, 자막 카드): 짧은 팝, 틱 또는 부드러운 딩, anchor: start.
  • 가로질러 움직이거나 전환: 도착 지점에서 가장 큰 지점이 오는 윙 소리, anchor: peak.
  • 무게감 있게 안착하는 물체 (로고, 제품, 스탬프): 멈추는 프레임에 맞춰 타격음 또는 쿵 소리, anchor: peak.
  • 화면의 실제 물체 (유리잔, 얼음, 종이, 열쇠, 음료): UI 사운드가 아닌 해당하는 폴리 사운드.
  • 성공 / 오류 상태: 예에는 딩, 아니오에는 짧은 부저 또는 알람. 영화당 하나의 인터페이스 사운드 계열 사용.
  • 무언가가 축적되는 경우: 끝이 정점에 도달하는 라이저, anchor: end.

모든 움직임에 사운드가 필요한 것은 아닙니다. 페이스와 취향에 대한 숫자 규칙은 references/taste.md에 있습니다; 세션의 첫 번째 큐 시트 전에 읽으십시오.

3. 사운드 선택: 읽고, 측정하고, 비교하기

  1. 검색. EditAtlas MCP가 연결되어 있으면 search_sfx가 더 잘 순위를 매깁니다 (베트남어도 이해함); 그렇지 않으면 sounds.py search를 사용하십시오. 제목은 의도적으로 원본 파일의 단어를 피합니다 ("카메라 셔터"는 "Lens Aperture Tick"), 그러므로 사운드가 무엇인지 검색하고 동의어와 카테고리 필터를 시도하십시오.
  2. 2~4개의 후보에 대해 sounds.py info를 실행하십시오. 읽을 항목: audible_s (실제로 들리는 길이; 파일은 더 길 수 있음), attack_s (0.0x = 즉시 들림, 0.3+ = 점차 커짐), peak_t_s, centroid_hz (약 1500 미만은 어둡게, 6000 초과는 밝게), mono_loss_db (-6 미만은 전화기에서 채널이 상쇄됨; mix.py는 더 큰 채널을 재생함).
  3. 두 후보의 수치가 같으면 sounds.py sheet를 사용하십시오: 날카로운 수직선은 클릭, 번짐은 윙 소리, 바닥의 에너지는 무게를 나타냅니다.
  4. 무엇이 움직이고 무엇에 닿는지에 따라 선택한 후, 길이로 선택하십시오: 0.3초 칩 팝은 1.8초 만화 팝이면 안 됩니다. max_len을 사용하여 긴 파일을 페이드 아웃과 함께 자릅니다.
  5. 한 종류의 반복되는 순간(세 개의 칩)은 동일한 파일을 세 번 사용하지 말고, 하나의 계열에서 다른 테이크(Tiny Plop 05, 06, Empty Plop 06)를 사용하십시오.

라이브러리는 일부 영역에서 부족합니다 (2026-11-07 측정 기준): 액체 따르기나 거품, 룸 톤, 스탬프, 물방울과 쿵 소리가 거의 없습니다. 가장 가까운 정직한 사운드를 선택하고, 잘못된 사운드를 강제로 사용하기보다는 보고서에서 그 차이를 명시하십시오.

4. 큐 시트 작성 및 렌더링하기

{
  "video": "work/film.mp4",
  "keep_audio": false,
  "under_voice": false,
  "cues": [
    {"t": 0.30, "id": "sfx-988dafbd36", "role": "whoosh", "label": "제목 안착"},
    {"t": 0.62, "id": "sfx-mi630472",  "role": "foley", "anchor": "start", "max_len": 0.9, "gain_db": -2, "label": "얼음이 유리잔에 들어감"},
    {"t": 8.30, "id": "sfx-fs339114",  "role": "hit", "label": "병 안착"},
    {"t": 0.00, "id": "sfx-c7d271e90f", "role": "ambience", "bed": true}
  ]
}
  • t는 순간의 프레임 시간(초)입니다. role은 레벨과 기본 앵커를 설정합니다 (references/taste.md 참조).
  • anchor: start는 들리기 시작하는 지점을 t에 맞추고, peak는 가장 큰 지점, end는 들리는 끝 지점을 맞춥니다.
  • 큐별 설정: gain_db (역할 레벨 기준), max_len, fade_in, fade_out, offset_in, pan (-1..1).
  • "bed": true: 영화 전체에 걸쳐 -54 dBFS(거의 들리지 않음)의 길고 일정한 앰비언스 사운드. 사운드가 SFX만 있는 영화에만 사용하고, 음성이나 음악 아래에는 절대 사용하지 마십시오. 영화가 더 길면 자체적으로 크로스페이드됩니다.

mix.py를 실행합니다. 모든 사운드의 배치 시간과 피크 레벨을 출력하며, 사운드가 파일 내에서 시작해야 했을 정도로 순간이 너무 이른 경우를 알려줍니다.

5. 확인, 수정, 재확인

렌더링할 때마다 check.py를 실행하십시오; 종료 코드 1은 무언가 플래그가 지정되었음을 의미합니다. 이 스크립트는 mix.py가 _resolved.json 옆에 쓴 WAV 트랙을 읽으므로, 결과를 복사할 때 해당 파일들을 함께 보관하십시오. 렌더링된 트랙에서 각 사운드를 자체 파형으로 찾으므로, sync는 실제적입니다: 한 프레임 이상 차이가 나면 시트의 버그입니다. 또한 10초당 제스처 수, 가장 긴 구멍, 강한 타격음, 반복, 디지털 무음, 마스터 음량과 트루 피크, 모노 폴드다운, 그리고 얼마나 많은 강한 화면 순간에 사운드가 할당되었는지 측정합니다.

각 플래그에 대해 수정(구멍에 사운드 추가, 반복 교체, 큐 이동)하거나, 옳다고 판단하고 보고서에 그 이유를 설명하십시오("7.8초 구멍은 대화 구간이며, 음성이 전달합니다"). 느린 어택에 대한 참고 사항은 힌트입니다: 순간이 사운드의 피크라면 해당 큐를 anchor: peak로 전환하십시오. 두세 번의 라운드는 정상입니다.

6. 전달하기

사람에게 다음을 제공하십시오:

  1. FILM_sfx.mp4와 FILM_sfx_track.wav (사운드만, 전체 길이, 자신의 편집 아래에 깔 수 있도록).
  2. 간단한 표: 시간, 순간, 사운드 제목과 ID, 해당 사운드를 선택한 이유.
  3. check.py의 수치 (페이스, 가장 긴 구멍, LUFS, 트루 피크)와 각 남은 플래그의 의미.
  4. 듣기 목록 (listen.wav는 해당 순간들을 하나의 파일로 자름): "헤드폰으로 한 번, 전화기로 한 번 들어보십시오".
  5. 차이점: 무음으로 남겨진 순간과 라이브러리에 없었던 사운드들.

보고서는 상대방의 언어로 작성하십시오. 당신이 들었다고 주장하지 마십시오.

선택 사항: real-sfx 엔진

Clipwing의 real-sfx 스킬 (MIT 스크립트, Alexander Korbanov 제작)은 더 무거운 엔진(타이핑된 큐 목록, 신스 레이어 제거, 비트 그리드, 9축 비평)으로 동일한 작업을 수행합니다. 전체 EditAtlas 라이브러리를 메인 팩으로 사용할 수 있습니다. 어댑터와 검증된 내용은 references/real-sfx.md를 참조하십시오.

관련 스킬