Communitygithub.com

사운드 디자인

로컬 AudioFX CLI (`sfx`)를 사용한 비디오 사운드 디자인. 65가지의 ffmpeg 필터그래프 기반 효과로, 특정 초 단위에 정렬되는 합성 시네마 모멘트(임팩트 히트, 라이저, 우슈, 서브 드롭, 트레일러 브람, 드롭 전 갭, 리버브 테일이 있는 컷, 리버브 또는 에코 드로우, 스터터, 트레일러 보이스, 아카이벌 보이스)를 비롯해, 정확한 초 단위에 레이어링되는 녹음 샘플(사용자의 Epidemic Sound 등의 사운드 라이브러리, ElevenLabs 또는 로컬 파일에서 가져옴), 음성 아래로 음악이 덕킹되는 타임라인에서의 음성, 음악, 효과 믹싱, 비디오에 맞춰진 음악(주요 컷에 드롭이 맞춰지고 개별 스템이 처리되는 비디오 길이에 맞춰진 트랙), 그리고 각종 처리(AM 라디오, 유선전화, 휴대폰, 기기 스피커, 워키토키, 구형 TV, 바이닐, 카세트, 수중, 벽 너머, 욕실에서 대성당까지의 리버브, 에코, 멀리서, 로봇, 몬스터, 유령, 꿈, 회상, 폭발 후 셸 쇼크, 슬로우 모션, 테이프 스탑, 필터 스윕, 리버스 스웰, 로우/하이 패스, 클린 보이스, LUFS)를 지원합니다.

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

이 스킬은 로컬 AudioFX CLI(`sfx`)를 활용하여 비디오를 위한 전문적인 사운드 디자인을 구현합니다. 65가지의 ffmpeg 필터그래프 기반 효과를 제공하며, 합성 시네마 모멘트(히트, 라이저, 우슈, 드롭, 브람 등)를 정확한 초 단위에 배치하고, 리버브, 에코, 스터터, 보이스 처리(라디오, 전화, 로봇 등)와 같은 다양한 효과를 적용할 수 있습니다. 또한, Epidemic Sound, ElevenLabs 또는 로컬 파일에서 가져온 실제 녹음 샘플을 정확한 시간에 레이어링할 수 있으며, 음성 아래로 음악이 자동으로 덕킹되는 타임라인 기반의 믹싱 기능(`sfx mix`)을 제공합니다. 비디오 길이와 주요 컷을 분석하여 음악 트랙을 정확히 맞추고 드롭을 동기화하는 기능, 그리고 LUFS 노멀라이제이션을 통한 최종 출력 레벨 조정까지 지원하여, AI 에이전트가 사용자를 대신하여 완전한 오디오 포스트 프로덕션을 수행할 수 있도록 합니다. 특히 사용자가 직접 듣고 조정할 수 있도록 웹 스튜디오(`sfx studio`)를 제공하여, 에이전트가 시각적 피드백 없이도 효과적인 사운드 디자인 워크플로우를 구성할 수 있게 돕습니다.

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

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

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

문서

AudioFX를 사용한 사운드 디자인

AudioFX는 사운드 디자인 효과를 ffmpeg 필터그래프로 변환합니다. 각 효과는 ffmpeg -af에 직접 전달되거나 CLI를 통해 파일에 적용되는 문자열입니다. 웹 스튜디오에서 듣는 소리가 렌더링 결과물과 정확히 일치합니다.

명령어

이 문서 전체에서 sfx는 다음을 의미합니다:

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

만약 이 머신에서 sfx가 명령어로 인식되지 않으면 전체 경로를 사용하세요. 어떤 폴더에서든 작동합니다. ffmpeg 관련 오류가 발생하면 sfx doctor를 실행하세요.

