scrapbook-editor: 원본 테이크가 스크랩북 숏폼이 됩니다
사용자가 자신이 말하는 하나의 수직 테이크를 건넵니다. 이 스킬은 모든 정적 구간을 잘라내고, 프레임을 화자가 말하는 대로 펼쳐지는 스크랩북으로 변환합니다. 모션 디자이너가 After Effects에서 작업한 것처럼 컷됩니다. 기준편집물의 제목은 두 가지 서체(흰색 단어, 중요한 단어는 아름다운 세리프체에 색상, 종이 위에 선 하나)와 후크 부분의 스티커, 얼굴에 던져지는 인터넷 반응 밈(폴라로이드 형태), 오직 제목과 아주 중요한 단어만을 위한 종이 조각, 화자가 말할 때 그려지는 레드 마커, 화자가 나열하는 것들을 위한 스티커, 화자가 언급하는 실제 스크린, 프레임 하단에 단어별로 표시되는 자막, 배경 음악, 그리고 각 오브젝트가 등장할 때의 효과음으로 구성됩니다.
스타일이 검증되었습니다 (사용자, 2026-10-05): 정확히 재현하세요. § 스크랩북 언어(파이프라인 아래)는 검증된 컷의 모양입니다 (workspace/videos/scrapbook-dev-sales.mp4, 그 계획: example/plan.mjs): 동일한 도형, 동일한 크기와 위치, 동일한 서체, 종이, 움직임, 사운드 및 레벨을 모든 테이크에 적용합니다. 이는 실제 편집물(사용자가 클라이언트를 위해 편집한 72.7초 리스트 비디오 « 7 Claude skills »)의 MEASUREMENT에서 시작되었고, 6번의 검토를 거쳐 확정되었습니다. init.sh가 이를 스캐폴드합니다. 다른 모양을 절대 만들어내지 말고, 사용자가 요청한 변형 외에는 절대 변경하지 마십시오.
이 스킬은 short-editor 스킬의 엔진 위에서 실행됩니다. 전사, 렌더링, 믹싱, 미리보기, 빌드 및 검증 파일은 동일합니다. 한 번 읽으십시오: ../short-editor/SKILL.md § 전제 조건, § 파일 위치, § 4부터 § 6까지. 이 파일은 차이점만 설명합니다. 첫 컷 전, 매 실행마다 읽으십시오:
scripts/example/README.md: 기준 편집물, 비트 단위, 개발 컷../../references/pitfalls.md§ Transcription and captions, § Working method: 편집이 함정에 빠지는 지점들 (다른 섹션은 해당 단계가 올 때: § Audio before a sound measured by hand, § ffmpeg and § The shell before a command of your own; 엔진의 도구는 나머지를 따름)
해당 단계가 필요할 때 읽으십시오: ../../references/audio-spec.md 레벨 관련 (음량 기준, 들리는 대로 레벨을 측정하는 방법). 엔진의 수치는: node plugins/video/skills/short-editor/scripts/api.mjs <module> [figure], 소스는 사용하지 마십시오.
저는 비디오를 보거나 들을 수 없습니다. 정적 구간이 어디인지, 얼굴이 어디인지, 사운드가 얼마나 큰지는 각각 측정입니다 (
tighten.py,face.mjs,measure.mjs), 그런 다음 합성된 프레임(preview.mjs)과 모션에서의 순간을 프레임별로 확인합니다(build.sh --slice).verify.mjs는 "준비 완료"와 손상된 파일 사이에 있습니다. 절대 건너뛰지 마십시오.
아래 모든 경로는 GTM by Pipecorn 폴더의 루트를 기준으로 합니다. $K는 plugins/video/skills/scrapbook-editor/scripts (이 스킬), $E는 plugins/video/skills/short-editor/scripts (엔진)를 의미합니다. 절대 경로로 실행하십시오.
전제 조건 (시작 전 확인)
엔진의 전제 조건: ffmpeg + ffprobe가 PATH에 있어야 하며(brew install ffmpeg), python3(Xcode Command Line Tools)가 필요합니다. 여기서 설치할 수 없으므로, 하나라도 없으면 중단하고 명령어를 알려주십시오. 나머지는 자체적으로 설치됩니다: $K/py.sh는 엔진의 bootstrap.mjs(노드 패키지, 음성-텍스트 venv(numpy 포함))를 실행합니다; init.sh는 세 가지 서체(Archivo, Fraunces 및 종이의 마커 손글씨, 기본값 Gochi Hand: Google Fonts, OFL)를 프로젝트의 assets/fonts/로 가져오거나 ~/Library/Fonts에서 찾고, sounds.mjs는 종이 사운드(Mixkit 녹음 8개, 머신당 한 번, plugins/video/assets/sfx/paper/에 저장, 절대 커밋하지 않음: Mixkit 라이선스는 비디오 내 사용을 허용하지만 재배포는 불가)를 준비하여 프로젝트의 assets/sfx-paper/로 측정하고, 선반의 Motionix 팩(plugins/video/assets/sfx/motionix/, explainer 스타일로 준비됨; 팩의 라이선스는 명시되지 않음: 게시 전 README 참조)을 assets/sfx-motionix/로 복사합니다. 시스템 전체에 설치되는 것은 없습니다.
선택 사항이며, 누락 시 알림(블로커 아님):
swiftc(Xcode Command Line Tools):face.mjs가 Apple Vision으로 얼굴을 찾아 폴라로이드가 얼굴 위에 떨어지고 스티커가 머리 주위에 배치됩니다. 없으면 미리보기 프레임에서 얼굴을 읽고 project.jsonface({x, y, w, h}, 프레임의 분수)를 설정하십시오..env.local의GIPHY_API_KEY: 검증된 스타일의 실제 반응 GIF (gif.mjs). 무료: developers.giphy.com → Create an App → API (GIPHY가 추천하는 SDK가 아님: SDK는 GIPHY 자체 선택기를 표시하는 앱용;gif.mjs는 API를 호출), 시간당 100회 호출, 편집에는 충분합니다. 없으면: 사용자가 제공하는 GIF(media.mjs) 또는 생성된 반응 이미지; 그렇게 말하십시오..env.local의GEMINI_API_KEY: 생성된 일러스트레이션 및 반응 이미지 (picture.mjs, Nano Banana 2, 1K당 약 $0.07).- /Applications의 Google Chrome (또는 Chromium, Brave, Edge): 화자가 언급하는 공개 페이지의 스크린샷 (
capture.mjs), 사용자가 직접 캡처한 것이 없을 때.
파일 위치
엔진이 말한 대로, 오직 이 방법으로: 편집당 하나의 작업 디렉토리, workspace/projects/<slug>/, 다른 프로젝트와 중복되지 않는 슬러그; 완성 파일 workspace/videos/<slug>.mp4; 동일한 테이크의 다른 프로젝트 파일도 절대 안 됨; 임시 파일은 프로젝트의 tmp/에, /tmp에는 안 됨. 스킬의 scripts/는 읽기 전용입니다. 편집의 이미지는 assets/media/에 있습니다.
파이프라인
0. 작업 디렉토리 설정
$K/init.sh workspace/projects/<slug> <source.mp4> workspace/videos/<slug>.mp4
엔진의 스캐폴드(파일에서 읽은 project.json, subs.config.json, cut.mjs), 그런 다음 이 스킬의 plan.mjs 및 edl.mjs(언어의 모든 수치, 주석 처리, 입력 준비 완료), project.json의 언어 키(style: "scrapbook", accent, captionKeep), 얼굴, 이 소스의 음성에 맞게 보정된 사운드(voiceM, 음성의 순시 중앙값, sfxMasterDb 0: 그런 다음 각 역할이 음성 아래 LU로 설정됨). 그 디렉토리 안에서 이후의 모든 명령을 실행하십시오.
0.2. 먼저 묻기, 한 가지 질문으로
이것들은 사용자에게 속하며 추측할 수 없습니다. 하나의 AskUserQuestion에 모아서 물으십시오:
- 음악. 기본적으로 배경 음악 사용(세 번째 검토: « ça mériterait de mettre une musique de fond »): 먼저 Hip Hop 02를 제안(Mixkit, Lily J: 검증된 컷, 스타일의 기본; Mixkit 라이선스는 게시된 비디오에서 사용 허용), 그 다음 Convergence(다른 스타일의 하우스 트랙), 선반의 나머지(
plugins/video/assets/music/, 해당 README), 그 다음 « No music ». 귀로 선택하려면 보드(각 트랙의 동일한 12초, 모두 동일한 레벨):node $K/music-board.mjs --to 12 mixkit-hip-hop-02-738.mp3@0 [email protected] …빌드 후 (마지막에 프로젝트 자체 배경 음악을 복원). 음성 아래 15 LU($K/music.mjs, § The look). Mixkit이 아닌 트랙(Convergence, ridgeclub)은 비디오 수익 창출을 차단할 수 있다고 한 번 말하십시오. - 브랜드의 색상 (project.json
accent; 중요한 단어가 다를 경우wordColor; 설정된 경우 Your brand의 악센트,workspace/brand/,plugins/video/references/brand-kit.md§ Your brand, set once 참조): Fraunces의 중요한 단어와 말하는 자막 단어. 기본값 노란색 #FFD43B (Pipecorn's). 테이크에서 확인: 머리카락, 피부 및 벽 위에 위치(개발 테이크에서는 산호색과 주황색이 화자의 머리카락과 얼굴에서 사라져 노란색이 모든 곳에서 읽혔음). 그리고 자막이 반드시 그대로 써야 하는 이름들(captionKeep: 브랜드, 제품, 사람, « Station F »). - 실제 자료: 화자가 언급하는 것들의 스크린샷 또는 화면 녹화(제품, 리포지토리, 페이지), 로고. 없으면 공개 페이지가 캡처됨(
capture.mjs); 비공개 화면은 절대 만들어지지 않음. - Pipecorn 일반: 모든 스타일의 보너스, 매번 묻고, 기본적으로 off (
plugins/video/references/pipecorn-generic.md): 맨 끝에 약 6초, Pipecorn, 그 다음 그 값들이 하나의 슬롯에서 서로 교체, 다시 Pipecorn, 음악 없음. No · Yes, 어떤 값으로 할지(1~4;node $E/generic.mjs --list; 기본값 phone coverage, connect rate, pipeline). - 더 나은 음성: 보너스, 매번 묻고, 기본적으로 off (
plugins/video/references/voice-clean.md): ElevenLabs의 음성 분리기가 테이크에서 방의 잔향과 소음을 제거합니다. No · Yes, make my voice better. ElevenLabs 커넥터 필요: 키가 없으면 존재한다고 한 줄로 말하고(설정 › 커넥터 › 키 추가) 계속하십시오. Yes인 경우, 1단계 전에:node plugins/video/motion/voice.mjs clean <source>, 그 다음 project.json ›source는<…>-voice.<ext>(동일한 길이, 그림은 변경되지 않음).
GTM by Pipecorn 페이지에서 실행하며, 첫 번째 메시지의 브리핑이 답변합니다. 다시 묻지 마십시오.
1. 그대로 전사
$E/transcribe.sh --lang en # 실제로 말한 언어; 절대 번역하지 않음
words.json, RAW 테이크의 시간 기준. 테이크가 러시(동일한 문장을 여러 번 시도)인 경우 먼저 엔진의 rough-cut.mjs(short-editor/SKILL.md § 0.7)로 조립한 다음 전사하십시오. 그런 다음 node $E/words.mjs (엔진의 것): words-fixed.json, 각 단어의 시작점을 침묵에서 음성으로 이동하고, 일시 정지 전 실제 종료 지점으로 이동, 의심스러운 단어 목록; words.mjs env|end|say로 하나 읽기 (short-editor/SKILL.md § 1). 직접 작성한 스크립트는 사용하지 마십시오.
2. 모든 정적 구간 제거: 점프컷
$K/py.sh tighten.py --dry-run # 제거할 부분 확인
$K/py.sh tighten.py # source/tight.mov; project.json, words.json, shots.json 재지정
$K/py.sh tighten.py --keep 0.10 --min-pause 0.16 # 기본값, 기준편집물에서 측정됨
0.16초 이상의 모든 침묵이 제거되고, 조인 지점에서 최대 0.10초 유지(마지막 소리 후 0.06초, 다음 소리 전 0.04초); 선행 침묵과 꼬리 침묵도 제거됩니다. 기준편집물에서 남은 일시 정지는 0.32초를 넘지 않으며, 조인은 대략 2~3초마다 발생합니다. 화자는 화면에서 숨을 쉬지 않습니다. 각 조인은 점프컷입니다: 플래시나 워시로 숨기지 않습니다. 카메라는 프레임을 와이드/클로즈로 번갈아 가며 컷을 표시합니다(§ The look).
말이 멈추는 곳은 MEASURED(10ms 엔벨로프, 히스테리시스 room + 12 / room + 5 dB)이며, Whisper로 판독하지 않습니다. Whisper의 시작점이 이에 대해 확인됩니다: 측정된 침묵 내의 시작점으로 그 아래에 약한 소리(room + 9 dB)가 있으면 컷을 그 50ms 전에 중단합니다. room tone의 시작점은 Whisper가 일찍 온 것입니다(개발 테이크에서 세 번 0.35초 일찍 발생) 그리고 말이 시작되는 곳으로 이동합니다. 둘 다 보고합니다.
유지된 구간은 한 번에 **source/tight.mov**로 작성되며, 전체 프레임 단위(각 구간의 그림과 음성이 정확히 동일한 길이로 지속: 스냅되지 않음, 13번의 조인으로 입술이 음성보다 2프레임 뒤쳐짐), 소스의 비트 심도와 컬러 태그 유지(재등급 없음). 그런 다음 엔진의 rough-cut.mjs --adopt가 수행하는 것처럼 project.json이 이를 가리키고(source, 테이크는 rawSource에 유지), words.json이 해당 시간 기준에 맞춰지고(테이크의 전사본은 words.raw.json에 유지), shots.json이 조인 간의 샷을 나열합니다. 엔진의 온더플라이 cuts가 아닙니다. cuts가 있는 프로젝트는 슬라이스로 렌더링할 수 없으며, 슬라이스는 모션에서 순간을 보는 방법입니다. tighten.py는 항상 테이크에서 다시 시작하므로 두 번 실행해도 안전합니다. 화자가 원하는 컷(리테이크, 실수)은 project.json manualCuts(테이크의 초)에 들어간 다음 다시 tighten.py를 실행합니다.
테이크 내부의 SCENE 변경(끝의 티저 샷, 다른 방)은 shots.json에 없습니다: 프레임의 밝기가 점프하는 곳을 찾아서(ffmpeg … signalstats YAVG 프레임별) 계획에 제공하십시오(SCENE): 카메라는 그곳에서 와이드로 가고 종이가 이를 스윕인합니다.
3. 얼굴 위치
node $K/face.mjs # assets/faces.json, 초당 5개, OUTPUT 타임라인 기준
Apple Vision, 컷을 통해. 계획은 카메라를 통해 이를 읽습니다(faces(P, camera(STEPS))). F.slot()은 비디오의 모든 폴라로이드가 떨어지는 위치(프레임의 중심선, 중앙 얼굴 중심 아래 0.08, 0.44-0.50: 화면 중간), F.faceLine()은 얼굴 자체의 선(중앙값 중심, 0.36-0.50)으로 얼굴 위에 쓰여질 핵심 아이디어와 펀치 문구용, F.top(t)은 키워드를 위한 머리 위 높이, F.around(t0, t1, n)은 머리 주위 지점들, F.over(t0, t1)은 얼굴의 박스. tighten.py 실행 후 다시 실행하십시오.
4. 전사본 읽고 그림 결정: 판단 단계
전체 테이크를 읽고 기준편집물의 밀도를 적용하십시오: 1~3초마다 화면에 새로운 것이 등장 (기준편집물: 72.7초에 50개 도형; 개발 컷: 47.1초에 49개). 문장별로, § The look에서 해당 문장을 말하는 도형을 선택하십시오:
- 후크 (첫 번째 문장): 기준편집물의 세 줄 제목(흰색 선; 약속의 THE 단어는 흰색 단어 옆에 색상; 종이 위에 선) 그리고 문장이 역할, 도구, 팀을 나열하거나 암시하는 경우 머리 주위 스티커;
- 감정, 비용, 실패, 과장, 비교: 폴라로이드 형태의 실제 반응 GIF (검증된 컷: « search through thousands of platforms »에는 Pepe Silvia, « full disclosure, I'm not the best »에는 Key & Peele 땀, « what to say on a call »에는 Buddy the Elf 전화, « versus »에는 « Let's get ready to rumble »), 턱에 자막, 짧은 영상에 4~5개;
- 지나가는 목록 (« the good, the bad, the fails… ») 및 여담(장소, « a series », « stay tuned »): 단어당 하나의 스티커 (종이는 모든 키워드에 있는 것이 아님: 자막이 이미 단어를 말하고 있으며, « l'effet papier est réservé aux gros titres et à trois ou quatre phrases très importantes »);
- 핵심 아이디어, 수치, 약속: 종이 조각, 프레임에 펼쳐지고 호흡하며 접혀 사라짐(
paper(PAPER)), 레드 마커 그림(밑줄, 취소선)이 화자가 말할 때 나타남; - 언급된 실제 항목들: 사용자가 제공하지 않은 경우 공개 페이지의 스크린샷, 앱의 로고, 제품 페이지 (GEMINI_API_KEY로
capture.mjs또는picture.mjs). 베타 및 비공개 페이지는 절대 캡처되지 않음: 사용자에게 물어보십시오. 모든 것은assets/media/에 저장됩니다.
계획에 있는 각 도형에 대해 plan.mjs에 다음을 설정하십시오: bounds(크기와 위치), accent, wordColor, sfx, screenshot, captions, polaroid, overlay. 기준편집물의 example/plan.mjs는 각 도형에 대해 /example/ 아래에 PNG/MP4/ZIP/README가 있습니다. 계획 카드의 순서는 초 단위, 정확한 시간(t0, t1). F.*는 얼굴 추적에서 가져온 상대 좌표와 시간을 반환합니다. plan.mjs는 실행되기 전에 읽기 전용입니다: .plan.mjs.cache에 결과를 쓴 다음 edl.mjs가 이를 읽습니다. 다른 것을 변형하지 않고 계획을 위해 다시 실행하려면 캐시를 지우십시오. 계획에 없는 것은 절대 나타나지 않습니다. 각 도형의 sfx 키는 assets/sfx-paper/ 또는 assets/sfx-motionix/의 파일입니다 (예: "crumple", "flip", "slide", "whoosh"). 소리는 엔진의 컨텍스트에 정의된 SFX_NAMES의 이름과 일치해야 합니다.
// plan.mjs 예시
[
{
t0: 0.0,
t1: 2.5,
type: 'hook',
bounds: { x: 0.1, y: 0.2, w: 0.8, h: 0.3 },
accent: '#FFD43B',
wordColor: '#FF69B4',
sfx: 'rollup',
captions: ['This', 'is', 'the', 'hook'],
polaroid: false,
overlay: null
},
// ...
]
5. 자막 생성
node $E/edl.mjs --captions # assets/captions.json
엔진의 edl.mjs는 words-fixed.json과 plan.mjs를 읽어 각 말하는 단어에 대한 자막 항목을 생성합니다. 이 스킬의 자막 스타일은:
- 프레임 하단, 낮은 위치, 화면 하단 가장자리에서 10% 위에 고정.
- 한 번에 세 단어, 가운데 정렬.
- 현재 말하고 있는 단어는 노란색(
accent), 다른 단어는 흰색. - 자막은 말하기 시작과 함께 나타나고 다음 세 단어로 전환되기 직전까지 유지.
captionKeep에 나열된 이름과 브랜드는 완전한 형태로 유지.
edl.mjs --captions 실행 후 결과를 확인하고 수동으로 조정이 필요한 경우 assets/captions.json을 편집하십시오. 그런 다음 node $E/edl.mjs --apply를 실행하여 project.json에 적용하십시오.
6. 미리보기 및 반복
node $E/preview.mjs --frame 120 # 120번째 프레임 미리보기
node $E/preview.mjs --range 0 200 # 0~200 프레임 미리보기
node $E/build.sh --slice 5 10 # 5~10초 슬라이스 빌드
슬라이스는 아직 모든 도형과 사운드가 완성되지 않은 상태에서도 모션의 순간을 확인하는 방법입니다. tighten.py 또는 face.mjs를 변경한 후에는 항상 미리보기하여 샷이 올바른지, 얼굴이 올바른 위치에 있는지 확인하십시오. 빌드는 최종 렌더링 전에 사운드 레벨과 전환을 확인하기 위해 슬라이스(3~5초)를 생성합니다.
7. 사운드 믹싱
node $E/mix.mjs # assets/mix.json
node $E/measure.mjs # 사운드 레벨 측정
node $K/music.mjs # 배경 음악 적용
모든 사운드 레벨은 음성 아래 LU로 설정됩니다. 음성의 평균 LUFS는 voiceM에 저장됩니다. 각 사운드 역할은 다음과 같이 설정됩니다:
sfxMasterDb: 0 (음성 기준)musicDb: 음성 아래 15 LUpolaroidDb: 음성 아래 8 LU (GIF 폴라로이드용)stickerDb: 음성 아래 10 LU (스티커용)paperDb: 음성 아래 12 LU (종이 효과용)
measure.mjs는 각 사운드 파일의 통합 LUFS를 측정하고 mix.json에 저장합니다. mix.json을 확인하고 필요에 따라 레벨을 조정하십시오. 그런 다음 node $E/mix.mjs --apply를 실행하십시오.
8. 빌드
node $E/build.sh # 최종 비디오 빌드
build.sh는 모든 요소(비디오, 자막, 오버레이, 사운드)를 합성하여 최종 비디오를 생성합니다. 빌드가 완료되면 workspace/videos/<slug>.mp4에서 결과를 확인하십시오.
9. 검증
node $E/verify.mjs # 최종 비디오 검증
verify.mjs는 최종 비디오가 모든 요구 사항을 충족하는지 확인합니다:
- 올바른 해상도(1080x1920)
- 올바른 프레임 속도(30fps)
- 올바른 길이(계획과 일치)
- 자막이 올바른 위치와 스타일로 표시됨
- 사운드 레벨이 지정된 범위 내에 있음
검증에 실패하면 오류 메시지를 읽고 해당 단계로 돌아가서 수정하십시오. 검증이 통과할 때까지 반복하십시오.
The look (검증된 스크랩북 스타일)
폴라로이드 반응 GIF
- 화면 중앙, 프레임 너비의 0.80 크기.
- 항상 동일한 위치 (
F.slot(): 프레임 중심선, 중앙 얼굴 중심 아래 0.08). - 떨어지고 튕겨져 나가는 애니메이션 (0.3초 떨어짐, 0.1초 바운스, 0.2초 정지, 0.2초 튕겨져 나감).
- 흰색 테두리, 약간의 그림자.
- GIF의 캡션은 턱 위치에.
스티커
- 화자가 나열하는 항목 주위에 흰색 외곽선.
- 머리 주위에 배치 (
F.around(t0, t1, n)). - 각 스티커는 0.15초 동안 나타나고 0.1초 동안 페이드아웃.
- 크기는 머리 너비의 0.25.
종이 조각
- 오직 제목과 2~3개의 아주 중요한 핵심 문구에만 사용.
- 플랫하게 나타나서(scale 0→1, 0.2초), 잠시 멈추고(0.5~1.5초), 접혀 사라짐(scale 1→0, 0.3초).
- 작은 모눈 노트북 종이 조각 콜라주 스타일.
- Gochi Hand 서체(마커 손글씨).
- 화자가 말할 때 레드 마커 그림이 나타남(단어 취소선, 밑줄).
제목 (후크)
- 세 줄: 흰색 선, 그 위에 Fraunces(노란색)의 THE 단어, 그 옆에 흰색 Archivo 단어들.
- 종이 위에 선.
- 전체 너비의 0.70, 화면 상단에서 0.15 아래.
자막
- 프레임 하단, 낮은 위치.
- 한 번에 세 단어, 가운데 정렬.
- 말하는 단어는
accent색상(기본값 노란색 #FFD43B), 다른 단어는 흰색. captionKeep의 이름과 브랜드는 완전한 형태로 유지.- 자막은 말하기 시작과 함께 나타나고 다음 세 단어로 전환.
전환
- 새로운 섹션: 이전 섹션이 접힌 후 종이가 스윙인.
- 장면 변경: 카메라 와이드, 종이가 스윕인.
- 점프컷: 플래시나 워시 없음, 카메라가 프레임을 와이드/클로즈로 전환.
효과음
- 각 도형 등장: 해당 사운드(
$SFX_NAMES의sfx키). - 폴라로이드 떨어짐: "thud" (둔탁한 소리).
- 스티커 나타남: "pop" (톡).
- 종이 조각: "crumple" (구겨짐), "flip" (넘김), "slide" (미끄러짐).
- 마커 그림: "marker" (마커).
- 전환: "whoosh" (휙).
문제 해결
- "사운드 레벨이 너무 높음/낮음":
measure.mjs를 실행하여 각 사운드의 통합 LUFS를 확인하고mix.json에서 수동으로 조정하십시오. - "자막이 잘못된 위치에 표시됨":
assets/captions.json에서bounds와align을 확인하십시오. - "얼굴 감지 실패":
face.mjs를 다시 실행하거나 수동으로project.json의face좌표를 설정하십시오. - "비디오가 깨짐":
verify.mjs를 실행하여 오류를 찾고 해당 단계로 돌아가서 수정하십시오. - "사용자가 제공한 GIF 없음":
gif.mjs에 GIPHY_API_KEY가 설정되어 있는지 확인하거나 사용자에게 문의하십시오.
참고
example/plan.mjs: 검증된 컷의 전체 계획.example/README.md: 기준 편집물의 전체 해부학.../../references/pitfalls.md: 함정 및 모범 사례.../../references/audio-spec.md: 오디오 사양.../../references/brand-kit.md: 브랜드 키트.../../references/pipecorn-generic.md: Pipecorn 일반 보너스.../../references/voice-clean.md: 음성 개선 보너스.