ショートフォーム動画 は何をしますか?
スワイプに耐える9:16動画を設計する。ショートフォーム動画は、小さなローンチフィルムではない——それは retentionマシンである:最初の1秒を獲得するフック、数秒ごとに注意をリセットするパターンインタラプト、そして多くの場合、視聴時間を100%以上に引き延ばすループ。その技術はタイミングにあり、洗練さではない。
使用するタイミング
- リール / TikTok / YouTube Shorts(7~60秒、縦型9:16)。
- retention編集:離脱ポイントの修正、パターンインタラプトの追加、ペーシングの調整。
- フック、シームレスループ、反復可能なショートフォームテンプレート(1つのデザイン、多くのトピック)。
ストーリー構造(retention契約)
ショートフォームのストーリーテリングは、視聴者の親指との契約である:毎秒、次の秒を再び獲得しなければならない。物語はイントロから前方に向かってではなく、retention曲線から後方に向かって形作られる。タイムラインに触れる前に、これらを確定させる。
- 1動画につき1アイデア。 ショートが伝えるのは、正確に1つのペイオフだけである。2つ目のアイデアは注意を分割し、曲線が途中でたるむ——代わりに2本目の動画にしよう。1文で単一の要点を言い表せないなら、まだショートはできていない。
- 最初の約3秒でループを開き、最後に閉じる。 フックは質問やギャップ(開いたループ)を提示し、ペイオフがそれに答える。ループが開いているから視聴者は留まる——だから早く答えてはならず、ペイオフを前置きの下に埋めてはならない。
- 無駄な時間なし。 すべてのビートは、アイデアを前進させるか、注意をリセットするかのどちらかである。どちらも行わないものはカットする。無音、ゆっくりとした立ち上がり、前置きのイントロ(「やあみなさん、この動画では…」)は、視聴者がスワイプする箇所である。
- なぜカットではなく曲線が作業単位なのか。 アルゴリズムは、毎秒のretention曲線を平坦に保つものを配信する。曲線を平坦にする「良い」編集は、曲線を維持する「見苦しい」編集に負ける。あなたは曲線を編集しており、フックがその後のすべてを左右する——まずフックを修正せよ。
物語の背骨(フック → セットアップ → ボディ → ペイオフ/ループの流れは、以下の表に予算化されている):
| ムーブ | ストーリー上の役割 | 失敗した場合の結果 |
|---|---|---|
| フック | ループを開き、ペイオフを約束する | 最初の3秒でスワイプされる |
| 緊張維持 | ボディ全体でギャップを開いたままにする | 中盤が平坦、途中で離脱 |
| ペイオフ | ループを閉じる——1つのアイデアを届ける | 「時間の無駄」、シェアされない |
| ループ / CTA | フレーム0に戻す、または1つの明確な依頼をする | 再視聴なし、アクションなし |
(以下のretention曲線表は各ムーブに秒数を割り当てる。このセクションはその背後にある物語の論理と順序である。フックの文法はフックのアーキタイプを列挙する。)
すべてを動かす唯一の指標
retention、制作価値ではない。 アルゴリズムは視聴者を保持するものを配信する。約87%の視聴者が3秒以内に視聴を続けるかスワイプするかを決定し、配信の閾値は70%以上の平均視聴率付近にある(Shorts約73%、TikTok約78%、Reels約65%)。以下のすべての決定は、この曲線とのトレードオフである。0:04で退屈させる完璧なショットは、視聴率を維持する見苦しいショットに負ける。
retention曲線
| ビート | 役割 | 予算(20秒のショートの場合) |
|---|---|---|
| フック(0~1秒) | オープンループを作る1フレーム+1行 | 0~1秒 |
| セットアップ | なぜ見るべきかを伝える——約束、ステーク、またはギャップ | 1~4秒 |
| ボディ | ビートで価値を届ける。1ビートにつき1アイデア | 4~17秒 |
| ペイオフ / ループ | ループを閉じる——またはフレーム0にフィードバックする | 17~20秒 |
ボディを拡大せよ。フックは決して拡大しない。60秒のショートはより長いボディとより多くのビートを持つ——同じ1秒のフックである。
フックの文法(最初の約1秒)
フックとは、脳が閉じる必要がある好奇心のギャップを開く、文章+ビジュアルである。1つのパターンを選び、それにコミットする:
| フックタイプ | 形状 | 最適な用途 |
|---|---|---|
| オープンループ | 「あなたのXがYを続ける理由…」(回答は遅延) | ほとんどのコンテンツ |
| 直接的な約束 | 「30秒で___する3つの方法」 | 教育的 / リスト形式 |
| パターンインタラプト | スナップズーム / ホイップパン / フレーム1でのビジュアルの不一致 | エンターテイメント |
| 否定 | 「___をやめて」 / 「あなたの___は間違っている」 | 強い意見 |
2つのルール:フックの文言はフレーム1までに画面上にテキストとして表示される(85%はミュートで視聴)、そして最も印象的なビジュアルも最初のフレームである——決して暗転からのゆっくりとした出現ではない。強い開始フレームを保持せよ。黒からフェードアップしない。
パターンインタラプトとカットリズム
パターンインタラプトとは、注意をリセットするあらゆる変化である:ハードカット、ズームイン、Bロール挿入、効果音、キャプションポップ、アングル変更。ショートフォームでは密度が高い——約2~4秒ごとに視覚的変化。約4秒ごとにインタラプトがある動画は約58%の保持率であるのに対し、静止したトーキングヘッドでは約41%である。致命的なのは中盤の平坦化である:TikTokは視聴率曲線が平坦になると配信を抑制するので、低エネルギーのテイクからボディをつなぎ合わせてはならない。
// すべてのインタラプトを壁時計ではなくフレームで駆動する——決定論的にレンダリングする。
import { useCurrentFrame } from "remotion";
const fps = 30;
const cuts = [0, 1.2, 3.0, 5.4, 8.0, 11.2, 14.0]; // 秒——意図的に不均等
const frame = useCurrentFrame();
const shot = cuts.findIndex((t, i) => frame < (cuts[i + 1] ?? Infinity) * fps);
間隔を変えよ——メトロノームは退屈と読まれ、不均等なカットは勢いと読まれる。ズームインは、新しい映像を必要としない最も安価なインタラプトである:
import { useCurrentFrame, interpolate, spring, useVideoConfig } from "remotion";
const PunchIn = ({ at, children }) => {
const frame = useCurrentFrame(); const { fps } = useVideoConfig();
const s = spring({ frame: frame - at * fps, fps, config: { damping: 12, stiffness: 200 } });
const scale = interpolate(s, [0, 1], [1, 1.12]); // ビートに合わせて112%にスナップ
return <div style={{ transform: `scale(${scale})`, transformOrigin: "50% 45%" }}>{children}</div>;
};
キャプション
ほとんどの視聴者はミュートで視聴するため、画面上のキャプションは必須ではない——キャプションはコンテンツを伝え、各フレーズがポップインするときにパターンインタラプトとしても機能する。1行あたり4~7語、高コントラスト、セーフエリア内に配置する。ここでキャプションアニメーションを再実装しないでください——単語ごとのタイミング、カラオケハイライト、スタイリングにはcaption-animationスキルを使用してください。このスキルは、キャプションをretentionタイムライン上および9:16セーフゾーン内に配置するだけです。
ループと再視聴
シームレスループは、再視聴のたびに新しい視聴時間としてカウントされる——きれいな8秒ループを3回視聴すると300%の視聴率となり、最も強力なシグナルとなる。2つのテクニック:最後のフレームを最初のフレームに一致させる(同じ構図、位置、色)ことでカットを見えなくする。そして文章ループを書く——ペイオフがフレーム0にフィードバックするようにフックをフレーズする(「…だからこそ私は決して——」→最初にループする)。再視聴に最適な長さは約7~15秒。
9:16セーフエリア
プラットフォームのUIがテキストや顔を覆うことがないよう、ユニバーサルセーフゾーン内で構図を決める。
| ゾーン | ピクセル(1080×1920) | 避けるべき領域 |
|---|---|---|
| ユニバーサルセーフ(全プラットフォーム) | 中央 900×1400 | 重要なものをその外側に配置しない |
| 上部 | 約120px空ける | プロフィール / サウンドUI |
| 下部 | 約320px空ける | キャプション、CTA、ハッシュタグ、オーディオバー |
| 右端 | 約120px空ける | いいね / コメント / シェアレール |
フックテキストと主要な被写体は中央の900×1400ボックス内に配置する。エディターでは空に見えても、下部の約320pxは予約しておく——プラットフォームが独自のキャプションやボタンを描画する場所である。
出力チェックリスト
- フックの文言がフレーム1までに画面上のテキストとして表示されている。最も強いビジュアルが最初のフレームである(フェードアップなし)。
- 最初の約4秒で1つのオープンループ / 約束が設定されている。
- 約2~4秒ごとに視覚的なパターンインタラプトがあり、間隔は不均等、中盤が平坦ではない。
- キャプションが存在する(
caption-animation経由)、4~7語、セーフエリア内。 - ループが閉じている——最初と最後のフレームが一致しているか、フレーム0にフィードバックする文章がある。
- 中央の900×1400ボックス内に構図が収まっている。下部320px / 上部120px / 右端120pxは空けてある。
- すべてのアニメーション値が
useCurrentFrame()から派生している——CSS/ライブラリのタイマーは使用しない。
納品と確認(レンダリング静止画 → MP4)
パッケージ化されたヘルパー(
scripts/):scripts/contact-sheet.sh sheet.png f-hook.png f-mid.png f-end.pngで静止画をタイル表示し、scripts/probe-mp4.sh out.mp4 [WxH] [fps]でエンコードを検証する。scripts/README.mdを参照。
ショートはRemotionコンポジション(<Composition> + zod schema + defaultProps)として出荷される。すべてのカット、ズームイン、インタラプトはuseCurrentFrame()で駆動され、Date.now() / Math.random() / タイマーは決して使用しない。成果物 = out/*.mp4 + プロジェクト(トピックごとに再レンダリング)。9:16縦型(1080×1920)がデフォルト。
確認ループ——静止画レンダリング → 検査 → エンコード。 3つのフレームが、retentionを左右する3つの要素(フック、ペーシング、ループの継ぎ目)をテストする。
# フック / ボディ中間 / 最終フレームの静止画——出荷するプロパティ(デフォルトではなく、実際のトピック)を使用する
npx remotion still Short out/f-hook.png --frame=10 --props='{"topic":"...","hook":"..."}' # 最初の約3秒が瞬時に読めること
npx remotion still Short out/f-mid.png --frame=N --props='{"topic":"...","hook":"..."}'
npx remotion still Short out/f-end.png --frame=L --props='{"topic":"...","hook":"..."}' # L = durationInFrames-1
# 各PNGを検査する:
# - HOOKフレーム(〜フレーム0付近 / 最初の3秒):フックの文言が画面上のテキストとして表示され、瞬時に読めること。最も強いビジュアルがすでに表示されていること(フェードアップなし)
# - LOOP継ぎ目:f-hook(フレーム0)とf-end(最終フレーム)を比較——シームレスなループカットのために同じ構図/位置/色であること
# - 9:16セーフエリア:フック + 主要被写体が中央の900x1400ボックス内にあること。上部約12%、下部約20-35%(キャプション/CTA/オーディオ)、右端アクションレールは空いていること
npx remotion render Short out/short.mp4 --props='{"topic":"...","hook":"..."}' # 静止画が確認できたら一度エンコードする
npx remotion render Short out/demo.gif --codec=gif # README用プルーフクリップ
トピック / バッチごと:すべてをレンダリングする前に、1つのトピックを静止画で確認する。npx remotion compositionsを使用してdurationInFrames/fpsを取得し、中間フレームと最終フレームを選択する。
終了する前に:
- 静止画がフック、中間、最終フレームでエラーなくクリーンにレンダリングされること。
- フックフレームが瞬時に読めること(画面上のテキスト + 最も強いビジュアルが前面にあり、フェードアップなし)。最初のフレームと最後のフレームがクリーンなループ継ぎ目のために一致していること。
- フック + 被写体 + キャプションが、チェックしたすべてのフレームで9:16中央900×1400セーフボックス内に収まっていること。
- フレーム駆動のみ——
Date.now()/Math.random()/ タイマーなし。カットは不均等、中盤が平坦ではないこと。 - 実際のトピックの出荷用プロパティ(
defaultPropsではない)が正しくレンダリングされること。MP4がエンコードされ、GIFはオプション。
参考ファイル
references/retention-pacing.md— 完全に実行可能なRemotion<Short>コンポジション:不均等なカット、PunchInパターンインタラプト、画面上のフック、9:16セーフエリアオーバーレイ、シームレスな最初/最終フレームループを備えたフレーム駆動のショットスケジューラ。さらに、フックパターンライブラリ、retention曲線デバッグメソッド、プラットフォーム別セーフゾーンマップ、テンプレート×トピックのバッチレンダリングパターンを含む。