Communitygithub.com

remotion-shorts-skill

使用 Remotion 制作完成后的竖屏短视频,并发布到 TikTok、Instagram Reels 和 YouTube Shorts。将主题、文章、URL、数据集、更新日志或列表转换为 1080x1920 的动态文字短视频(大号动画文字、统计数字计数、Top-N 列表、启动和更新日志视频、引文),根据阅读速度计时,保持在每个应用的安全区内,本地渲染,无需付费 API。

remotion-shorts-skill 是什么?

该技能允许 AI 代理通过编写一个 JSON 场景文件,并使用包含的 Remotion 模板项目,自动生成完整的竖屏短视频 (1080x1920)。技能的核心要点是:代理的角色是“编剧”,负责构建脚本,而不是编写 Remotion 代码。它支持多种预设主题(如 ink, paper, volt, ocean, clean),并处理文字布局、阅读速度计时、以及确保内容在 TikTok、Instagram Reels 和 YouTube Shorts 的安全区域内的所有技术细节。渲染在本地机器上完成,并生成一份包含时间、布局和警告的检查报告,然后 AI 代理可以通过 WoopSocial 工具将视频发布到指定的社交账户。该技能强调内容必须是真实的、有来源的,并且会针对每个平台优化发布设置。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/social-media-skills/remotion-shorts-skill/tree/HEAD/skills/remotion-shorts-skill

在你喜欢的 AI 中提问

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

文档

Remotion Shorts 技能

你将短视频编写为一个 JSON 场景文件。捆绑的 Remotion 项目负责文字排版,根据阅读速度确定每个场景的时长,使文本保持在无应用按钮遮挡的安全区域内,渲染出检查页、封面和 MP4 文件,用户可以通过 WoopSocial 发布视频。

你不需要为每个视频编写 Remotion 代码。模板是固定且经过测试的;你的工作是脚本:每个画面说什么,按什么顺序,以及多快。

0. 环境设置(每台机器一次)

需要 Node 20 或更新版本。用 node -v 检查;如果缺失,请引导用户访问 https://nodejs.org。Remotion 支持 macOS 15 或更新版本、Windows x64 以及带有 glibc 2.35+ 的 Linux (Ubuntu 22.04, Debian 12 或更新版本)。

node <skill-dir>/scripts/setup.mjs remotion-shorts

这会将项目复制到 ./remotion-shorts 目录,安装固定版本的包(约 260 MB),并下载 Remotion 渲染所需的无头浏览器(100 到 150 MB)。首次运行需要 1 到 3 分钟。当技能更新后再次运行它:它会刷新模板文件(用户修改过的文件会保存为 .bak 备份),并且从不触及用户的脚本、资源或输出。

许可证. Remotion 对个人以及不超过 3 人的公司免费。4 人或以上的公司需要 Remotion 公司许可证,通过脚本渲染被视为自动化(remotion.pro/license)。如果用户是为大型公司进行渲染,请在首次渲染前明确告知一次。

1. 询问你需要的信息(一条消息内完成,跳过已知信息)

  • 素材. 一个主题、文章、URL、笔记、数据、更新日志或列表。你只编写你能指出的确切事实。如果用户给出一个没有来源的主题,请找到一个主要来源(官方统计数据、文档、产品自身的更新日志)并命名它。
  • 目标观众与核心信息. 一个短视频只说一件事。
  • 外观. 一个主题(ink, paper, volt, ocean, clean)或他们的品牌颜色,以及一个用于结尾画面的社交账号 handle。
  • 音频. 内置音效默认开启(在钩子开场时一个重音,每个切换镜头时一个嗖声,高亮时一个弹出声,计数时滴答声);这些音效为此模板制作,在所有应用上都安全。音乐只能来自用户拥有版权的文件(关于为什么没有免费的音频库对所有三个应用都安全,请参见 references/writing-shorts.md)。
  • 发布平台. TikTok、Reels、Short,或全部三个。

