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。简而言之:
- 使用
social_accounts_list查找账号(如果需要,先连接它们)。 - 对于 TikTok,使用
social_accounts_get_platform_inputs获取该账号的隐私选项和允许的最长视频。用户选择隐私设置;没有默认值。 - 上传:使用
report.json中的精确字节大小创建media_uploads_create_session,将响应保存为session.json,运行node upload.mjs session.json out/short/short.mp4,然后运行media_uploads_complete_session直到状态变为READY。 - 按平台编写标题文案(TikTok 和 Reels:一行能补充视频的信息加上 3 到 5 个特定的话题标签;YouTube:100 个字符以内的标题加上描述)。使用
contentOverride实现不同平台的不同文本。 - 调用
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 秒之间。
- 每个账号有独特的版本。
- 在发布任何内容之前用户已确认。