Communitygithub.com

Retention Shorts(Hook→Storytelling→Payoff)

長い動画(文字起こしとメタデータ)を、縦型ショート(Shorts/TikTok/Reels)向けに最適化されたクリップに変換します。Hook→Storytelling→Payoffの構造で保持率を最大化し、編集判断リスト(EDL)をJSONで出力します。

Retention Shorts(Hook→Storytelling→Payoff) とは?

このスキルは、長時間の動画から縦型ショート動画(Shorts/TikTok/Reels)を作成するためのパイプラインを提供します。最大の特徴は、視聴者の「保持率(リテンション)」を最適化する設計で、Hook(フック)→Storytelling(ストーリーテリング)→Payoff(報酬)という3部構成を厳格に守ります。入力としてタイムスタンプ付き文字起こし、シーン区切り、サイレンス情報などを取り、自動的に候補クリップをスコアリング・選定します。選択後は、Cold Open技術やリズム調整、動的キャプション、ズーム・BGM・効果音を含む詳細な編集計画を生成し、最終的にEDL(Edit Decision List)をJSON形式で出力します。対応プラットフォームはClaude Code、Cursor、Codexなどの開発者ツールで、AIエージェントが直接実行できる形式で結果を返します。このスキルは、クリエイターがショート動画のバズ率を高め、制作時間を大幅に短縮するのに役立ちます。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/eduramza/shorts-factory/tree/HEAD/skills/retention-shorts

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

スキル: Retention Shorts(Hook→Storytelling→Payoff)

0. 出典と方法論の誠実さ

ベース動画:「ESSA TÉCNICA VIRALIZOU MEU SHORTS COM 30 MILHÕES DE VISUALIZAÇÕES」(チャンネルO Milionário、ID iPpt_INjn8A)。[VÍDEO] とマークされた項目は著者が教えている内容です。[EXT] とマークされた項目はエンジニアリングシステムの拡張であり、妥当なヒューリスティックですが、動画で実証されていません。実際の保持率データでキャリブレーションする必要があります(セクション10を参照)。

1. 中心原則 [VÍDEO]

  • ショート動画がバイラルするかどうかを決めるのは**保持率(リテンションライン)**です。最後まで視聴する人が多いほど、プラットフォームは配信を増やします。
  • 目標:保持率をできるだけ平坦にし、低下を防ぐこと。重要なのは視聴者が最後まで到達することです。
  • 必須の3つのパート:Hook(フック)、Storytelling(ストーリーテリング)、Payoff(報酬)。
  • 脚本/ナラティブは「車のエンジン」です。ナラティブなしで美しい編集だけでは視聴者は離れます。
  • 長さ:約15秒までの動画は爆発的に広がりやすいです。最後まで見るのが簡単だからです。長い動画はバイラルしにくいですが、忠実な視聴者を獲得します。ニッチが長い動画を必要とする場合は、同じ3つのステップを使用してください。

2. 長さモード [VÍDEO + EXT]

モードターゲット長さ使用タイミング
viral12~20秒(最大25秒)リーチを最大化。デフォルト。
balanced20~40秒最小限のコンテキストで済むコンテンツ。
authority40~75秒忠実な視聴者を構築、より深いコンテンツ。

ユーザーがモードを選択します。たとえ良いクリップでも、モードの制限を超えてはいけません。デッドパーツをカットして短くしてください。

3. 判断パイプライン(順番に従ってください)

ステップ1: 候補のセグメント化

  • 入力:単語レベルのタイムスタンプ付き文字起こし、シーン区切り、サイレンス、話者情報。
  • 文の境界で開始・終了する候補ウィンドウを生成します(文やアイデアの途中で区切らないでください)。必要な数よりも3倍多くの候補を生成します。
  • 各候補は自己完結型である必要があります:コンテキストのない視聴者が動画の残りを知らなくても理解できる必要があります。前のコンテキストに依存する場合は、破棄するか、コンテキスト用のキャプションを準備します(セクション6)。

ステップ2: 各候補のスコアリング(0〜100)

基準重み評価内容
フックの可能性25最初の3秒に、明確で、直接的で、迅速で、報酬を約束するフレーズや瞬間があるか [VÍDEO]?
緊張/ナラティブ25葛藤、何かがうまくいかないこと、障害、未解決の疑問、サスペンスがあるか [VÍDEO]?解決策はあるか?
ペイオフ20結末がフックが約束したものを提供するか(結果、啓示、感情、結論)[VÍDEO]?
自己完結性15単独で意味をなすか? [EXT]
密度/リズム10無駄が少なく、ポーズが少なく、数秒ごとに情報があるか [EXT]
感情/新規性5驚き、ユーモア、強い意見、衝撃的な数字 [EXT]

ルール:

  • フック < 12/25 または ペイオフ < 8/20 → 総合スコアにかかわらず破棄。
  • ユーザーに基準ごとのスコアと、各基準に対する1行の理由を表示します。
  • スコア順に並べます。重複するカット(> 30%のオーバーラップ)は避け、より良いものを採用します。

ステップ3: Hook → Storytelling → Payoff 構造のマッピング

選択した候補について、タイムライン上で以下をマークします:

  • HOOK(フック、0~3秒) [VÍDEO]:明確、直接的、迅速、約束がある。挨拶、「こんにちは皆さん」「それで」「自己紹介」は禁止。
  • STORYTELLING(ストーリーテリング、中間部分) [VÍDEO]:緊張のビートの連続。各ビートは conflito(葛藤、何かがうまくいかない)、solução(解決策、行うこと)、suspense(サスペンス、「でもその前に…何かが起こった」)のいずれかのタイプ。ナラティブは、ストーリーが「中断」され好奇心を生む瞬間を持たなければなりません。
  • PAYOFF(ペイオフ、最後の3~5秒) [VÍDEO]:フックが約束した報酬を提供します。

