Communitygithub.com

eduramza/shorts-factory

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

shorts-factory 是什么?

这是一项专门用于将长视频内容转化为高留存率竖版短视频的AI技能,支持Shorts、TikTok和Reels等平台。其核心方法基于“钩子→故事→回报”结构,通过系统化的工作流程(包括候选片段分割、评分、结构映射、节奏清理和编辑计划)来优化观众留存率。该技能接收带时间戳的转录文本和元数据,输出一个完整的JSON格式编辑决策列表(EDL),包含片段、剪切、字幕、音乐、特效和留存预测等详细参数。它支持三种模式(viral、balanced、authority)以适应不同时长和目标,并通过内置的QA检查清单确保输出质量。对于开发者和AI代理用户来说,该技能能够自动执行视频编辑中的关键决策,显著提高竖版视频的制作效率和病毒式传播潜力。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/eduramza/shorts-factory/tree/HEAD/skill-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)。标记为 [VÍDEO] 的项目来自作者所教内容。标记为 [EXT] 的项目是本系统的工程扩展:合理的启发式方法,但未经视频验证。应使用实际留存数据进行校准(参见第 10 节)。

1. 核心原则 [VÍDEO]

  • 决定一个短视频是否爆火的是留存曲线:观看完成率越高,平台推荐越多。
  • 目标:让留存曲线尽可能平直,没有下跌。关键是让观众看到最后。
  • 三个必要部分:钩子(Hook)、故事(Storytelling)、回报(Payoff)。
  • 剧本/叙事是“汽车的引擎”:没有叙事的精美剪辑无法留住观众。
  • 时长:视频大约在 ~15 秒以内更容易爆火,因为更容易完整观看。更长的视频更难爆火,但能建立忠实粉丝群。如果利基市场需要更长的视频,请使用相同的三个步骤。

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 → 丢弃,无论总分如何。
  • 向用户显示每个标准的分数以及每行一句的解释。
  • 按分数排序。避免重叠裁剪(超过 30% 重叠):保留最好的一个。

步骤 3:映射钩子 → 故事 → 回报结构

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

  • 钩子(0–3 秒) [VÍDEO]:清晰、直接、快速、有承诺。不含问候语、“大家好”、“那么”或自我介绍。
  • 故事(中间部分) [VÍDEO]:一系列张力节拍。每个节拍属于以下类型之一:冲突(出错的事情)、解决方案(所做的)、悬念(“但在…之前发生了某事”)。叙事必须有一个故事被“打断”并产生好奇心的时刻。
  • 回报(最后 3–5 秒) [VÍDEO]:交付钩子承诺的回报。

如果原始片段不是以强力钩子开头,则应用冷开场技术 [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 毫秒的交叉淡入淡出。
  • 如果结果超过模式限制,首先删除中间张力最低的节拍,切勿删除钩子或回报。

步骤 6:编辑计划 [VÍDEO + EXT]

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

  1. 动态字幕:逐词显示,突出显示的单词。
  2. 缩放 和 快切:始终有事情发生。
  3. 场景间音乐切换:给人一种同时发生多件事的感觉。
  4. 张力部分的悬念配乐,产生观看结局的欲望。

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

  • 视觉节奏:每 1.5–3.5 秒 发生一次视觉变化(缩放、剪切、取景变化、突出、B-roll)。从不超过 4 秒无变化。
  • 缩放:强调词上 punch-in 105-115%;张力部分慢速缩放(100→108%);在后续剪切中重置。交替方向以避免疲劳。
  • 字幕:每次 1–3 个词,≤ 2 行,激活词使用突出显示颜色,放置在屏幕下三分之一(避开应用界面区域:保持底部边距约 20%,侧面边距约 6%)。仅当表情符号能强化单词时才使用。
  • 音乐:
    • Beat 1(钩子和开头):中等能量,0 秒进入。
    • 张力节拍:悬念配乐,音量略微升高,低音更重。
    • 回报:解决(张力下降或逐渐增强 + 揭示前静音 0.2 秒)。
    • 音乐切换:仅在节拍/场景边界处,使用 200–400 毫秒的交叉淡入淡出。
    • 人声始终优先于音乐:语音时闪避 −14 到 −18 dB。
  • 音效:剪切/缩放时使用 whoosh,揭示时使用 hit,回报前使用 risers。每约 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 描述按显示顺序的最终剪辑(包括冷开场,如果使用)。
  • 每个 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.

相关技能