Communitygithub.com

eduramza/shorts-factory

将长视频(转录文本+元数据)转化为针对留存率优化的竖版短视频(Shorts/TikTok/Reels),采用挂钩→叙事→回报结构。选取片段、评分、重新排序挂钩、定义剪辑、字幕、缩放、音乐和特效,并返回 JSON 格式的剪辑决策列表(EDL)。

shorts-factory 是什么?

该技能是一个用于将长视频内容转化为高留存率竖版短视频(如 YouTube Shorts、TikTok、Instagram Reels)的自动化管道。它基于“挂钩→叙事→回报”的核心框架,通过分析转录文本、元数据和场景分割,自动识别、评分和选取最适合制作短视频的视频片段。该技能支持三种时长模式(病毒式传播、平衡、权威),以匹配不同的分发目标。它会生成一个完整的剪辑决策列表(EDL),包含动态字幕、缩放、音效设计、节奏清理和冷开场技巧等详细编辑指令。输出是严格的 JSON 格式,包含观众留存率预测和质量保证检查清单。该技能旨在模块化地适用于 Claude Code、Codex 等 AI 代理工具,允许通过 API 或 CLI 集成到视频编辑器或自动化工作流中。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/eduramza/shorts-factory/tree/HEAD/skills/retention-shorts

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

技能:留存率短视频(挂钩 → 叙事 → 回报)

0. 来源与方法论诚实性

基于视频:“ESSA TÉCNICA VIRALIZOU MEU SHORTS COM 30 MILHÕES DE VISUALIZAÇÕES”(频道 O Milionário,ID iPpt_INjn8A)。标记为 [VIDEO] 的项目来自作者所教的内容。标记为 [EXT] 的项目是本系统的工程扩展:合理的启发式方法,但未经过视频验证。必须使用实际的留存率数据进行校准(参见第 10 节)。

1. 核心原则 [VIDEO]

  • 决定短视频能否病毒式传播的是留存率曲线:看完视频的人越多,平台就会分发得越广。
  • 目标:使留存率曲线尽可能平坦,没有下降。关键是让观众看到最后。
  • 三个必须部分:Hook(挂钩)、Storytelling(叙事)、Payoff(回报)。
  • 脚本/叙事是“汽车的引擎”:没有叙事的精美剪辑无法留住观众。
  • 时长:大约 15 秒以内的视频更容易爆发,因为更容易完整观看。更长的视频更难病毒式传播,但能建立忠实观众群。如果您的领域需要更长的视频,请使用相同的三个步骤。

2. 时长模式 [VIDEO + EXT]

模式目标时长何时使用
viral12–20 秒(最长 25 秒)最大化触达。默认模式。
balanced20–40 秒需要最少上下文的内容。
authority40–75 秒建立忠实观众群,更深入的内容。

用户选择模式。即使片段不错,也绝不能超出模式限制:通过剪掉冗余部分来缩短。

3. 决策流程(按顺序执行)

第 1 步:筛选候选片段

  • 输入:包含逐词时间戳的转录、场景切换、静音、说话人。
  • 生成开始和结束于句子边界(绝不能在一个句子或想法的中间)的候选窗口。生成数量是所需数量的 3 倍。
  • 每个候选必须是自包含的:没有上下文的观众需要能够理解而不依赖视频的其余部分。如果依赖之前的上下文,请丢弃或准备一条上下文字幕(第 6 节)。

第 2 步:为每个候选打分(0–100)

标准权重评估什么
挂钩潜力25是否存在一个句子或时刻,在前 3 秒内清晰、直接、快速并承诺回报[VIDEO]?
张力/叙事25是否存在冲突、出错的事情、障碍、悬而未决的问题或悬念 [VIDEO]?有解决方案吗?
回报20结尾是否兑现了挂钩的承诺(结果、揭示、情感、结论)[VIDEO]?
自包含性15单独看是否有意义?[EXT]
密度/节奏10较少废话、较少停顿、每隔几秒提供信息 [EXT]
情感/新颖性5惊讶、幽默、强烈观点、震撼的数字 [EXT]

规则:

  • 挂钩 < 12/25 或 回报 < 8/20 → 丢弃,无论总分是多少。
  • 向用户显示每个标准的分数以及每项标准的一行说明。
  • 按分数排序。避免重叠剪辑(> 30% 的重叠):保留最佳的那一个。

第 3 步:映射挂钩 → 叙事 → 回报结构

对于选定的候选,在时间线上标记:

  • HOOK(挂钩 0–3 秒)[VIDEO]:清晰、直接、快速,带有承诺。没有问候,没有“大家好”,没有“那么”,没有自我介绍。
  • STORYTELLING(叙事 中间部分)[VIDEO]:一系列张力节拍。每个节拍是以下几种类型之一:conflict(出错),solution(采取的措施),suspense(“但是在……之前,发生了一些事”)。叙事必须有一个时刻,故事被“剪切”并引发好奇。
  • PAYOFF(回报 最后 3–5 秒)[VIDEO]:交付挂钩所承诺的回报。