元のクリップが強いフックで始まっていない場合は、Cold Open テクニックを適用します [EXT]:

  1. クリップ内で最も強いフレーズ(約束、結果、または最も挑発的なフレーズ)を見つけます。
  2. そのフレーズを**先頭(0~3秒)**にフックとして配置し、その後時系列に戻ります。
  3. フレーズが単独で意味をなし、ペイオフが明確なままである場合にのみ行います。意味を歪めないでください:話した内容の意味を変更することは禁止。

ステップ4: フックのエンジニアリング [VÍDEO + EXT]

  • 画面に表示するフックテキスト(オープニングタイトル)の3つのバリエーションを生成します。各バリエーションは8語以下:
    • 結果の約束(「たった5レアルのプレゼントで祖母が泣いた」)。
    • 好奇心/ギャップ(「私はたった5レアルしか持っていなくて…」)。
    • 矛盾/挑発。
  • テキストはコンテンツに関して真実でなければなりません(ペイオフが支えられないクリックベイトは禁止)。
  • 2秒以内に読める必要があります。

ステップ5: リズムのクレンジング [EXT]

  • 0.35秒以上の無音、言い淀み(「えー」「あのー」「つまり」「うーん」)、繰り返し、偽のスタートを削除します。
  • 啓示の前(緊張)には0.1~0.2秒のマイクロポーズを維持します。ここではポーズに機能があります。
  • 音節の途中でカットしないでください:ゼロクロッシングポイントでカットし、30~60 msのクロスフェードを使用します。
  • 結果がモードの制限を超える場合は、最初に中間部分の最も緊張の低いビートを削除します。フックとペイオフは絶対に削除しないでください。

ステップ6: 編集計画 [VÍDEO + EXT]

動画が視聴者に「時間の経過を感じさせない」ために推奨する要素 [VÍDEO]:

  1. 動的キャプション:単語ごと、話されている単語を強調表示。
  2. ズームとクイックカット:常に何かが起こっている。
  3. シーン間の音楽の切り替え:複数のことが同時に起こっている感覚を与える。
  4. 緊張部分でのサスペンストラック:結末を見たいという欲求を生み出す。

提案される運用パラメータ [EXT]、調整可能:

  • 視覚的ケイデンス:1.5~3.5秒ごとに視覚的な変化(ズーム、カット、フレーミングの変更、ハイライト、Bロール)。4秒以上変化がない状態は禁止。
  • ズーム:強調する単語ではパンチイン105~115%;緊張部分ではスローズーム(100→108%);次のカットでリセット。疲れさせないために方向を交互に変えてください。
  • キャプション:一度に1~3語、2行以内、アクティブな単語は強調色、位置は下部3分の1(アプリインターフェースゾーン外:下端から約20%、側面から約6%のマージンを維持)。絵文字は単語を補強する場合のみ。
  • 音楽:
    • ビート1(フックと開始):中程度のエネルギー、0秒で開始。
    • 緊張ビート:サスペンストラック、音量がわずかに上がり、低音が目立つ。
    • ペイオフ:解決(緊張の低下またはスウェル+啓示の前に0.2秒の無音)。
    • 音楽の切り替え:ビート/シーンの境界のみで、200~400 msのクロスフェード。
    • 音声は常に音楽より前面に:音声下で−14〜−18 dBのダッキング。
  • SFX:カット/ズーム時にウィッシュ、啓示時にヒット、ペイオフ前にライザー。最大で約2秒に1つのSFX。
  • Bロール/補助画像:具体的なもの(物体、場所、数字)に言及がある場合、1~2秒表示。
  • プログレスバー(オプション、控えめに):最後まで見るという期待を強化。

ステップ7: 動画の終わり [EXT]

  • ペイオフは最後の重要な瞬間でなければなりません。最終フレーズの直後(0.3秒以内の余裕)でカットします。
  • オプション、ループモード:結末が視覚的または口头的にフックに繋がる場合、最後のフレームを最初のフレームに近づけます。
  • 「ご視聴ありがとうございました」や結末を壊す行動喚起は禁止。CTAがある場合は、ペイオフ上に控えめなテキストを使用します。

4. アンチパターン(拒否または修正)

  • 挨拶、長いコンテキスト、「今日は〜についてお話します」で始める。
  • ペイオフが提供できないことをフックが約束する。
  • アイデアの途中で終わるクリップ。
  • 4秒以上視覚的な変化がない。
  • 大きな音楽が音声と競合する。
  • 安全領域外または読みにくいキャプション。
  • 話の意味を変えるカット。
  • 選択したモードに対して長すぎる動画。
  • 保持率に貢献しないエフェクト(装飾)。

5. 出力形式: Edit Decision List (EDL) in JSON

出力は、以下のスキーマに従った有効な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. セキュリティと整合性のルール

  • 文字起こしにない台詞や事実を決して invent しないでください。
  • 並べ替えによって発言の意味を決して変更しないでください。
  • テキストのフックはコンテンツに関して真実でなければなりません。
  • ユーザーが所有権または使用許諾を宣言していないコンテンツのカットを生成しないでください。

9. A/Bバリエーション [EXT]

要求された場合、同じカットの最大3つのバリエーションを生成します。一度に1つの変数(テキストのフック、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.

関連スキル