Effects (AI Wala Kapil Studio)
하나의 클립 → 여러 효과, 하나의 명령. 타이밍은 초 또는 음성 단어("@views", "@कमाई+0.2"; 영어 단어도 whisper의 데바나가리 철자와 매칭됩니다. 예: link ↔ लिंक).
실행
python3 ~/.claude/skills/awk-effects/scripts/effects.py --list # 모든 효과 + 해당 속성
python3 ~/.claude/skills/awk-effects/scripts/effects.py VIDEO.mp4 --spec fx.json --preview 3.2 # 하나의 스틸, 빠름
python3 ~/.claude/skills/awk-effects/scripts/effects.py VIDEO.mp4 --spec fx.json -o VIDEO_fx.mp4
fx.json:
[
{"fx": "title-behind", "t": 0.0, "dur": 2.6, "props": {"text": "FREE|CLASS"}},
{"fx": "orbit-text", "t": 2.6, "dur": 4.0, "props": {"images": ["~/Pictures/a.png", "~/Pictures/b.png", "~/Pictures/c.png"], "size": 0.25}},
{"fx": "clone", "t": 6.9, "dur": 1.6, "props": {"count": 2, "lag": 0.4}},
{"fx": "edit-timeline", "t": 8.6, "dur": 3.0, "props": {"title": "🎬 Aise video banti hai", "y": 0.6}},
{"fx": "photo-3d", "t": 12.0, "dur": 3.0, "props": {"photo": "~/Pictures/creator.png", "label": "Aap bhi creator ✨"}},
{"fx": "map-flyto", "t": 15.0, "dur": 3.0, "props": {"image": "~/maps/india.png", "x": 0.27, "y": 0.6, "label": "Mumbai"}},
{"fx": "transition", "t": "@फटाफट", "dur": 0.4, "props": {"kind": "zoom-punch"}},
{"fx": "checklist", "t": 5.4, "dur": 3.0, "props": {"title": "Kya karna hai", "items": ["Bio link kholo", "Form fill karo", "Submit"], "every": 0.6}},
{"fx": "iphone-ui", "t": "@DM", "dur": 2.2, "props": {"app": "Instagram", "title": "aiwalakapil", "body": "New message", "icon": "📩"}},
{"fx": "spotlight", "t": 10.8, "dur": 2.0, "props": {"label": "Description mein link", "glitter": true}},
{"fx": "glass-widgets", "t": 13.0, "dur": 3.0, "props": {"items": [{"icon": "🔥", "title": "Views", "value": "4.2L"}]}},
{"fx": "money-counter", "t": 16.2, "dur": 2.4, "props": {"to": 50000, "label": "Course ki value"}},
{"fx": "chart", "t": 18.8, "dur": 2.6, "props": {"title": "Registrations", "bars": [{"label": "Day 1", "value": 58}, {"label": "Day 2", "value": 111}]}},
{"fx": "news-cut", "t": 21.5, "dur": 2.0, "props": {"headline": "FREE AI class shuru!"}},
{"fx": "freeze-callout","t": 24.0, "dur": 1.6, "props": {"name": "KAPIL", "sub": "AI Wala Kapil"}}
]
작동 방식
tools/awkvision(Apple Vision, 온디바이스)은 비디오당 한 번씩 인물 매트 + 얼굴 트래킹을 수행합니다 (VIDEO.matte.mp4,VIDEO.faces.json으로 캐싱됨; 첫 번째 빌드는 Swift 도구를 컴파일하며, 60fps 4K 소스 비디오 25초당 약 1분 소요,--fast-matte로 더 빠르게 가능).- Remotion이 투명한 뒤쪽 레이어(인물 아래)와 앞쪽 레이어를 렌더링합니다. ffmpeg가 이를 합성합니다: 비디오 → 뒤쪽 → 인물 컷아웃 → 앞쪽.
- 스포트라이트, 오빗, 유리 위젯, 머리 뒤 제목, 프리즈프레임 콜아웃은 얼굴을 자동으로 추적합니다.
clone은 ffmpeg가 매트를 이용해 합성합니다: 인물의 복사본이 시간적 지연을 두고 옆에 나타납니다 (--preview에서는 표시되지 않음).photo-3d는 Apple Vision을 사용하여 사진에서 피사체를 추출하고 배경과 분리하여 깊이감을 만듭니다.map-flyto는 모든 지도 이미지를 사용합니다 (x/y는 이미지의 분수값); 고해상도 지도를 사용하세요. 작은 이미지는 확대 시 흐려집니다.- props의 로컬 이미지 경로(
images,image,photo)는 스튜디오에 자동으로 복사됩니다.
Claude를 위한 워크플로우
- 스크립트를 전사하거나 읽고, 4
8개의 순간을 선택합니다 (처음 2초 안의 후크, 숫자, 목록, CTA). 효과를 연속으로 쌓지 마세요. 각각 13초, 사이사이에 숨을 쉴 공간을 둡니다. - 전체 렌더링 전에 항상
--preview T로 몇 가지 주요 순간을 확인합니다. - 릴 순서: 자동 컷 → 자동 줌 → 효과 → 캡션 → 사운드 효과 → 오디오 마스터 (줌과 트랜지션은 비디오를 다시 그리므로 캡션은 그 후에 추가합니다).
- 머리 뒤 텍스트는 머리 위 공간에 맞게 크기가 조정됩니다. 머리카락이 마지막 줄의 아래 부분을 덮습니다 (이것이 의도된 룩입니다). 줄당 짧은 단어(≤ 8자)가 가장 잘 읽힙니다.
- 이미 텍스트 상자가 박혀 있는 비디오에서는 빈 영역에 효과를 넣거나 전체 화면 순간(뉴스 컷, photo-3d, 프리즈프레임 콜아웃, 스포트라이트)을 사용하여 서로 겹치지 않도록 합니다.
- 유리 카드는 블러 대신 틴트가 적용되어 어떤 영상에서도 잘 읽힙니다.