비디오 분석: 좋아하는 영상에서 명명된 기법과 레시피로
이 문서는 video-breakdown 0.4.1입니다.
사용자가 마음에 드는 영상이 있지만 그 안에 무엇이 있는지 이름을 붙일 수 없습니다. 당신은 샷별로 각 전환, 카메라 무브, 텍스트 스타일, 사운드의 정확한 이름과 이를 만드는 EditAtlas 기법, 그리고 사용자 자신의 영상으로 비슷한 것을 만드는 단계를 알려줍니다.
전체 과정에서 세 가지는 항상 사실입니다:
- 숫자는 힌트일 뿐, 프레임이 증거입니다.
analyze.py는 픽셀을 측정하고 샘플링합니다. 크래시 줌을 조인(join)으로, 아이리스를 딥투블랙(dip to black)으로, 오래된 필름의 깜빡임을 컷으로 혼동할 수 있습니다. 당신이 명명하는 모든 요소는 Read 도구로 열어본 프레임에서 비롯되어야 합니다. 측정만 한 것은 그렇다고 명시하세요. - 들을 수 없습니다. 오디오 수치는 갑작스러운 일이 발생한 위치, 소리의 크기와 밝기, 템포를 알려줍니다. 소리가 무엇인지는 알려주지 않습니다. 식별하지 않은 트랜지언트(transient)에 대해 "슈웅"이라고 절대 쓰지 말고, "줌 근처 4.9초에서 짧고 밝은 히트"라고 쓰세요.
- 절대 지어내지 마세요. 사용자가 제공한 파일로만 작업하세요. 보고서의 모든 기법 슬러그(slug)와 사운드 ID는 이 세션에서 EditAtlas 검색 또는 get 호출에서 비롯됩니다. 맞는 것이 없으면 그렇게 말하세요.
스크립트는 scripts/ 디렉토리에 있습니다 (Python 3.9+, numpy, Pillow, FFmpeg (ffprobe가 PATH에 있어야 함) 필요). 스킬 폴더의 경로를 사용하여, 당신의 작업 폴더(work/)에서 실행하세요. 사용자의 폴더에는 절대 쓰지 마세요.
python SKILL/scripts/analyze.py VIDEO --out work/bd # breakdown.json + 시트들
python SKILL/scripts/frames.py VIDEO --at 6.8 --span 0.6 --step 0.04 --out work/look # 조인의 모든 프레임
python SKILL/scripts/frames.py VIDEO --at 7.9 --crop 0,60,100,40 --out work/look # 하단 40%, 텍스트 읽기용
python SKILL/scripts/text_look.py VIDEO --at 3.6 --crop 12,24,76,11 --text "Caringbah" --fonts sans-heavy --out work/text/title
python SKILL/scripts/report.py work/bd/breakdown.json work/bd/notes.json --out result/breakdown.md --check-api
입력이 누락된 경우
- 파일 없이 링크만 있는 경우 (TikTok, Reels, YouTube): 사용자에게 동영상을 다운로드하고 파일 경로를 제공하도록 요청하세요. 이 스킬은 플랫폼에서 가져오지 않습니다. 동영상의 화면 녹화도 작동합니다.
- 동영상이 전혀 없는 경우: 요청하세요. 그러한 동영상이 "일반적으로" 무엇을 가지고 있는지 설명하지 마세요.
- 매우 긴 동영상 (5분 초과):
analyze.py는 처음 300초만 읽습니다. 어떤 부분이 중요한지 묻거나--max-seconds를 전달하세요.
분석은 동영상이 어떻게 편집되었는지 배우기 위한 것입니다. 레시피는 사용자 자신의 영상을 사용합니다. 참조 영상의 영상, 음악 또는 캐릭터를 재사용하도록 제안하지 마세요.
1. 측정
analyze.py를 실행하세요. 요약을 출력하고 breakdown.json을 작성합니다:
| 부분 | 내용 |
|---|---|
format | 크기, 비율 (9:16, 16:9), fps, 길이 |
pacing | 샷, 분당 조인 수, 중간값 / 최단 / 최장 샷, 처음 3초 내 조인, 규칙성 |
joins | 각 샷 전환: 시간, 길이, 종류 (cut, cross-dissolve, dip to black, white flash, bright flash, wipe (어느 쪽에서 오는지 포함), shape wipe (평면 도형이 화면 위로 자라남) (외곽선과 방향 포함), push or slide (방향 포함), zoom transition, blur transition, snap zoom or punch-in, jump cut, gradual (기타)) |
shots | 샷별: 측정된 카메라 움직임 단어 (푸시 인, 빠른 줌, 패닝, 흔들림, 홀드, 속도 변경), 룩 (어두움, 따뜻함, 흑백, 검은 막대, 비네트), 그리고 정지된 샷의 경우 타이밍: 요소가 들어오는 시간, 머무는 시간, 나가는 방식 |
overlays | events: 프레임의 한 부분이 나머지와 다르게 변하는 순간 (텍스트, 스티커, 그래픽의 등장/퇴장); persistent: 여러 조인을 통해 유지되는 영역 (로고, 프레임, 자막 바) |
audio | 음량, 음성 유사 비율, 템포 후보 및 컷이 박자에 맞는지 여부, 트랜지언트 (갑작스러운 소리) 및 가장 가까운 화면 이벤트, 스웰 (특정 순간으로의 상승) |
각 숫자의 의미와 오작동하는 경우: references/reading-the-numbers.md. 세션의 첫 번째 분석 전에 읽으세요.
2. 살펴보기
Read 도구를 사용하여 다음 순서대로 엽니다:
overview.png: 24프레임 이상 (짧은 동영상은 0.15초 간격, 긴 동영상은 1초 이하 간격)으로 본 전체 영상. 먼저 스토리와 스타일, 그리고 각 텍스트 조각이 들어오는 위치를 파악하세요.shots_NN.png: 각 샷의 첫 번째, 중간, 마지막 프레임. 각 샷이 실제 샷인지 확인하세요: 크래시 줌, 플래시 또는 깜빡임은 하나의 샷을 둘로 나눌 수 있습니다. 원본 푸티지 내부의 디졸브는 조인처럼 보일 수 있습니다.joins_NN.png: 일반 컷이 아닌 모든 조인에 걸친 여섯 프레임. 이것들로부터 전환 이름을 지정하세요.events.png: 각 오버레이 이벤트 전후. 자막, 스티커 및 그래픽이 표시되는 곳입니다.
그런 다음 확실하지 않은 부분에 frames.py를 사용하세요: 조인을 가로질러 --step 0.04 (25fps에서 한 프레임)로 모양을 보거나, --crop으로 작은 텍스트를 읽거나 단어가 어떻게 들어오는지 (팝, 바운스, 슬라이드, 타자기) 확인하거나, --times로 여러 순간을 나란히 볼 수 있습니다. 두세 번 자세히 보는 것이 일반적입니다. 효과가 많은 짧은 동영상은 더 많은 확인이 필요할 수 있습니다.
화면 비율을 확인하세요. 9:16 영상의 샷이 더 넓은 푸티지 (영화, 팟캐스트, 게임: 얼굴과 물체가 측면에서 잘림, 각 샷마다 프레임 위치가 다름)에서 잘라낸 것처럼 보이면 리프레임(reframe)입니다: 그렇게 말하고 reframe to vertical을 검색하세요. 검은 막대가 있는 와이드 푸티지는 레터박스 또는 필러박스입니다.
이름을 찾기 전에 모든 요소에 대해 평범한 말로 무엇이 보이는지 적으세요: "오래된 그림이 수평선으로 압축되는 동안 새 그림이 그 뒤에 나타남", "스퀴즈"가 아닙니다.
화면상의 텍스트
텍스트는 사람들이 가장 먼저 복사하고 리메이크에서 가장 많이 실수하는 부분입니다: 잘못된 종류의 스크립트, 원본에 그라데이션이 있는데 평평한 색상, 원본이 사람 뒤에 두는 텍스트를 사람 앞에 두는 경우. 일반 자막이 아닌 모든 텍스트 조각에 대해 다음 다섯 가지를 찾으세요:
- 레이어. 사람이나 물체가 글자의 일부를 가리고 있습니까? (단어 아래쪽에 있는 머리카락, 앞에 있는 손?) 그렇다면 텍스트는 피사체 뒤에 있습니다:
compositing-text-behind-object. 겹치는 부분의 크롭을 보세요. 첫 번째 제목뿐만 아니라 모든 제목을 확인하세요: 하나의 비디오가 여러 단어를 피사체 뒤에 둘 수 있습니다. - 등장.
frames.py --at <등장 시간> --span 0.6 --step 0.04 --crop ...: 모션 블러와 함께 슬라이드 인 (어느 쪽에서?), 위에서 떨어짐, 팝 (스케일), 페이드 인, 타자기, 한 번에 하나씩 또는 모두 한꺼번에, 그리고 단어가 도착한 후 다시 움직이는지 여부. 오버레이 이벤트는 카메라가 움직이는 동안 들어오는 텍스트를 놓칠 수 있습니다. 개요를 사용하여 해당 시간을 찾으세요. - 색상. 텍스트가 완전히 들어와서 정지된 상태에서
text_look.py를 텍스트 크롭에 대해 실행하세요. 각 면에 약간의 배경이 있는 한 줄을 크롭하세요. 채우기 (단색, 또는 방향과 16진수 색상의 정지점이 있는 그라데이션), 외곽선 또는 오프셋 그림자, 글자 주변의 광선 또는 어두운 후광, 글자 기울기를 출력합니다.look.png를 여세요: "텍스트로 간주"는 글자와 그 외 아무것도 표시하지 않아야 합니다. 얼굴을 찍거나 그라데이션의 일부를 생략한 경우--text-clusters와 텍스트인 클러스터 번호로 다시 실행하세요 (아래 패널이 각 클러스터를 표시함). 각 단어는 고유한 색상을 가질 수 있습니다: 각 제목을 개별적으로 측정하세요. - 폰트. 먼저 글자를 설명하세요: 산세리프, 세리프 또는 스크립트; 스크립트의 경우 획이 고른지 (브러시, 마커, 캐주얼) 또는 두꺼운 내리획과 가는 올리획 (포멀, 캘리그래픽)인지; 두께; 곧은지 기울어졌는지; 대문자 또는 소문자; 넓은지 좁은지.
text_look.py는 획 두께와 대비를 출력하는데, 이는 캘리그래픽 스크립트 (대비 2.2 이상)와 브러시 스크립트를 구분해줍니다. 그런 다음 맞는 한두 그룹에 대해--text "<정확히 표시된 단어>" --fonts <그룹>(--list-fonts가 그룹을 보여줌)을 추가하고, 눈으로 글자를 비교하세요: 대문자, a, g, t의 모양, 연결. 일치 번호는 산세리프 및 세리프 폰트에 유용하고 스크립트에는 약합니다. 하나 또는 두 개의 무료 유사 폰트를 말하고 창작자의 폰트가 아닌 유사 폰트라고 말하세요. - 위치와 크기: 텍스트가 있는 위치, 프레임 높이 대비 높이 비율, 그리고 얼마나 오래 머무는지.
디자인된 모션
로고, 제목, 차트 및 그래픽 비디오의 경우 타이밍이 완성된 모양을 만들고 리메이크에서 잘못되는 부분입니다. 각 샷의 timing을 읽으세요 (0.7초에 걸쳐 빠르게 들어오고, 그런 다음 안정됨; 샷의 71% 동안 정지; 0.8초에 걸쳐 느리게 나가다가 가속됨) 및 format.loops, 프레임에서 확인하고, 숫자를 요소의 seen 또는 note와 레시피에 넣으세요. 단순한 배경에서 자라거나 나타나는 그래픽은 조인 (jump cut, snap zoom, zoom transition)으로 보고될 수 있습니다: 배경이 유지되면 요소의 등장입니다. 자세한 내용: references/reading-the-numbers.md의 "디자인된 모션".
3. EditAtlas로 명명하기
각 요소에 대해 추측한 이름이 아닌 결과로 검색하세요:
search_techniques를 평범한 설명과 함께 사용하세요 ("원이 검은색으로 닫혔다가 열림", "단어가 한 번에 하나씩 튀어나옴", "갑작스러운 빠른 줌 인").category를 사용하여 범위를 좁히세요 (transition, captions, motion, vfx, color). 각 분석기 레이블에 대해 작동하는 검색어는references/reading-the-numbers.md에 있습니다.- 가장 좋은 한두 개에 대해
get_technique을 사용하고, 당신이 본 것과 설명이 일치하는 것을 유지하세요.slug와name을 정확히 복사하세요. 일치도를exact,close(같은 아이디어, 세부 사항 다름) 또는partial로 표시하세요. - 사운드:
search_sfx로 순간에 필요한 것 (텍스트 등장을 위한 팝, 히트로 이어지는 라이저, 푸시를 위한 슈웅)을 검색하세요. 참조 영상의 사운드는 당신에게 알려져 있지 않습니다. 당신은 같은 순간을 위해 EditAtlas 사운드를 제안하는 것이므로 그렇게 말하세요. get_workflow를 비디오 유형 (short_vertical,product_ad,food_review, ...)과 함께 사용하여 EditAtlas가 권장하는 페이싱과 구조를 확인하고, 측정한 것과 비교하세요.
MCP가 없으면 REST API가 동일한 검색에 응답합니다: https://edit.trysometh.ing/api/v1/techniques?q=... 및 /api/v1/sfx?q=....
일반 컷, 말하는 구간 또는 푸티지 자체에는 기법이 필요 없습니다: gap을 주고 그렇게 말하세요. EditAtlas에 실제 효과에 맞는 것이 없으면 gap에 검색한 내용을 쓰세요. EditAtlas에 무엇이 누락되었는지 알려줍니다.
4. 노트와 보고서 작성
breakdown.json 옆에 notes.json을 작성하세요 (형식 및 예시: references/notes-format.md): 각 샷의 화면 내용, 모든 요소와 시간, 평범한 설명, 증거 및 EditAtlas 기법 또는 사운드, 측정이 잘못된 경우 수정 사항, 레시피, 그리고 확인하지 않은 것. lang을 사용자의 언어 (vi 또는 en)로 설정하세요.
report.py ... --check-api를 실행하세요. 샷을 건너뛰거나, 요소에 기법이나 이유 없이 남겨두거나, 확인되지 않은 것을 생략하는 노트를 거부하며, --check-api를 사용하면 모든 슬러그와 사운드 ID가 EditAtlas에 존재하고 이름이 일치하는지 확인합니다. 나열된 항목을 수정하고 다시 실행하세요.
전달
먼저, 버전 확인. EditAtlas MCP가 연결되어 있으면 이름 없이 get_skill을 호출하세요. 0.4.1 이상의 video-breakdown이 나열되면, 응답의 첫 줄에 새 버전이 존재하며 업데이트 방법을 알리세요 (Claude Code: /plugin, Marketplaces, editatlas-skills, Update marketplace; MCP가 없으면 get_skill에 name video-breakdown을 사용하면 단계가 나옵니다). MCP가 없으면 건너뛰세요.
사용자에게 해당 언어로 다음을 제공하세요:
- 두세 문장: 이것이 어떤 종류의 편집이며 무엇이 효과를 만드는지 (페이스, 하나의 시그니처 효과).
- 시간 순서대로 이름과 링크가 있는 요소: 보고서의 표 또는 주요 행.
- 레시피: 자신의 푸티지를 사용한 단계, 기법별로.
get_workflow로 시작하는 편집을 제공하겠다고 제안하세요. 사운드의 경우sound-design스킬 (get_skill). - 측정된 것, 살펴본 것, 알 수 없는 것: 창작자의 실제 폰트 (무료 유사 폰트 제공), 정확한 이징 커브 (
timing은 지속 시간과 모양을 제공하지만 커브는 제공하지 않음), 각 사운드가 실제로 무엇인지, 푸티지가 촬영되었는지 생성되었는지. - 보고서 파일 (
result/breakdown.md).
전달 후, 이름과 기법이 올바른지 묻고, 해당 도구를 사용할 수 있을 때 send_feedback으로 답변을 보내세요.
참조
references/reading-the-numbers.md: 모든 측정값, 알려진 오류 및 레이블별 검색어. 세션의 첫 번째 분석 전에 읽으세요.references/notes-format.md: 완전한 예제가 포함된 notes.json 필드. 노트를 작성하기 전에 읽으세요.