Communitygithub.com

eduramza/shorts-factory

긴 동영상(자막 + 메타데이터)을 Hook → Storytelling → Payoff 구조를 사용하여 시청자 유지율에 최적화된 세로형 숏폼(Shorts/TikTok/Reels)으로 변환합니다. 구간을 선택하고, 점수를 매기고, 후크를 재정렬하고, 컷, 자막, 줌, 음악 및 효과를 정의한 후 JSON 형식의 편집 결정 목록(EDL)을 반환합니다.

shorts-factory란 무엇인가요?

이 스킬은 긴 형식의 동영상(자막 및 메타데이터 포함)을 숏폼 플랫폼(Shorts, TikTok, Reels)에 최적화된 세로형 클립으로 변환하는 엔드투엔드 파이프라인입니다. 시청자 유지율이 바이럴 성공의 핵심이라는 원칙에 기반하여, Hook(0-3초), Storytelling(중간), Payoff(마지막 3-5초)의 3단계 구조로 모든 클립을 구성합니다. 이 스킬은 긴 동영상에서 가장 바이럴 가능성이 높은 구간을 선별하고 점수를 매긴 후, 강력한 후크를 앞으로 배치하는 Cold Open 기술을 자동으로 적용합니다. 또한 동적 자막, 줌 효과, 컷 편집, 음악/효과 선택을 위한 상세한 매개변수와 함께 JSON 형식의 편집 결정 목록(EDL)을 생성하여 숏폼 콘텐츠 제작 과정 전체를 자동화하고 최적화합니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/eduramza/shorts-factory/tree/HEAD/skills/retention-shorts

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

기술: 리텐션 숏츠 (후크 → 스토리텔링 → 보상)

0. 출처 및 방법론적 투명성

기반: "ESSA TÉCNICA VIRALIZOU MEU SHORTS COM 30 MILHÕES DE VISUALIZAÇÕES" (O Milionário 채널, ID iPpt_INjn8A). [영상] 표시 항목은 저자가 가르친 내용입니다. [EXT] 표시 항목은 이 시스템의 엔지니어링 확장입니다: 합리적인 휴리스틱이지만 영상에 의해 입증되지 않았습니다. 실제 리텐션 데이터로 보정해야 합니다 (10절 참조).

1. 핵심 원리 [영상]

  • 짧은 영상의 입소문 여부를 결정하는 것은 리텐션 라인입니다: 더 많은 사람들이 끝까지 시청할수록 플랫폼이 더 많이 배포합니다.
  • 목표: 리텐션 라인을 최대한 직선으로 만드는 것, 하락 없이. 중요한 것은 시청자가 끝까지 도달하는 것입니다.
  • 세 가지 필수 부분: Hook (후크), Storytelling (스토리텔링), Payoff (보상).
  • 대본/내러티브는 "자동차의 엔진"입니다: 내러티브 없는 멋진 편집은 시청자를 붙잡지 못합니다.
  • 길이: ~15초 이하의 영상은 폭발적으로 퍼지는 경향이 더 큽니다. 전체를 시청하기 더 쉽기 때문입니다. 더 긴 영상은 입소문이 나기 더 어렵지만 충성도 높은 시청자를 구축합니다. 틈새에서 더 긴 영상이 필요한 경우 동일한 세 단계를 사용하십시오.

2. 길이 모드 [영상 + EXT]

모드목표 길이사용 시기
viral12–20초 (최대 25)도달 범위 극대화. 기본값.
balanced20–40초최소한의 맥락이 있는 콘텐츠.
authority40–75초충성도 높은 시청자 구축, 더 깊이 있는 콘텐츠.

사용자가 모드를 선택합니다. 좋은 구간이라도 모드 제한을 초과하지 마십시오: 죽은 부분을 잘라서 단축하십시오.

3. 의사 결정 파이프라인 (순서대로 따르기)

1단계: 후보 분할

  • 입력: 단어별 타임스탬프가 포함된 전사, 장면 전환, 침묵, 화자.
  • 문장 경계에서 시작하고 끝나는 후보 창을 생성합니다 (문장이나 생각 중간에 절대 넣지 않음). 요청된 수보다 3배 더 많은 후보를 생성합니다.
  • 각 후보는 자체 완결적이어야 합니다: 맥락이 없는 시청자가 나머지 영상 없이 이해할 수 있어야 합니다. 이전 맥락에 의존하는 경우 폐기하거나 맥락 자막을 준비합니다 (6절).

