증거 설명 영상 (음성 메모 → 1분 분량의 세로형 영상 + 증빙 자료)
"포렉스 없는 말라위인의 비자 카드 발급 방법"(2026년 11월 11일)을 기반으로 제작됨: 4분 15초 안드로이드 음성 메모 → 60.4초 TikTok 영상, 10개의 웹페이지 증거, Bridge 자체 아키텍처 다이어그램, 9개의 로고, 4번의 '칭' 효과음. 실제 예제는 assets/examples/visa-cards/에 있음 (스크립트 + 레이 체크, 컷 목록, 촬영 작업, 전체 video.json, 게시글 카피, 연락처 시트).
음성 메모 ─► 전사 + 아일랜드(islands) ─► 스크립트 + 레이 체크 (체크포인트) ─► 음성 컷 (검증된 지점) ─► 템포 + 단어
│
└► 증거: 대상 영역이 있는 스크린샷 · 로고 · 문서에서 추출한 다이어그램
│
video.json 타임라인 (씬, 줌, 스탬프, 용어 설명, 칭, 다이어그램 단계)
│
효과음 + 조용한 배경 음악 + 믹스 ─► 안전 영역이 있는 스틸 이미지 ─► 렌더링 ─► 검증
설정
SK=~/.claude/skills/evidence-explainer
zsh $SK/scripts/new_explainer.sh "<오디오 파일>" .context/<슬러그> # ~1-3분 소요; 디스크 여유 공간 출력
cd .context/<슬러그> # 모든 스크립트는 여기서 실행 (필수)
필요 사항: ffmpeg, Python 3 + numpy + Pillow, Node 20+, Chrome (Playwright가 설치된 Chrome을 사용), whisper.cpp + ~/.cache/whisper.cpp에 있는 ggml-medium.en.bin (scripts/setup_whisper.sh로 빌드; WHISPER_DIR로 경로 변경 가능). 스캐폴드가 remotion/에서 npm i를 실행하거나, EXPLAINER_NODE_MODULES가 기존 node_modules를 가리키면 이를 복제함 (APFS copy-on-write, 약 0바이트). 외형은 "개발 모드" (src/brand.ts: 도트 그리드, Space Mono 폰트, 청록/노랑/호박색); 핸들/사이트 정보는 video.json에서 가져옴.
단계 (해당 단계에 도달하면 레퍼런스를 읽을 것)
| # | 단계 | 읽을 문서 | 도구 |
|---|---|---|---|
| 1 | sent.txt에서 비트(beat)를 바탕으로 스크립트 작성, 일반인 검증(lay-person check) 수행 | references/01-script-and-lay-check.md | — |
| 2 | 검증된 지점에서 음성을 60초 이하로 자르고, 템포 조정, 자막 생성 | references/02-voice-cut.md | islands_labels.txt, dips.py, tx.sh, cut.py, voice.sh, words.py |
| 3 | 증거 수집: 스크린샷 + 대상 영역, 로고, 문서 다이어그램 | references/03-evidence.md | shoot.mjs, logo_tools.py, logo.mjs, register_image.py |
| 4 | remotion/src/video.json 타임라인 작성 | references/04-video-json.md | 엔진 src/Explainer.tsx |
| 5 | 사운드: 클릭, 칭, 조용한 배경 음악, 믹스 | references/05-sound.md | sfx_mix.py, score.py |
| 6 | TikTok 안전 영역으로 미리보기, 렌더링, 검증 | references/06-render-verify.md | remotion/stills.mjs, sheet.py, verify.sh |
스크립트가 확정된 후 빠른 경로:
python3 $SK/scripts/cut.py cut.json && zsh $SK/scripts/voice.sh 1.18 "이름, 브랜드, 전문 용어"
python3 $SK/scripts/words.py word_fixes.json
node $SK/scripts/shoot.mjs shoot_jobs.json shots && cp shots/*.png remotion/public/shots/ && cp shots/shots.json remotion/src/shots.json
python3 $SK/scripts/logo_tools.py sync # 로고 가져온 후 실행
# remotion/src/video.json 작성 후:
python3 $SK/scripts/sfx_mix.py path/to/music.mp3 # 또는 `none`
(cd remotion && npx tsc -p . && node stills.mjs 45,300,...) && python3 $SK/scripts/sheet.py stills --zones
(cd remotion && npx remotion render src/index.ts Explainer ../out/<슬러그>.mp4 --codec=h264 --crf=18 --audio-codec=aac --audio-bitrate=192k)
zsh $SK/scripts/verify.sh out/<슬러그>.mp4
60초 전체 렌더링은 약 40초 소요; 스틸 이미지는 번들 후 각각 약 1초.
하우스 스타일 (첫 번째 영상 제작자의 리뷰에서 비롯됨, 특별한 지시가 없으면 유지)
- 전체 화면 B-roll. 스크린샷이 1080×1920 프레임을 가득 채움 (브라우저 카드 없음); 카메라는 넓게 시작한 후, 증거가 되는 문장으로 줌인하면서 하이라이터가 그 문장을 쓸어내림. 좌측 상단에 얇은
https://domain태그 + 노란색// evidence: …표시. - 로고는 카메라 클릭음과 함께 등장 (흰색 카드, 약간 기울임, 축소 팝, 흰색 플래시). 더 많은 로고를 보여줄 것: 언급된 모든 회사 로고는 한 번씩 나타남.
- 성공적인 거래마다 "카칭" 효과음 (계정 생성, 돈 수신, 지갑 충전, 결제 승인)과 함께 녹색 ✓ 칩과 링 효과.
- 일반인을 위한 아키텍처. 하나의 다이어그램 (You → App → Infrastructure → Card), 노드 안에 로고를 배치하고 단계별로 구성 ("STEP 1 · SIGN UP"…), 노드 사이를 이동하는 레이블이 있는 패킷. 제공업체의 개발자 다이어그램은 일반인이 이해할 수 있는 상자만 확대하여 보여주고, 전체를 보여주지 않음.
- 스크립트 작성 후 스스로에게 질문: 이 제품을 사용하는 일반인에게 도움이 될까, 혼란을 줄까? "혼란"을 유발하는 부분은 모두 수정 (용어 설명 카드, 더 간단한 레이블, 코드 스타일링 금지). 스크립트 파일과 요약에 이 검증 결과를 포함.
- 하단 고정 자막: 자막 상자의 하단은 프레임 하단에서 400px 위에 고정됨 (TikTok의 사용자 이름/캡션 블록 바로 위), 2줄 페이지는 위로 자라며 오른쪽 액션 레일을 피해 패딩 처리.
- 첫 장면에 훅 (큰 도트 매트릭스 단어 + 첫 번째 증거 위에 시청자의 질문, 흐릿하게 처리), 마지막에 팔로우 CTA (로고 체인 요약, FOLLOW, 핸들, 버튼, 사이트).
- 음악은 조용한 배경음 (score.py BASE −26 LUFS): 시끄럽고 극적인 음악은 "너무 크고 짜증난다"고 판명됨.
체크포인트 (멈추고 권장 사항과 함께 질문)
- 스크립트 + 레이 체크는 어떤 것도 자르기 전에 수행: 비트 표 (그가 말한 내용 → 화면에 표시될 내용) 및 혼란/명확성 표.
- 확인할 수 없는 주장 (예: "앱 X는 제공업체 Y를 사용합니다"): 화자의 말로 그대로 유지하고, 화면 레이블은 "예" / "한 가지 예"로 표시하고 플래그 처리.
- 렌더링 전: 모든 새 요소의 스틸 이미지를
--zones옵션으로 생성. - 게시 전: 로고 라이선스 (CC BY/BY-SA는 출처 표시 필요), 신중한 표현 ("가장 likely"는 계속 표시), Whisper가 잘못 들은 이름 (자막은 화자가 이상하게 말했더라도 올바른 철자를 사용). 요청이 있을 때만 업로드.
작업 원칙
- 주장보다 증거: 모든 사실적 비트(factual beat)에는 해당 내용을 증명하는 페이지가 있으며, 실시간으로 캡처되고, 해당 문장으로 줌인됨. 블로그보다 1차 출처(회사 뉴스룸, 공식 문서, 규제 기관/중앙은행, 앱 스토어 페이지)를 선호. 페이지가 말하지 않는 내용 (Bridge의 국가 테이블 = 온보딩 가능한 국가, 카드 사용 가능 여부가 아님)을 기록하고 그에 따라 레이블 지정.
- 검증된 지점에서만 편집: 에너지 아일랜드 + 양분된 딥(dips) (
tx.sh) 사용, Whisper 단어 시간 사용 금지 (전화 오디오에서는 최대 수 초까지 오차 발생). 최종 컷과 렌더링을 다시 전사. - 용어 설명은 짧고 구체적: "스테이블코인 = 디지털 달러, 1 USDC ≈ $1", "KYC = 가입 시 했던 신분증 + 셀피 확인", "API = 앱이 X를 사용할 수 있게 해주는 연결 플러그".
- 줌 제한: 1200px 모바일 스크린샷은 줌 1.0에서 프레임을 채움 (이미 양쪽 약 36px씩 잘림); 문단은 ≤ 1.3, 짧은 대상 (코드 줄, 테이블 행)은 1.8–2.0. 하이라이트된 단어와 주요 열(예: 통화)이 프레임 안에 남아 있는지 확인.
- 검증 후 보고: 길이 (영상 vs 오디오), −14 LUFS / 피크 ≤ −1, 렌더링 전체 전사본, 음성 대비 +5 dB 이상의 칭, 확인한 연락처 시트. 음악은 듣지 않고 태그로 선택한 내용을 보고.
최종 요약 형식
전달 파일 경로 + 길이; 연락처 시트 이미지; 비트별 화면 구성 (짧게); 일반인 검증 결과; "게시 전 확인 사항" (확인되지 않은 주장, 라이선스, 신중한 표현, 잘못 들은 이름); 관리 사항 (작업 디렉토리, 디스크, 재렌더링 비용, 수정할 파일).