2. 编写脚本

在会话中首次编写脚本前,请阅读 references/writing-shorts.md。简而言之:

  • 场景 1 是钩子,用大约 10 个或更少的词陈述收益:一个数字,一个声明,或一个列表承诺(“5 个免费工具替代…”)。它从第 0 帧就完全显示在屏幕上。如果钩子中有数字,把它放在 big 字段中,使其成为眼睛首先落到的位置。
  • 每个场景一个想法. 一个场景是一个节拍,而不是一个段落。统计场景承载一个数字及其含义。列表项向上或向下计数;在钩子中说明顺序。
  • 每个场景都要有真实信息. 一个模板化的、没有任何新内容的文字视频会被 YouTube 称为不真实内容,被 Instagram 称为非原创内容。绝不填充。
  • 数字必须精确并有来源. 将来源放在 footer 中(“数据:USGS”)。切勿将一个数字四舍五入成不同的声明。
  • 以一个操作或能让循环看起来连贯的结尾. 没有“感谢观看”。
  • 时长: 目标为 15 到 45 秒;超过 59 秒渲染器会发出警告。

在项目文件夹中编写 short.json。完整格式、每个场景类型及其所有选项都在 references/short-json.md 中。一个最小化的脚本示例:

{
  "theme": "ink",
  "footer": "数据:USGS",
  "handle": "@yourhandle",
  "scenes": [
    { "type": "hook", "big": "2.5%", "text": "的地球水是淡水" },
    { "type": "stat", "value": "96.5", "suffix": "%", "label": "是海洋中的盐水" },
    { "type": "stat", "value": "68.7", "suffix": "%", "label": "的淡水是冰和冰川", "highlight": "冰和冰川" },
    { "type": "end", "text": "保存此视频用于问答之夜", "highlight": "保存此视频" }
  ]
}

3. 渲染前检查

cd remotion-shorts
node render.mjs short.json --stills

几秒钟后,这会打印出计划(每个场景的时长和字号)并写入:

  • out/short/sheet.jpg:每个场景的最后一帧(画面上的所有内容),安全区域用细虚线标出(文本必须保持在其中)。
  • out/short/cuts.jpg:第 0 帧以及每个切换点周围的帧,用于检查动态效果。
  • out/short/cover.jpg:钩子落地后的画面(将其作为 Reels 的封面图片上传)。
  • out/short/report.json:时间、换行和警告信息。

打开两个检查页并查看它们。 检查:每个场景在手机尺寸下是否可读,每个场景是否只说一件事,高亮是否在重要的词上,是否有任何内容显得拥挤,顺序是否正确,以及第 0 帧是否显示了完整的钩子。修正 JSON 并再次运行 --stills 直到你愿意发布它。

警告会阻止视频渲染(退出代码 2):文本太长无法在一屏显示,钩子太长,高亮词不在文本中,场景速度太快无法阅读,节奏超出 0.85 到 1.25 的范围,或者短视频超过 59 秒。修正脚本;仅在用户看到警告并仍希望渲染时使用 --force。某些问题是 --force 无法覆盖的错误,例如单词在任何字号下都太宽无法显示在屏幕上:这些会导致文本显示在屏幕外。

4. 渲染

node render.mjs short.json

写入 out/short/short.mp4:1080x1920,30 fps,H.264,yuv420p,AAC(无音乐时是一个静音音轨),TikTok、Reels 和 Shorts 都接受这种格式。一个 30 秒的短视频在最近的笔记本电脑上大约需要一分钟渲染。内存为 8 GB 的机器一次渲染 2 帧;如果渲染仍因内存不足而中断,使用 --concurrency 1 重新运行。

在展示之前,抓取三帧并查看它们(开头、中间、结尾),或者如果你的客户端支持,播放它。然后向用户展示封面、检查页和 MP4 路径。

