1仕組みと動作原理
ポジショニング先行:ショート動画は「縮小版のローンチ動画」ではなく、視聴維持マシンである。作業単位はカットの編集点ではなく維持率曲線である。
You are editing the *curve*, and the hook gates everything after it — fix it first.
ストーリー構成の規律:1本の動画に込める payoff(オチ・見返り)は1つのみ。最初の約3秒でオープンループを作り、最後にようやくループを閉じる。
- **One idea per video.** A short carries exactly one payoff.
維持率アークに基づく秒単位の配分(hook 0–1s / setup 1–4s / body 4–17s / payoff 17–20s)。拡張するのは body のみであり、hook は絶対に引き延ばさない。
Scale the *body*, never the hook.
hook の2つの絶対ルール:コピーは第1フレームで画面に表示すること、最も目を引くビジュアルを第1フレームに持ってくること(黒からのフェードインは禁止)。
the hook line is **on-screen as text by frame 1** (85% watch muted), and the most striking *visual* is also the first frame — never a slow ramp-in.
テンポはパターンインタラプトの密度で制御:約2〜4秒ごとに視覚的な変化を入れ、その間隔は意図的に不均等にする。
a *visual change every ~2–4 seconds*
ループは維持率向上のレバー:最初と最後のフレームの一致+文の環状連結により、再視聴を新規視聴時間としてカウントさせる。
match the **last frame to the first** (same composition, position, color) so the cut is invisible
縦型セーフエリアをピクセル単位の共通領域として定義:中央 900×1400、上部約120px、下部約320px、右側約120pxはすべて空白とする。
| Universal safe (all platforms) | center **900×1400** | anything critical outside it |
能力境界の明記:字幕アニメーションは本スキルでは実装せず、caption-animation に委譲する。
**Do not re-implement caption animation here** — use the `caption-animation` skill for word-by-word timing, karaoke highlight, and styling
3つの項目に特化した検証ループ:hook が一目で理解できるか、テンポに平坦な中盤がないか、ループの継ぎ目が不可視であるか。
LOOP seam: compare f-hook(frame 0) vs f-end(last frame) — same composition/position/color for an invisible loop cut
2コア機能
3外部依存関係
| Kind | Dependency / Endpoint |
|---|---|
| cli | npx remotion still / render / compositions |
| cli | scripts/contact-sheet.sh + scripts/probe-mp4.sh(仓库根共享验证工具箱,SKILL.md 明列) |
| package | ffmpeg / ffprobe(系统依赖) |
| cli | 跨 skill 委派:caption-animation(同仓另一个 skill,负责词级字幕动画) |
4推奨統制措置と判定根拠
- scripts/: ローカルスクリプトまたはコマンドの実行: (SKILL.md に明記された検証ループ)`npx remotion still Short out/f-{hook,mid,end}.png --fram
- 网络端点: 外部ネットワークアクセスの宣言: `npx remotion …`:初回実行時に npm 公式ルート経由でパッケージと CLI を取得(registry.npmjs.org、ドメインは npm に依存しソース内にハードコードなし)
- 本地工作目录: ファイル読み書きおよび成果物の出力: エージェントが本スキルに従って構築する Remotion プロジェクトおよび out/short.mp4、out/demo.gif
5二重目の独立検証
- [discrepancy] 「hook 必须在第 1 帧上屏」与验证示例取 frame=10 是否矛盾(第一遍未察觉) — SKILL.md 的硬规则写 "the hook line is **on-screen as text by frame 1**",收尾清单第 2 条也写 "on-screen text + strongest visual up front";但验证示例给的是 `npx remotion still Short out/f-hook.png --frame=10 --props=…`,并注释「~first 3s reads instantly」。10 帧 @30fps ≈ 0.33s,若 hook 文案在 frame 0 才起动画、到 frame 10 才稳定,则两者可并存(示例取的是「稳定可读帧」而非「首帧」);但文档未说明这一区别,读者可能据此把 hook 动画起始推到第 10 帧,直接违反 frame 1 规则。属对 pin commit 有效的表述出入,非虚假声明。
- [unlocatable] 留存统计数字是否有出处(87% / 70% / 平台阈值 / 58% vs 41%) — SKILL.md 写 "~87% decide to stay or swipe inside 3 seconds"、"the threshold for distribution sits near **70%+ average view-through** (Shorts ~73%, TikTok ~78%, Reels ~65%)"、"videos with an interrupt roughly every 4s hold ~58% vs ~41% for a static talking head"。仓库内无引用来源、无数据集、无计算脚本;本次为只读侦查且不运行分析,故不验证这些数值,仅记为文档声明(reference 另有 "Target ≥70% average view-through." 同源)。结论中不把它们当作已核事实。
- [ok] 安全区数值在 SKILL.md 与 reference 实现里是否一致 — SKILL.md 表:center 900×1400、top ~120px、bottom ~320px、right ~120px;reference §2 SafeZone 组件逐值对应(`left: 90, top: 260, width: 900, height: 1400` 的框,加高 120 的顶部红带、高 320 的底部红带、宽 120 的右栏),§5 表首行也是「Universal (use this) | ~120px | ~320px | ~120px | center 900×1400 holds on all」。两侧完全自洽。
- [ok] 「不留平坦中段」是否有可执行机制,而非只靠审美 — reference §1 给出帧驱动的 `useShot(cuts)` 调度器与刻意参差的 cuts 数组(`cuts = [0, 1.2, 3.0, 5.4, 8.0, 11.2, 14.0]; // seconds — uneven on purpose`),并配 PunchIn(在切点 snap 到 1.1–1.12 倍);§4 排障表把「中段持平后骤降」映射到「add interrupts; tighten cut spacing to 2–4s」。机制存在且与主张对应。
- [ok] 跨 skill 委派是否指向真实存在的 skill(防悬空指引) — SKILL.md 指名 `caption-animation`;该 skill 确实位于同一仓库(skills/caption-animation/SKILL.md,本批次同批侦查)。委派目标存在,且其描述覆盖 word-by-word timing 与 active-word highlight,与本 skill 的说法一致。
- [ok] 跨包共享脚本与 Packaged helper 引用是否真实(防悬空引用) — SKILL.md 只点名 scripts/contact-sheet.sh 与 scripts/probe-mp4.sh,两者在仓库根存在且可执行,三仓库逐字节相同(md5 b7dcc28034c9bf8fda5d48683e54d8b5 / 167b7977c50f492014e1a6fef8c9ed12)。seek-shot.sh 未被本 skill 点名。
6結論
976ced5900c4ae4f…