2단계: 각 후보 점수 매기기 (0–100)

기준가중치평가 항목
Hook 잠재력25처음 3초 안에 명확하고, 직접적이며, 빠르고, 보상을 약속하는 문장이나 순간이 있습니까? [영상]
긴장/내러티브25갈등, 잘못되는 일, 장애물, 열린 질문 또는 서스펜스가 있습니까? [영상] 해결책이 있습니까?
Payoff20결말이 후크가 약속한 것(결과, 폭로, 감정, 결론)을 제공합니까? [영상]
자체 완결성15단독으로 의미가 있습니까? [EXT]
밀도/리듬10빈말, 긴 멈춤이 적고, 몇 초마다 정보가 제공됩니까? [EXT]
감정/참신성5놀라움, 유머, 강한 의견, 충격적인 숫자 [EXT]

규칙:

  • Hook < 12/25 또는 Payoff < 8/20 → 총점에 관계없이 폐기.
  • 사용자에게 기준별 점수와 각 기준에 대한 1줄 설명을 표시합니다.
  • 점수 순으로 정렬합니다. 중복 컷(> 30% 겹침)은 피하고, 더 나은 것을 유지합니다.

3단계: Hook → Storytelling → Payoff 구조 매핑

선택된 후보에 대해 타임라인에 표시:

  • HOOK (0–3초) [영상]: 명확하고, 직접적이며, 빠르고, 약속이 있음. 인사말, "안녕하세요 여러분", "그럼", 소개 없음.
  • STORYTELLING (중간) [영상]: 긴장의 비트 시퀀스. 각 비트는 다음 유형 중 하나: conflito (무언가 잘못됨), solução (무엇을 하는지), suspense ("하지만 그 전에... 무언가 일어났다"). 내러티브는 이야기가 "잘리고" 호기심을 불러일으키는 순간이 있어야 합니다.
  • PAYOFF (마지막 3–5초) [영상]: 후크가 약속한 보상을 제공합니다.

원본 구간이 강력한 후크로 시작하지 않는 경우 Cold Open 기술을 적용합니다 [EXT]:

  1. 해당 구간 자체에서 가장 강력한 문장(약속, 결과 또는 가장 도발적인 문장)을 찾습니다.
  2. 해당 문장을 시작(0–3초)에 후크로 배치한 다음 시간 순서로 돌아갑니다.
  3. 문장이 단독으로 의미가 있고 보상이 계속 명확한 경우에만 수행합니다. 의미를 왜곡하지 마십시오: 화자가 말한 의미를 변경하는 것을 금지합니다.

4단계: 후크 엔지니어링 [영상 + EXT]

  • 화면 후크 텍스트 (시작 제목) 3가지 변형을 생성하며, 각각 ≤ 8단어:
    • 결과 약속 ("$5짜리 선물을 받고 할머니가 우셨다").
    • 호기심/공백 ("나는 단돈 $5만 있었는데...").
    • 모순/도발.
  • 텍스트는 콘텐츠와 관련하여 진실해야 함 (보상이 뒷받침하지 않는 클릭베이트 금지).
  • ≤ 2초 안에 읽을 수 있어야 합니다.

5단계: 리듬 정리 [EXT]

  • 0.35초 이상의 침묵, 머뭇거림 ("음", "그게", "저기", "어어"), 반복 및 잘못된 시작을 제거합니다.
  • 폭로 전 (긴장감을 위해) 0.1–0.2초의 미세 멈춤은 유지하며, 멈춤에 기능이 있는 경우.
  • 음절 중간에서 자르지 마십시오: 오디오 제로 크로싱 지점에서 컷 포인트를 사용하고 30–60ms 크로스페이드를 적용합니다.
  • 결과가 모드 제한을 초과하면 중간에서 긴장도가 가장 낮은 비트를 먼저 제거하고, 후크나 보상은 절대 제거하지 않습니다.

6단계: 편집 계획 [영상 + EXT]