多个账号: 绝不要将同一个文件发布到多个账号。为每个账号制作一个变体(不同的钩子、主题或场景顺序,保存为独立的 JSON 文件),这样没有两个账号会发布近乎重复的内容。

5. 发布(使用 WoopSocial,需确认)

阅读 references/woopsocial.md。简而言之:

  1. 使用 social_accounts_list 查找账号(如果需要,先连接它们)。
  2. 对于 TikTok,使用 social_accounts_get_platform_inputs 获取该账号的隐私选项和允许的最长视频。用户选择隐私设置;没有默认值。
  3. 上传:使用 report.json 中的精确字节大小创建 media_uploads_create_session,将响应保存为 session.json,运行 node upload.mjs session.json out/short/short.mp4,然后运行 media_uploads_complete_session 直到状态变为 READY。
  4. 按平台编写标题文案(TikTok 和 Reels:一行能补充视频的信息加上 3 到 5 个特定的话题标签;YouTube:100 个字符以内的标题加上描述)。使用 contentOverride 实现不同平台的不同文本。
  5. 调用 posts_validate,然后向用户展示:账号、每个平台的标题文案、隐私设置、安排时间(含时区)、封面图。等待明确的“是”。然后调用 posts_create 和 posts_get。

披露字段:当短视频推广用户自己的产品时,TikTok 上设置 isYourBrand: true;isAiGeneratedContent 仅用于逼真的 AI 图像、视频或语音(动态文字不需要)。YouTube 的 madeForKids 是一个法律声明:必须询问,绝不猜测。

6. 报告结果

展示:MP4 路径、时长、检查页、发布位置(来自 posts_get 的链接)或计划时间,以及你无法完成的事情。绝不虚构观看次数或结果;之后通过 social_account_posts_list 读取它们,并报告收集数据的日期。

编辑外观

  • 品牌颜色:将 theme 作为一个对象传递(bg, fg, accent, accentText, font, uppercase)。保持文本对比度不低于 7:1;同时也要检查强调色在背景上的对比度。
  • 场景后的照片或视频:使用每个场景的 image 字段或整个短视频的 background 字段。它们会在主题颜色下变暗,以确保文本可读。使用用户拥有或获得许可的文件,并在许可要求时在说明中注明出处。
  • 捆绑字体:Anton(紧凑,大写,响亮)、Poppins、Inter。均为 OFL 许可。
  • 要更改模板本身,请编辑 src/Short.tsx 并使用 npm run studio 预览。

边界情况

  • 数字无来源: 不使用。说明缺少什么。
  • 文本无法容纳: 拆分成多个场景;字号不要低于最小值(渲染器不会允许低于最小值)。
  • 从右到左书写、中日韩文字或表情符号: 捆绑的字体不覆盖这些,它们可能显示为空框。告知用户并避免使用(表情符号可以放在说明中)。
  • 用户想要热门声音: API 发布无法添加。发布时使用 postMode: MEDIA_UPLOAD 模式发布到 TikTok,这样视频会进入用户的 TikTok 收件箱,以便在应用内完成操作。
  • Linux 上因缺少库渲染失败: 安装 references/platform-specs.md 中列出的包。
  • Windows: 始终在 JSON 文件中传递属性,不要在命令行内联传递。

质量标准

在宣布完成之前,它应通过以下所有检查:

  • 第 0 帧显示完整的钩子(检查 cuts.jpg);大约 10 个或更少的词,陈述收益。
  • 每个场景只说一件事;没有场景超过约 14 个词。
  • 每个数字与其来源匹配;来源在屏幕上或说明中。
  • 没有警告,或者用户已看到警告并选择使用 --force。
  • 两个检查页都已检查:没有文本超出虚线安全线,高亮在正确的词上。
  • 时长在 15 到 59 秒之间。
  • 每个账号有独特的版本。
  • 在发布任何内容之前用户已确认。

相关技能