필요한 기능명령어
카탈로그 보기sfx list (또는 --json)
파라미터, 범위 및 효과 사용 시기sfx describe <effect>
오디오 또는 비디오 파일 처리sfx apply <input> <output> <step...>
자체 ffmpeg를 위한 필터그래프 생성sfx graph <step...>
음량과 피크 측정sfx analyze <file>
비디오 길이 및 하드 컷 찾기sfx cuts <video>
노래가 상승(드롭 후보) 및 하강하는 지점sfx sections <file>
타임라인에서 음성, 음악, 효과 믹싱 (음악이 음성 아래로 덕킹)sfx mix <output> --voice v.wav --music m.wav [--sfx hit.wav@6] [--video cut.mp4], 또는 sfx mix project.json <output>
녹음된 샘플 보관 및 레이어링`sfx sample add <file
이미 처리된 새로운 음성, 사운드 또는 노래 생성`sfx generate <sfx
사용자가 듣고 조정할 수 있도록 함sfx studio (http://127.0.0.1:5177 열림)

스텝(Step)은 effect[:param=value,param=value][@from-to] 형식으로 작성합니다:

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"
  • 스텝은 순서대로 실행됩니다.
  • @3.2-7은 효과를 해당 구간으로 제한하며, Dry 신호와 처리된 신호 사이에 --fade 초(기본값 0.25)의 크로스페이드를 적용합니다. @3.2-는 3.2초부터 끝까지를 의미합니다.
  • 출력 파일이 .mp4, .mov, .mkv 또는 .webm인 경우, 영상은 재인코딩 없이 복사되고 오디오만 대체됩니다.
  • 파라미터를 잘못 입력하면 CLI가 유효한 파라미터 목록을 보여줍니다. 추측하지 말고 sfx describe를 실행하세요.

워크플로우

  1. 스크립트 또는 편집본을 읽고 처리가 필요한 순간을 표시합니다: 전화 통화 음성, 카메라가 수중으로 들어가는 장면, 회상, 드롭, 코믹 컷 등. sfx cuts video.mp4는 비디오의 길이와 하드 컷(기본 --threshold 10, 낮출수록 약한 컷도 감지)을 출력합니다. 시간을 초 단위로 기록하세요.
  2. 아래 표에서 효과를 선택합니다. 확실하지 않으면 sfx list와 sfx describe를 실행하세요. 기본값부터 시작하세요. 과하지 않으면서도 또렷하게 들리도록 조정되어 있습니다.
  3. 믹싱 전에 각 트랙을 별도로 처리합니다. 시대감, 캐릭터 및 공간 효과는 전체 믹스가 아닌 음성 또는 특정 효과에 적용됩니다. 예외는 듣는 모든 것에 영향을 미치는 서사적 장치(수중, 셸 쇼크, 꿈)입니다.
  4. 클립 내 변경 사항에는 구간(@from-to)을 사용하여 파일을 자르고 이어붙이지 않습니다.
  5. 마지막에 sfx mix로 믹싱 및 노멀라이제이션을 수행합니다("믹싱" 참조): 음악을 음성 아래로 덕킹하고 마스터를 소셜 미디어 및 YouTube용 -14 LUFS(팟캐스트는 --loudness -16, 방송은 -23)로 노멀라이즈합니다. 단일 파일의 경우 체인 끝에 loudness를 추가하면 동일한 작업을 수행합니다. 그런 다음 sfx analyze로 음량이 목표에 가깝고 트루 피크가 -1 dBTP 이하인지 확인하세요.
  6. 당신은 들을 수 없습니다. 어떤 효과를 어떤 시간에 적용했는지 말하고, 사용자가 직접 귀로 조정할 수 있도록 sfx studio를 제공하세요. 사용자가 새 값을 보내면 스튜디오에서 복사할 정확한 명령어를 제공합니다.

시네마 모멘트: 컷을 돋보이게 하는 요소

론치 비디오가 "영화처럼" 들리는 이유는 음성에 필터를 적용해서가 아니라, 정확한 순간에 배치된 요소들 덕분입니다: 컷 직전까지 올라가는 라이저(Riser), 침묵의 갭, 그리고 제품이 나타날 때의 서브가 포함된 히트(Hit). 이러한 효과들은 동일한 필터그래프 내에서 이러한 모멘트를 합성하며(라이선스 샘플 없음), at=<second>로 고정됩니다:

모멘트체인 (T 시점의 컷)
컷 시점의 히트, 제품 등장"riser:at=T,length=2.5" "drop-gap:at=T-0.45,gap=0.45" "hit:at=T"
타이틀 또는 로고"braam:at=T" "sub-drop:at=T,level=-4"
텍스트 또는 UI 비행"whoosh:at=T,length=0.8" (T에서 피크)
페이드 투 블랙"stop-tail:at=T,decay=3.5" "sub-drop:at=T,level=-4"
단어 강조"throw:at=T,kind=echo" (음성에 적용)
테크 결함"stutter:at=T,slice=0.12,repeats=4" (오디오 길이 증가)
  • at은 처리 중인 파일에서 컷의 초입니다. riser의 경우 끝나는 지점; whoosh의 경우 피크 지점; drop-gap의 경우 갭이 시작하는 지점입니다.
  • gain을 건드리기 전에 level(dB)로 레벨을 조정하세요. hit과 sub-drop은 이미 크게 설정되어 있습니다.
  • 적고 정확하게: 15초당 한두 개의 모멘트. 모든 컷에 히트가 있으면 피곤합니다.
  • trailer-voice(깊고 웅장한 방 안의 목소리)와 archival(아카이브 인터뷰)는 at이 없는 음성 처리입니다.
  • 합성된 것이 아닌 실제 녹음된 사운드(무게감 있는 임팩트, 문, 유리, 비)가 필요하신가요? T 시점에 샘플을 레이어링하세요: 다음 섹션을 참조하세요.

실제 샘플을 레이어로 사용하기

합성 히트는 빠르고 무료이지만, 녹음된 임팩트, 우슈 또는 폴리 사운드는 일반적으로 더 현실적으로 느껴집니다. layer 효과는 동일한 필터그래프 내에서 정확한 초에 어떤 오디오 파일이든 신호에 믹스합니다:

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은 샘플의 어택(attack) 위치를 측정하여 at에 그것을 배치합니다. 샘플은 종종 20-300ms의 침묵 또는 프리롤로 시작합니다. 기본값 align=start를 사용하면 이 침묵으로 인해 히트가 늦게 느껴집니다. 우슈나 스웰의 경우 align=peak를 사용하세요. 가장 큰 지점이 컷에 맞춰집니다.
  • level(dB), 첫 몇 초만 사용하려면 length, 쉐이핑하려면 fadeIn/fadeOut. sync=<s>는 동기화 지점을 수동으로 설정합니다(align=start와 함께 사용).
  • 샘플은 합성된 hit, braam 또는 whoosh를 대체합니다. 주변에 riser, drop-gap 및 sub-drop은 유지하세요.
  • 샘플 자체를 처리(리버브, 거리감, 스피커)하려면 먼저 sfx apply sample.wav sample-fx.wav ...로 처리한 후 결과를 레이어링하세요.
  • 지나가는 소리(자동차, 오토바이, 드론): 분리된 샘플을 가장 가까운 지점의 at과 함께 doppler을 통해 렌더링한 후, 해당 초에 sync를 맞춰 레이어링하여 지나감이 컷에 맞춰지도록 합니다: sfx apply car.wav car-pass.wav "doppler:at=2,speed=90", 그 다음 "layer:file=car-pass.wav,at=6,sync=2".
  • 샘플 레벨은 매우 다양합니다. 레이어링 후 결과에 대해 sfx analyze를 실행하고 피크가 0 dBFS에 도달하면 level을 낮추세요.

샘플 위치

샘플은 사용자 구독에 속하는 라이선스 오디오입니다. ~/.audiofx/samples에 위치하며 각각 옆에 .json 파일(id, 제목, 출처, 종류, 스템)이 있고, 절대 프로젝트 폴더나 저장소에 저장되지 않습니다:

sfx sample add <file-or-url> --title "무거운 나무 문 닫힘" --id <library id> --source epidemic-sound
sfx sample list            # 각 샘플의 library:<id>, 지속 시간 및 어택 위치 출력

sample add는 로컬 파일을 복사하거나 URL을 다운로드하고, 어택을 측정한 후 layer:file=...에서 사용할 library:<id> 참조를 출력합니다. 스튜디오는 Samples 탭에 샘플을 표시하며, 그 모멘트는 합성 임팩트나 우슈 대신 샘플을 사용할 수 있습니다.

사운드 라이브러리에서 가져오기 (Epidemic Sound MCP)

사용자가 Epidemic Sound MCP를 연결한 경우(도구 SearchSoundEffects 및 DownloadSoundEffect):

  1. 먼저 재사용. sfx sample list: 적합한 샘플이 이미 있으면 사용하세요.
  2. 검색 SearchSoundEffects 사용: 짧고 구체적인 용어("cinematic impact low", "whoosh fast short", "glass shatter"), first: 5, 사용 목적에 맞는 기간(밀리초) 필터(임팩트 및 우슈는 4000 미만; 앰비언스는 더 김). 제목, 태그 및 기간으로 선택하세요.
  3. 다운로드 DownloadSoundEffect 사용 (fileType: WAV). 만료되는 서명된 URL을 반환합니다.
  4. 보관: sfx sample add "<assetUrl>" --title "<title>" --id <id> --source epidemic-sound. 서명된 URL을 파일에 절대 기록하지 말고, 오디오를 프로젝트 내부에 절대 저장하지 마세요.
  5. 사용 sample add가 출력한 library:<id>와 함께: "layer:file=library:<id>,at=T,align=onset".

당신은 들을 수 없으므로, 샘플이 "듣기 좋다"고 주장하지 마세요. 측정 가능한 것(지속 시간, 어택 위치, 결과의 피크)을 보고하고, 선택이 중요할 때는 두세 개의 후보를 추가하여 사용자가 스튜디오의 Samples 탭에서 직접 귀로 선택하도록 하세요. 다운로드가 RETRY_LATER로 실패하면 명시된 시간만큼 기다렸다가 다시 시도하세요.

믹싱: sfx mix

sfx mix는 음성, 음악 및 효과 클립을 하나의 타임라인에 배치하고, 음악을 음성 아래로 덕킹하며, 마스터를 노멀라이즈합니다. 모두 하나의 ffmpeg 패스로 처리됩니다. 빠른 형식은 클립당 하나의 플래그, file@second를 사용합니다:

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
  • 음악은 음성이 재생되는 동안 10dB 감소합니다(--duck <dB>, --no-duck). --sfx 클립의 어택은 해당 초에 맞춰집니다(align=onset처럼).
  • 마스터는 -14 LUFS(--loudness <LUFS|off>)를 목표로 노멀라이즈된 후, -1 dB 천장이 적용됩니다. 믹스가 측정되고 고정 게인으로 목표에 도달하므로 다이내믹이 유지됩니다. 피크가 먼저 천장에 도달하면 리미터가 최대 6dB까지 올라가 차이를 메웁니다. 따라서 매우 큰 히트가 있는 믹스도 목표 아래에 도달할 수 있습니다. sfx analyze로 확인하세요. 비디오의 AAC 오디오는 천장보다 약 0.3dB 더 높은 피크를 가질 수 있습니다("master": { "ceiling": -1.5 }로 -1 dBTP 유지).
  • 믹스는 --duration만큼 지속되며, 그렇지 않으면 비디오 길이, 또는 마지막 클립의 끝까지 지속됩니다. --video와 비디오 출력을 함께 사용하면 영상이 복사되고 오디오가 대체됩니다.
  • --print는 렌더링 대신 프로젝트 JSON을 작성합니다. 편집한 후 sfx mix mix.json final.mp4로 렌더링합니다.

프로젝트 파일은 각 클립과 트랙에 자체 설정을 제공합니다. 경로는 프로젝트 파일을 기준으로 하며, library:<id>는 파일이 허용되는 모든 곳에서 작동합니다:

{
  "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 }
}
  • 클립: file, at(타임라인 초), start 및 length(파일에서 사용할 구간), gain(dB), fadeIn, fadeOut, align(start, onset, peak), steps.
  • 트랙: id, role(voice, music, sfx), gain, mute, solo, steps, duck(true, false 또는 { depth, attack, release, threshold }; 음악 트랙은 기본적으로 켜짐).
  • 스텝: { "effect": "underwater", "params": { "depth": 0.8 }, "from": 4, "to": 9.5, "fade": 0.35 }. 클립 스텝은 클립 시간(0 = 클립 시작)으로 실행됩니다. 트랙 스텝은 타임라인 시간으로 실행되므로 해당 구간이 비디오와 일치합니다.
  • 마스터: steps, loudness(null은 레벨을 그대로 유지), ceiling(dB, 기본값 -1).

비디오에 맞춰진 음악

목표는 비디오의 정확한 길이에 맞게 잘리고, 드롭이 비디오의 주요 컷에 맞춰진 트랙입니다. 어떤 라이즈가 "그" 드롭인지 들을 수 없습니다: 숫자로 측정하고 제안한 후 사용자가 귀로 확인하도록 하세요. Epidemic Sound MCP 사용 시 (SearchRecordings, DownloadRecording, EditRecording, PollEditRecordingJob, DownloadRecordingEdit):

  1. 비디오 측정. sfx cuts cut.mp4는 길이(예: 30.000초)와 하드 컷을 출력합니다. 사용자와 드롭이 떨어져야 할 주요 컷 C(예: 12.4초)에 동의하세요.
  2. 트랙 찾기 및 보관. SearchRecordings with query: { term: "..." }, filter (bpm: {min,max}, duration: {min,max}
  • ...

(참고: 원본 SKILL.md가 일부 잘려서 제공되었습니다. 제공된 내용을 최대한 정확하게 번역했습니다.)

Individual skills in this repo

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

관련 스킬