영상에서 권장하는 요소, 시청자가 "시간이 어떻게 지나가는지 모르게" 하려면 [영상]:

  1. 동적 자막: 단어별로, 말하는 단어를 강조 표시.
  2. 줌 및 빠른 컷: 항상 무언가가 진행 중이어야 함.
  3. 장면 간 음악 전환: 여러 가지가 동시에 일어나는 느낌을 줌.
  4. 긴장 구간의 서스펜스 배경 음악은 결말을 보고 싶게 만듦.

제안된 운영 매개변수 [EXT], 조정 가능:

  • 시각적 케이던스: 1.5–3.5초마다 시각적 변화 (줌, 컷, 프레임 변경, 강조, B-roll). 4초 이상 변화 없이 두지 않음.
  • 줌: 강조할 단어에 펀치인 105–115%; 긴장 구간에서 느린 줌 (100→108%); 다음 컷에서 리셋. 피로를 방지하기 위해 방향을 번갈아 가며.
  • 자막: 한 번에 1–3단어, ≤ 2줄, 활성 단어는 대비 색상으로 표시, 하단 1/3 지점에 위치 (앱 인터페이스 영역 밖: 하단 여백 ~20%, 측면 여백 ~6% 유지). 단어를 강화할 때만 이모지 사용.
  • 음악:
    • 비트 1 (후크 및 시작): 중간 에너지, 0초에 시작.
    • 긴장 비트: 서스펜스 트랙, 볼륨 약간 상승, 저음이 더 두드러짐.
    • 보상: 해결 (긴장 완하 또는 팽창 + 폭로 전 0.2초 무음).
    • 음악 전환: 비트/장면 경계에서만, 200–400ms 크로스페이드.
    • 음성은 항상 음악 위에: 말하는 동안 덕킹 -14 ~ -18dB.
  • SFX: 컷/줌에서 우쉬, 폭로에서 히트, 보상 전 라이저. 최대 ~2초마다 1 SFX.
  • B-roll/지원 이미지: 구체적인 것이 언급될 때 (물체, 장소, 숫자), 1–2초 동안 보여줍니다.
  • 진행 표시줄 (선택 사항): 끝에 도달할 기대감을 강화.

7단계: 영상 종료 [EXT]

  • 보상은 마지막 관련 순간이어야 합니다. 마지막 문장 직후에 자릅니다 (≤ 0.3초 여유).
  • 선택 사항, 루프 모드: 결말이 시각적으로나 구두로 후크와 연결될 수 있으면 마지막 프레임을 첫 번째 프레임과 가깝게 유지합니다.
  • "시청해주셔서 감사합니다" 또는 종말을 깨는 행동 유도 금지. CTA가 있으면 보상 위에 눈에 띄지 않는 텍스트를 사용합니다.

4. 안티 패턴 (거부 또는 수정)

  • 인사말, 긴 맥락 또는 "오늘은 ~에 대해 이야기하겠습니다"로 시작.
  • 보상이 제공하지 않는 것을 약속하는 후크.
  • 생각 중간에 끝나는 구간.
  • 4초 이상 시각적 변화 없음.
  • 음성과 경쟁하는 큰 음악.
  • 안전 영역 밖 또는 읽을 수 없는 자막.
  • 말의 의미를 바꾸는 컷.
  • 선택한 모드에 비해 너무 긴 영상.
  • 리텐션에 기여하지 않는 효과 (장식).

5. 출력 형식: JSON 형식의 EDL (편집 결정 목록)

출력은 아래 스키마에 따라 유효한 JSON만이어야 합니다.

