real-sfx: 모션 비디오를 위한 실제 사운드
목표: 영화가 좋은 라이브러리를 가진 사람이 편집한 것처럼 들리게 하는 것입니다. 따라서:
- 사운드는 절대 합성되지 않습니다. 출처: 사용자 라이브러리(
config.json) 및 uisfx(인터페이스 사운드의 CC0 팩, 자체는 합성음, 인터페이스 순간에만 예외적으로 사용됨; "합성 금지"는 이를 비활성화함:--ui library). 적합한 사운드가 없을 경우: 해당 순간은 조용히 남고 보고서에 기록됩니다. 이는 motion-standards의 "트랙 없음: 합성"을 무효화합니다. - 들을 수 없습니다. 사운드는 숫자, 단어 및 그림으로 읽힙니다(
references/listening.md). '들은' 선택을 제시하지 말고: 눈과 측정으로 확인된 것과 사용자가 들어야 할 것을 말하십시오. - 음악과 음성 유지 영화를 전달할 때. 결과는 항상 새로운 MP4 와 별도의 WAV 트랙입니다.
- 이중으로 넣지 마십시오. 렌더 오디오에 베이크된 합성음은 실제 사운드로 대체되며 그 아래에 레이어되지 않습니다(1단계). 비평은 이를 숫자로 측정합니다(
doubling축). - 프로젝트나 스킬 폴더를 변경하지 마십시오. 모든 작업 파일은 자신의 폴더(
work/,result/)에 넣으십시오.
Video Director 내부
(Video Director의 복사본에 추가됨; Clipwing의 원본에는 없음. UPSTREAM.md는 모든 변경 사항을 나열합니다.) 이 복사본은 Video Director 스킬 내부에 있으며 Sound 스테이지에 의해 실행됩니다: ../references/sound-stage.md, "Sound engineering". 해당 단계는 어떤 순간에 사운드가 필요한지 결정하고, 이 스킬에 그것들만 제공하며(build/audio/sfx/events.json), 사용자가 선택한 녹음을 고정하고(sound_handoff.py pins), --ui library, --no-loudnorm 및 텍스처 레이어나 베드 없이 실행하며, 효과 트랙과 해결된 큐만 다시 가져옵니다(sound_handoff.py collect). 해당 단계를 따르고, 이 파일은 그들이 다루지 않는 옵션에 대해서만 읽으십시오. REAL_SFX_CONFIG, REAL_SFX_INDEX, REAL_SFX_TASTE, REAL_SFX_RATINGS, REAL_SFX_STEADY 및 REAL_SFX_STYLES를 ~/.config/real-sfx/ 아래의 경로로 설정하고(플러그인은 각 버전을 새 폴더에 설치하므로 여기에 작성된 모든 것은 다음 업데이트 시 남겨짐), --remember를 사용하지 마십시오(이 폴더에 기록함, learn_style.py도 마찬가지: 학습된 스타일을 ~/.config/real-sfx/styles/로 복사하십시오).
빠른 경로
먼저 python scripts/setup.py check (ffmpeg, 메인/추가 라이브러리, 인덱스, uisfx) 및 python scripts/look.py FILM.mp4 --out work/look (시간이 표시된 프레임 + 그 아래 원본 사운드). 그런 다음, 무엇을 가지고 있느냐에 따라:
# 1. 프로젝트에 이벤트 목록(docs/cues.json, scripts/cues.json) 또는 사운드를 합성하는 스크립트(audio.cjs)가 있음
python scripts/from_cues.py PROJECT_FOLDER|docs/cues.json --video RENDER.mp4 --out work/cues.json
# 2. 목록 없는 화면 녹화: ui_events.py ... (references/screencast.md), 그런 다음 from_cues.py work/ui/events.json
# 3. 그림만: find_moments.py FILM.mp4 --out work/moments; suggest_cues.py work/moments/moments.json --out work/cues.json
# 3b. 소프트 컬러 애니메이션, 목록 없음(UI 미리보기, 일러스트레이션, 모션 그래픽): 자동화는 40개의 움직임 중 5-6개를 봅니다.
# 2단계, "목록 없는 무음 애니메이션": find_moments.py FILM --out work/moments --fine; look.py FILM --at T --span 2.4
# --step 0.1 --out work/at.png; YOUR OWN event list from the frames (references/typed-cues.md) -> from_cues.py - --ui library
python scripts/mix.py work/cues.json --out result/film_sfx.mp4 --plan # 무엇이 어디로 가는지 확인; 그런 다음 --plan 없이
python scripts/critique.py result/film_sfx_resolved_cues.json result/film_sfx_sfx_track.wav
python scripts/levels.py result/film_sfx_resolved_cues.json result/film_sfx_sfx_track.wav --json work/edits.json
# SFX만 있는 영화(자체 음악이나 음성 없음): 구멍에 작은 소리, 그런 다음 mix.py 다시(4단계, "작은 소리 레이어")
python scripts/texture.py work/cues.json --moments work/moments/moments.json
# 같은 영화: 베드(영화 전체 아래 하나의 긴 어두운 실제 녹음; 4단계, "베드"), 그런 다음 mix.py 다시
python scripts/bed.py work/cues.json [--list]
# 9개의 완성된 SFX 릴에 대한 숫자(6단계, "참조 대비"): 점수 없음, 평결에 영향을 미치지 않음
python scripts/critique.py RESOLVED.json WAV --style clean-sfx-refs
# 저렴한 인간 귀(6단계): 비평의 질문과 한 번의 탭 평결이 있는 페이지; 마스킹 모델
python scripts/listen_page.py build work/listen --moments result/film_sfx.mp4 --critique RESOLVED.json WAV
python scripts/listen_page.py serve work/listen [--lan] # 그런 다음: listen_page.py results work/listen --log
python scripts/mix.py work/cues.json --out result/film_sfx.mp4 --masking # 나머지가 숨기는 소리(venv 필요)
프로젝트 폴더는 자체 이벤트 목록(docs/, scripts/, assets/)을 찾습니다; 합성 스크립트는 목록이 없을 때만 읽힙니다. 시트를 편집하기 전에 모든 from_cues.py 플래그를 선택하십시오: 다시 실행하면 수동 편집이 지워집니다(그런 다음 sheet.py apply).
영화의 음성: mix.py ... --voice-safe (깊이 normal; 조용한 텍스처가 많을 때 --voice-depth light, 음성은 일시 중지의 드문 소리에만 deep: 인터페이스를 믹스에서 완전히 제거). 음악이 영화를 전달함: --duck.
음량: 재구축된 베이스는 기본적으로 원본과 일치함; 직접 설정: --target-lufs NUMBER.
인덱스 없음 또는 라이브러리 이동됨: python scripts/build_index.py, 그런 다음 python scripts/listen.py tag-index.
uisfx 없음: setup.py init --uisfx. 다른 기기: setup.py scan FOLDER, setup.py add-library NAME PATH [--tier main|extra] --index. 스킬 폴더에서 스크립트 실행; 경로에 공백이나 비라틴 문자가 있으면 따옴표 사용; Windows에서 비라틴 경로가 있는 자체 Python: PYTHONUTF8=1. PowerShell에서 따옴표는 JSON 인수를 깨뜨림: 파일에 넣으십시오.
사운드 출처
| 필요한 것 | 출처 |
|---|---|
| 기본: 휘파람, 히트, 라이저, 팝, 차임, 키, 종이, 폴리, 앰비언스 | 메인 라이브러리 (tier: main, config.json의 경로). catalog.json / catalog.csv가 있는 정렬된 팩은 각 사운드에 유형과 소스 녹음을 제공하여 파일 이름에서 추측하는 것을 피합니다 |
| 메인 라이브러리에 없는 것: 낮은 드롭, 동전, 짧은 글리치 | 폴백 라이브러리 (tier: extra, 결과에 ~ 표시): 메인 라이브러리에 적합한 사운드가 3개 미만일 때만 |
| 자체 역할이 있는 디자인된 팩 | 역할 granular, atmosphere, power, music_transition, voice는 자동 선택에서 절대 요청되지 않음: 명시적으로 가져오기(--role, "pick": {"role": ...}) |
| 인터페이스 순간: 클릭, 틱, 창, 알림 | uisfx (--ui auto) 목록 자체가 인터페이스 종류를 명명할 때(click, chime...): from_cues는 이유와 위치를 말함(routes: key -> library:click, pop -> uisfx:select) |
| 타이핑 | 항상 라이브러리의 실제 키보드, --ui auto에도; from_cues 자체가 35–170 ms 간격의 8개 이상의 click 이벤트 실행을 타이핑으로 인식함(--no-typing-detect) |
| 물리적 접촉: 공, 발걸음, 구슬, 물체 | 항상 라이브러리: 바닥의 공은 select가 아닌 둔탁한 쿵(아래 레시피) |
아직 라이브러리 없음: setup.py init --uisfx만으로 78개의 CC0 UI 큐 제공. 확인할 가치가 있는 무료 실제 녹음 소스(각 라이선스 읽기): Freesound (CC0 필터), Sonniss GDC 번들, Mixkit, Pixabay sound effects.
"내 라이브러리에서", "합성 금지" 또는 "합성음 같음": --ui library. uisfx 인터페이스 사운드가 있는 프로젝트의 로고 강조 또는 "차잉" 소리: --from-library pop,bell (목록의 종류 이름); 한 사운드: sheet.py set --at T --label bell id=65.
음조가 있는 음악 아래:
- uisfx 반복 및 라이브러리의 음조 사운드(chime, pop, glass, coin)의 피치 단계는 프로젝트에 악보가 있을 때 자동으로 꺼짐(
--ui-pitch off|cycle); - 실제 사운드의 피치는 음악의 음표에 맞춰 조정됨:
mix.py는 시트의music_ref(효과 없는 베드, 음악 스템) 또는--music-ref FILE을 가져와 음조 사운드를 전체 음정 단위로 최대 2, 음표에 놓는 센트(총 2.5)만큼 이동시킴, 음표에 놓이는 경우; 노이즈는 그대로 둠(--no-tonal-fit;scripts/tonal.py SOUND --music FILE --at T는 음표를 표시함); - 작성자 고유 주파수의 간격(
tick(t, 1800 * 2 ** (4 * i / 12)))은 대체의 피치 단계가 됨(melody:).
워크플로
1. 사운드에 이미 있는 것
look.py는 기본 사운드의 스펙트로그램을 표시함(음성은 구문의 띠, 음악은 비트가 있는 카펫, 무음은 검정); listen.py voice FILM.mp4는 음성과 음악의 비율을 제공함. 세 가지 경우:
- 작성자의 음악 또는 음성: 유지, SFX는 위에 감(
--duck/--voice-safe). 예외 (실제 영화에 대한 사람의 답변, 2026-10-19): 영화가 "사운드 디자인을 위해" 보내졌고, 기본 사운드는 음악만임(listen.py voice: 음성 0 %), 그리고 그 사람이 음악 없이 자신의 깨끗한 SFX 릴처럼 원함. 음악 없는 버전 만들기(from_cues.py ... --ui library --drop-original, 그런 다음bed.py --id ... --level -46좋아하는 분위기로), 유용하다면 음악 있는 버전도 만들고, 어느 것이 어느 것인지 말하기. 세 가지 맹목 선택(원본 / 음악 위 효과 / 효과만)에서 그 사람은 단 한 번의 불만 없이 마지막 것을 선택함.from_cues는 베이크된 합성이 없음에도 불구하고(음성 0 %, 음악 84 %, 공격이 이벤트와 일치하지 않음: 7 % 대 9 % 우연)BAKED:를 인쇄함: 이는 오경보입니다. - 트랙에 베이크된 합성 (프로젝트가 합성 악보용으로 작성됨): 그 위의 실제 사운드는 이중이 됩니다.
from_cues.py는 이를 자체적으로 확인하고(BAKED:,unbake:), 음악과 음성을 건드리지 않고 베이스에서 합성을 제거합니다. 정확한 방법과 스크립트가 실패하거나 합성이 음악 스템 내부에 있을 때 할 일(--extra-synth):references/project-audio.md(출력에BAKED,WARN stems,unbake: not possible이 있거나 프로젝트가 스크립트로 사운드를 합성하는 즉시 읽으십시오). 빌드 후critique.py는doubling축을 인쇄합니다: 원본 및 새 영화와 레이어의 상관 관계(약 0이어야 함). - 화면 녹화 창 내부에서 재생되는 클립의 사운드: 기본, 유지; 해당 창 내부의 이벤트는 삭제됨.
2. 순간 찾기 (최상의 소스부터 최악까지)
- 프로젝트의 이벤트 목록 또는 합성 스크립트 →
from_cues.py(아래). 자세히:references/typed-cues.md. - 화면 녹화 →
references/screencast.md(ui_events.py영역, 문자에 키스트로크 매칭, 클립 사운드). data-start가 있는 HyperFrames 및 목록 없음:from_hyperframes.py PROJECT --out work/moments.json. 18개 요소가 있는 "1 moments"는 동작이data-start를 따르지 않음을 의미함: 합성 스크립트를 찾으십시오.- 비디오만:
find_moments.py FILM --out work/moments [--roi x,y,w,h] [--from A --to B] [--fine]; 종류cut,burst,onset,settle(settle은 빈 프레임 또는 정지 상태의 루프에서도 작동: 프레임을 보십시오);look.py --moments ...는 모멘트의 프레임을 그림. 뼈대:suggest_cues.py(references/recipes.md); 초안은 시작일 뿐, 답이 아닙니다. **--fine**은 소프트 컬러 애니메이션(그라데이션, 글로우, 밝기보다 색상이 변하는 파스텔 모양)용: 크로마 변경도 읽음, 모멘트는src=chroma|luma를 얻음; 세 개의 그러한 영화에서 에이전트가 프레임에서 기록한 이벤트의 33–69 %를 찾음(80 ms 이내), 밝기만으로는 13–25 %; 3–4배 더 많은 후보(10초당 15–25). 이들은 후보입니다: 프레임이 결정합니다. - 음악 아래:
beats.py FILM --out work/beats.json --plot work/beats.png;usable: true와 함께mix.py --snap-beats(±50 ms). 그리드는 킥에 대해 확인됨(저대역 < 125 Hz 별도): 40 ms 이내에 킥에 몇 개의 비트가 착륙했는지 인쇄합니다. 킥 옆에 있는 그리드(추적기가 하이햇에 앉음, "0.22 s 오프셋")는 그 위로 이동됨; 아무것도 착륙하지 않는 그리드는usable: false를 얻고--snap-beats는 무시함.--plot은 밴드, 킥(녹색 표시) 및 그리드(빨간색 선)를 그림: 표시가 선 위에 있거나 그리드를 신뢰하지 마십시오. 음악이 당신 것이고 그림에 맞출 수 있는 경우:beats.py FILM --suggest-offset work/moments.json은 컷과 히트가 비트에 착륙하도록 음악을 얼마나 이동해야 하는지 말함(조언만 제공; 음악은 건드리지 않음).
from_cues.py: python scripts/from_cues.py LIST|PROJECT_FOLDER|SCRIPT.cjs|- --video RENDER.mp4 --out work/cues.json
(-는 stdin에서 목록을 읽음; PowerShell의 BOM은 이해됨). 자체적으로 수행하고 말하는 것:
- 올바른 렌더인가: 목록이 그림을 놓침(
VERDICT); 음성에 맞춰진 렌더에 대한 디자인 타임 목록: 프로젝트 앵커의 시간 맵(timing.jsonwitha) ...