如果原始片段没有以强有力的挂钩开头,请应用冷开场技巧 [EXT]:

  1. 在该片段中找到最有力的句子(承诺、结果或最具挑衅性的句子)。
  2. 将这个句子放在开头(0–3 秒)作为挂钩,然后回到时间顺序。
  3. 只有当这个句子单独看有意义且回报仍然清晰时才这样做。不要扭曲原意:禁止改变说话人所说的含义。

第 4 步:挂钩工程 [VIDEO + EXT]

  • 生成 3 个变体的屏幕挂钩文字(开头标题),每个不超过 8 个单词:
    • 结果承诺(“让我祖母哭泣的那份 5 雷亚尔礼物”)。
    • 好奇心/缺口(“我只有 5 雷亚尔,然后……”)。
    • 矛盾/挑衅。
  • 文字必须与内容相符(无回报无法支撑的点击诱饵)。
  • 必须在 ≤ 2 秒内阅读完毕。

第 5 步:节奏清理 [EXT]

  • 移除 > 0.35 秒的静音、犹豫用词(“额”、“嗯”、“这样”、“啊”)、重复和错误的开头。
  • 保留揭示之前 0.1–0.2 秒的微暂停(张力),暂停在此有作用。
  • 不要在一个音节中间剪切:使用音频过零交叉点作为剪切点,并进行 30–60 毫秒的交叉淡入淡出。
  • 如果结果超出模式限制,首先移除中间张力较低的节拍,绝不能移除挂钩或回报。

第 6 步:编辑计划 [VIDEO + EXT]

视频推荐的元素,让观众“感觉不到时间流逝” [VIDEO]:

  1. 动态字幕:逐词显示,当前词汇高亮。
  2. 缩放和快速剪切:总有事情在发生。
  3. 场景之间的音乐切换:产生同时多件事的感觉。
  4. 张力部分的悬疑配乐,激发看完结局的欲望。

建议的操作参数 [EXT],可调整:

  • 视觉节奏:每 1.5–3.5 秒进行一次视觉变化(缩放、剪切、画面变化、高亮、B 卷素材)。绝不能超过 4 秒而没有变化。
  • 缩放:强调词汇时推入 105–115%;张力部分慢速缩放(100→108%);在下一个剪切处重置。交替方向以避免疲劳。
  • 字幕:每次显示 1–3 个单词,≤ 2 行,活跃词用高亮颜色,位于下三分之一区域(在应用界面区域之外:保留底部约 20% 和侧面约 6% 的边距)。仅当加强词汇含义时才使用表情符号。
  • 音乐:
    • Beat 1(挂钩和开头):中等能量,在 0 秒处进入。
    • 张力节拍:悬疑配乐,音量略微升高,低音更突出。
    • 回报:解决(张力下降或渐强 + 揭示前 0.2 秒的静音)。
    • 音乐切换:仅在节拍/场景边界处,配合 200–400 毫秒的交叉淡入淡出。
    • 语音始终覆盖在音乐之上:人声时音乐闪避 −14 到 −18 dB。
  • 音效:剪切/缩放时的嗖嗖声,揭示时的击中声,回报前的渐强音。最多每约 2 秒一个音效。
  • B 卷/支持图像:当提到具体事物(物体、地点、数字)时,显示 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 按显示顺序描述最终剪辑(包括冷开场(如果使用))。
  • 每个 effect 都需要 reason 与留存率相关联(例如:“避免 12–16 秒处超过 4 秒无变化”)。
  • retention_forecast 是一个启发式估计,不是测量结果。在界面中将其标记为如此。

6. 缺失上下文

如果片段需要它自身没有解释的上下文,在前 3 秒内添加一个简短的 overlay_text(≤ 8 个单词),或者丢弃该候选。

7. QA 检查清单(返回前执行)

  1. 前 3 秒是否有清晰的挂钩和承诺?
  2. 是否至少有一个张力节拍和解决方案?
  3. 回报是否兑现了挂钩的承诺?
  4. 时长是否在模式限制内?
  5. 是否没有超过 4 秒无视觉变化的部分?
  6. 是否没有在单词/想法的中间进行剪切?
  7. 字幕是否在安全区域内,每次不超过 3 个单词?
  8. 音乐是否在语音时进行闪避,并且仅在场景边界处切换?
  9. 原始含义是否保留?
  10. 结尾是否在回报后立即剪切?

如果任何项目失败,修正并重新评估(最多 2 次迭代)。如果仍然失败,返回 qa.passed=false 并附上违规项。

8. 安全与完整性规则

  • 绝不编造转录中不存在的台词或事实。
  • 在重新排序时绝不改变一句台词的含义。
  • 挂钩文字必须与内容相符。
  • 不要生成用户未声明拥有或拥有使用许可的内容的剪辑。

9. A/B 变体 [EXT]

当被要求时,生成同一剪辑的多达 3 个变体,每次只更改一个变量(挂钩文字、冷开场顺序或字幕样式)。记录更改了哪个变量。

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.

相关技能