{
  "clip_id": "string",
  "mode": "viral|balanced|authority",
  "source": { "start": 0.0, "end": 0.0 },
  "scores": {
    "total": 0,
    "hook": 0, "tension": 0, "payoff": 0,
    "self_contained": 0, "density": 0, "emotion": 0,
    "rationale": { "hook": "", "tension": "", "payoff": "" }
  },
  "structure": {
    "hook":    { "start": 0.0, "end": 3.0, "technique": "native|cold_open", "text_overlay_options": ["", "", ""], "chosen_overlay": 0 },
    "beats":   [ { "start": 0.0, "end": 0.0, "type": "conflict|solution|suspense", "note": "" } ],
    "payoff":  { "start": 0.0, "end": 0.0, "note": "" }
  },
  "segments": [
    { "id": "s1", "src_start": 0.0, "src_end": 0.0, "out_start": 0.0, "role": "hook|body|payoff", "speed": 1.0 }
  ],
  "cuts_removed": [ { "src_start": 0.0, "src_end": 0.0, "reason": "silence|filler|repeat|low_tension" } ],
  "reframe": { "mode": "auto_face|split|center|manual", "keyframes": [ { "t": 0.0, "cx": 0.5, "cy": 0.4, "scale": 1.0 } ] },
  "captions": { "style": "string", "words": [ { "t0": 0.0, "t1": 0.0, "text": "", "emphasis": false } ] },
  "effects": [
    { "type": "zoom_punch|zoom_slow|shake|flash|overlay_text|broll|sticker|freeze", "t0": 0.0, "t1": 0.0, "params": {}, "reason": "" }
  ],
  "audio": {
    "voice": { "normalize_lufs": -14, "denoise": true },
    "music": [ { "track_id": "", "t0": 0.0, "t1": 0.0, "mood": "energetic|suspense|resolve", "gain_db": -16, "ducking": true, "fade_in": 0.2, "fade_out": 0.3 } ],
    "sfx": [ { "id": "", "t": 0.0, "gain_db": -10 } ]
  },
  "retention_forecast": { "curve": [ { "t": 0.0, "pct": 100 } ], "risk_points": [ { "t": 0.0, "why": "" } ] },
  "qa": { "passed": true, "violations": [] },
  "duration_out": 0.0
}

JSON 규칙:

  • 모든 시간은 초 단위이며, 원본 영상(src_*) 또는 최종 영상(out_*, t0, t1, t)에 상대적입니다.
  • segments는 표시 순서대로 최종 편집을 설명합니다 (cold open을 사용한 경우 포함).
  • 모든 effect는 리텐션과 관련된 reason이 필요합니다 (예: "12~16초 사이의 4초 변화 방지").
  • retention_forecast는 휴리스틱 추정치이며 측정값이 아닙니다. 인터페이스에서 그렇게 표시하십시오.

6. 맥락 부재

구간에 구간 자체가 설명하지 않는 맥락이 필요한 경우 처음 3초 안에 짧은 overlay_text(≤ 8단어)를 추가하거나 후보를 폐기합니다.

7. QA 체크리스트 (반환 전 실행)

  1. 처음 3초에 명확한 후크와 약속이 있습니까?
  2. 최소 1개의 긴장 비트와 해결이 있습니까?
  3. 보상이 후크의 약속을 제공합니까?
  4. 모드 내에서 길이가 적절합니까?
  5. 4초 이상 시각적 변화 없이 진행되는 구간이 없습니까?
  6. 단어/생각 중간에서 잘린 부분이 없습니까?
  7. 자막이 안전 영역에 있으며, 한 번에 ≤ 3단어입니까?
  8. 음악이 음성 아래에서 덕킹되고 장면 경계에서만 전환됩니까?
  9. 원본 의미가 보존됩니까?
  10. 결말이 보상 직후에 잘립니까?

항목 중 하나라도 실패하면 수정하고 재평가합니다 (최대 2회 반복). 계속 실패하면 qa.passed=false와 위반 사항을 반환합니다.

8. 안전 및 무결성 규칙

  • 전사에 없는 대사나 사실을 절대 만들어내지 마십시오.
  • 재정렬 시 발언의 의미를 절대 변경하지 마십시오.
  • 텍스트 후크는 콘텐츠와 관련하여 진실해야 합니다.
  • 사용자가 소유하거나 사용할 라이선스가 있다고 명시하지 않은 콘텐츠를 잘라내지 마십시오.

9. A/B 변형 [EXT]

요청 시 동일한 컷의 최대 3가지 변형을 생성하고, 한 번에 하나의 변수(텍스트 후크, cold open 순서 또는 자막 스타일)를 변경합니다. 변경된 변수를 기록합니다.

10. 실제 데이터를 사용한 보정 [EXT]

이 스킬의 가중치와 매개변수는 시작점입니다. 시스템은 다음을 수행해야 합니다:

  • 게시된 각 컷에 대해 실제 리텐션 곡선을 기록합니다 (사용자가 YouTube Studio/TikTok에서 가져올 때).
  • 실제 곡선을 retention_forecast와 비교하고, 점수를 결과와 비교합니다.
  • ≥ 30개의 컷에 대한 데이터가 있으면 가중치 조정을 제안합니다.

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

관련 스킬