一句话视频 は何をしますか?
用户给一句话,你先做设计:定风格,定每一场画面上看到什么。然后写一份 video.json,题材里看得见的东西由你写画面代码画出来。脚本负责排时间、配乐、字幕、编码、自检。
下文命令里的 SKILL 要换成本文件所在目录的绝对路径(例如 /home/me/skills/one-prompt-video)。所有命令在用户的当前工作目录里跑,文件路径都相对它。
五步
1. 准备环境(每个工作目录跑一次)
node "SKILL/scripts/setup.mjs"
它检查 Node、画图库、ffmpeg、中文字体,缺的会装或告诉你怎么装。全部 [通过] 再往下走。有 [缺少] 时把那几行原样告诉用户。
2. 设计(不反问用户,自己定,最后告诉用户你定了什么)
在当前工作目录新建一个文件夹(用片名,下面叫 片名/),先把设计写进 片名/方案.md,十几行就够。写完方案再写别的。只有文字卡片的片子观众看不下去,这一步决定片子好不好看。
补齐用户没说的
| 用户没说的 | 默认 |
|---|---|
| 多长 | 30 秒左右,5 到 8 场 |
| 横屏竖屏 | 横屏 16:9;提到手机、竖屏、抖音、小红书、视频号用 9:16 |
| 语言 | 和用户说话的语言一致 |
| 人声 | 不要。默认是字幕加配乐。本技能不带配音服务:用户要人声时,先告诉他配音要自己准备(一个能从命令行出声的 TTS,或自己的录音),再照 references/voice.md 接 |
定风格
- 用户要的是氛围、故事、场景、角色,或者说了「不要讲解」「要画面感」「像电影」:这支片子不用版式,整支由你画。改读
references/film.md,照它做。 - 其余的片子从下面的风格包表里选一个。风格包自带场景、道具、角色、转场和音效,画面比内置主题丰富得多。按题材选:先看「适合」一栏;对得上不止一个时,选和题材里的实物最近的(手作、食物、生活小事选
papercraft或clay,设备和流程选isometric,账目和业绩选dashboard)。用户点名了一种样子(「像打游戏」「做成聊天记录」「新闻播报那种」)就用对应的风格包。 - 内置主题只在两种情况用:用户明说要简洁、克制、商务;或者内容严肃,装饰会妨碍阅读。用内置主题的片子,自己画的场要占到一半。
- 定一样贯穿全片的东西:题材里的一件实物(机翼、咖啡豆、月亮、店铺的门脸)。它在片头出现,在后面几场里再出现,片子才连得起来。
定每一场
方案里列一张表,每场一行,按这个顺序想:
| 这一场要让观众明白的一件事 | 画面上看到什么 | 怎么做(哪种版式,或自己画) | 旁白 |
|---|
「画面上看到什么」写的是图:一样东西、一个过程、一张图表、一个结构。先想图,再想字。照下面八条定:
- 遮字看。 把这一场的字全部遮掉,剩下的画面还看得出在讲什么,这一场才成立。讲机翼,画面上要有机翼和气流;讲咖啡订阅,画面上要有盒子、豆袋和冲煮卡片。
- 看得见的东西自己画。 题材里的实物、过程、结构,用
layout: "custom"写画面代码画出来,写法见references/custom-scenes.md。全片最要紧的那一场必须是自己画的;一支片子至少两场自己画,三分之一以上更好。 - 版式按信息的形状选,让版式自己说明关系。 比大小用
bars,先后顺序用steps,两方对照用compare,一个真实的量用number(序号、钟点、编号不是量,不用number)。statement全片最多一场,bullets最多一场,quote只放真实的引语。 - 不写次要的标签和说明。
kicker、subtitle、note、label、cta和每一场的title默认都不写。只有去掉它观众就看不懂这一场时才写。版式已经表达的关系不用文字再说一遍:柱状图不用起「四个季度对比」这样的标题,步骤不用写「第一步」,对比卡不用写「对比」。 - 画面和旁白分工。 旁白(
say)讲完整的句子,讲的是画面上正在出现的东西;画面上只留图、关键词和数字。同一句话不既排成大字又放进字幕。 - 相邻两场不一样。 同一种版式不连用两场;上一场是居中的大字,下一场就换成图或图表。
- 重点省着用。 大数字、金句全片各一次。
- 头尾。 第一场用
title,开头两场内说清这支片子讲什么。最后一场用end,落在一句结论或一个行动上;结尾比开头小、比开头短:一句话,加上那样贯穿全片的东西。
你看不了图、也写不了画面代码时,第 2 条做不到:照常用风格包和版式做,回报时如实告诉用户这支片子以文字版式为主。
3. 写 video.json 和画面代码
照方案写 片名/video.json:
{
"title": "一句话,出一支片",
"theme": "papercraft",
"aspect": "16:9",
"seconds": 30,
"scenes": [
{ "layout": "title", "title": "一句话,出一支片", "say": "说一句话,就能拿到一支短视频。" },
{ "layout": "custom", "module": "scenes/pipeline.mjs", "seconds": 7, "cues": 3, "say": "你说一句话,模型做设计、填表,脚本把它变成片子。" },
{ "layout": "bars", "unit": "秒", "items": [{ "label": "第 1 次", "value": 68 }, { "label": "第 2 次", "value": 51 }, { "label": "第 3 次", "value": 57 }], "say": "小模型测了三次,每次一分钟左右。" },
{ "layout": "custom", "module": "scenes/laptop.mjs", "seconds": 6, "say": "一台普通的笔记本电脑就能出片。" },
{ "layout": "end", "title": "现在试试", "say": "现在就试一次吧。" }
]
}
seconds是全片的目标时长,脚本会按它分配每一场的时间,成片和它差三秒以内是正常的(每场要凑成整数拍,片尾还有一秒多淡出)。不写就按字数自动估。say是这一场的字幕(有配音时也是配音稿)。每场一句,30 个汉字以内(英文 12 个词以内)。- 自己画的场,画面代码放在
片名/scenes/里。每写完一场先出静帧看(--still),认得出画的是什么再写下一场。 - 画面上的字是给人扫一眼的,要短。写不下就拆成两场,不要把一场塞满。
- 不编事实。用户没给的数字、引语、人名、公司名不要写成真的;要举例的数字,在旁白里说明是示意。产品的功能和效果只用用户给的说法;你自己补的解释,在最后回报时逐条列出来请用户核对。
只用版式的完整例子在 SKILL/assets/example.video.json。
4. 校验,出片
node "SKILL/scripts/make.mjs" 片名/video.json --check # 先校验,几秒钟
node "SKILL/scripts/make.mjs" 片名/video.json --sheet # 出总览图,看过再出片
node "SKILL/scripts/make.mjs" 片名/video.json # 出片
--check报[出错]时,每一条都写了第几场、哪个字段、正确的写法。照着改,再跑,直到通过。- 你能看图的话,打开
片名/out/sheet.jpg逐格看。每场两格:第一格是入场到一半,第二格是全部到齐,以第二格为准。每一格问四件事:遮掉字还看得出在讲什么吗;主体够不够大(占画面宽或高的六成以上);有没有一大片空着;有没有字挤在一起或一个词被折成两行。有一条不过就改,改完重出总览图。 - 出片后读它打印的报告(也存在
片名/out/report.txt)。有[问题]或[注意]就改了重跑;最常见的是「字太多」,把那段字缩短。
5. 告诉用户
说清四件事:成片在哪(报告里「成片:」那一行的路径,文件名是 title 加 .mp4);你替用户定了什么(时长、画幅、风格、哪几场是自己画的);片子里哪些内容是你补的;画面好不好看、配乐好不好听你没法判断,请用户看一遍。成片没有人声时顺带提一句:想加配音,要他自己找一个 TTS 接进来。
风格包
每个风格包是一整套画面:九种版式各按自己的样子重画,带自己的场景、道具、转场、字幕和音效。theme 写它的名字就行。
| theme | 样子 | 适合 |
|---|---|---|
papercraft | 多层卡纸的景箱、纸片小人、定格抖动 | 轻松的科普、产品介绍、小故事、生活类 |
clay | 暖色黏土定格,圆润的小角色 | 入门讲解、习惯和健康、给孩子看的内容 |
collage | 牛皮纸、撕纸、胶带、剪下来的字 | 轻松的科普、盘点、栏目开场 |
skit | 扁平插画的办公室,两个小人对内容有反应 | 给非专业观众讲道理、职场话题 |
isometric | 2.5D 的机器、传送带、检查站 | 讲流程、讲原理、讲系统怎么运转 |
cosmos | 深空、星云、发光的星体和轨道 | 讲全局、讲层次、系列开篇 |
dashboard | 暗色数据大屏:面板依次点亮、仪表弧、柱状图 | 业绩、评测、监控、成本这类带数字的内容 |
news | 演播室、标题条、滚动字幕条 | 要点速递、周报、数据播报 |
chat | 手机里的一段聊天记录,内容是一条条气泡 | 口语化讲解、案例、问答 |
comic | 黑框分格、网点、速度线、拟声字 | 有转折的故事、前后反差 |
detective | 软木板、拍立得、便签、红线 | 排查问题、复盘一件事的来龙去脉 |
arcade | 8-bit 像素游戏:砖块、金币、关卡地图 | 讲步骤、比高低、轻松的产品介绍 |
variety | 多层描边花字、放射线、吉祥物、弹幕条 | 最热闹的短视频、吐槽、盘点 |
vhs | 录像带:扫描线、换台、老电视、走带计时 | 怀旧向、系列节目的片头和预告 |
chrome | 镀铬立体字、流动的液态渐变、星形闪光 | 年轻向的短句、潮流话题,不适合严肃内容 |
预览图在 SKILL/assets/styles.jpg,能看图就先看一眼再选。风格包的装饰多,一场里的字要更短;news 会把内容排成新闻节目的样子,内容不是真新闻时在回报里提醒用户一句。
这些只是现成的起点,风格不设上限:要一整套新的样子(手账、黑胶唱片、地铁线路图,什么都行)照 references/style-packs.md 写一个自己的风格包。
十二种内置主题
主题只换颜色、背景和线条,画面里没有场景和道具。用它的条件见第 2 步「定风格」第 3 条。
| theme | 样子 | 适合 |
|---|---|---|
grid | 米色网格纸、紫色、白卡片 | 讲概念、讲原理 |
minimal | 大面积留白、细线、一个蓝点 | 安静克制的品牌片、片头 |
pop | 撞色、放射线、粗黑描边 | 热闹、快节奏、短视频平台 |
keynote | 深色渐变、玻璃卡片、发光 | 新品、重大结论、科技话题 |
blueprint | 蓝图纸、白线、黄色标注 | 讲结构、架构、怎么组装 |
whiteboard | 白板、马克笔、手画的框 | 老师边画边讲,讲流程和因果 |
chalk | 墨绿黑板、粉笔线、木边框 | 课堂板书,讲题、讲公式、讲步骤 |
neon | 深紫夜色、发光线条、透视网格 | 科技、游戏、电子音乐 |
terminal | 黑底绿字、等宽字、闪烁的光标 | 代码、命令行、开发工具 |
paper | 米色纸面、衬线大标题、红色 | 评论、读书、人文话题 |
ink | 宣纸、远山、朱红印章 | 传统文化、诗词、历史 |
bold | 黑白粗体、硬切、一种红色 | 观点、口号、榜单 |
预览图在 SKILL/assets/themes.jpg。用户要别的颜色用 colors 换。
版式
每一场选一种,或者自己画。一场只讲一件事。
| layout | 什么时候用 | 必填 | 默认不写的 | 限制 |
|---|---|---|---|---|
custom | 题材里看得见的东西:实物、过程、结构 | module、seconds | cues、data | 见 references/custom-scenes.md |
title | 开头 | title | subtitle、kicker | 标题 12 字以内 |
bars | 比大小 | items(2 到 6 项,每项 label 和数字 value) | title、unit(接在每个数后面)、highlight(第几根用强调色,从 1 数;不写是最高的那根) | label 8 字以内 |
steps | 先后步骤、流程 | items(2 到 5 步) | title | 每步 12 字以内 |
compare | 两样东西对照 | left、right(各有 title 和 1 到 4 条 items) | title | 每条 12 字以内 |
number | 一个真实的量,全片一次 | value | unit、label、note | value 写成 "25"、"80%"、"1,280" |
statement | 一句要让人记住的话,全片最多一场 | text | highlight(text 里要上色的词) | 24 字以内 |
bullets | 并列的几个要点,全片最多一场 | items(2 到 5 条文字) | title | 每条 18 字以内 |
quote | 真实的引语 | text | by | 40 字以内 |
end | 结尾 | title | subtitle、cta(按钮上的字) | 标题 14 字以内 |
unit是数字的一部分,该写就写。number的label只在光看数字和单位不知道它量的是什么时才写。- 每种版式都可以加
say(字幕)和seconds(这一场固定多少秒)。
用户给了视频素材(实拍、录屏、已有的片子)时,还有一种 clip:把素材里的一段放进来,和上面的版式混着排,整支片子全是 clip 就是剪辑。写法:{ "layout": "clip", "file": "素材/采访.mp4", "from": 12.4, "to": 18 }。怎么看素材、怎么定取哪一段,见 references/editing.md。
要更多的时候
| 需要 | 读 |
|---|---|
| 自己画一场:实物、过程、结构(每支片子都要用到) | references/custom-scenes.md |
| 用户要的是氛围、故事、场景、角色,或整支片子都是自己设计的画面 | references/film.md(你写每一帧怎么画,脚本管镜头、配乐、出片和自检;要能看图) |
| 全部字段、换颜色、换字体、固定某一场的秒数 | references/video-json.md |
| 加人声(配音要用户自己找 TTS 或自己录),换成自己的配乐文件 | references/voice.md、references/video-json.md |
| 用户给了视频素材要剪进去,或者要剪辑已有的视频 | references/editing.md |
用户要在 Final Cut Pro、剪映里接着剪(出片命令加 --project) | references/editing.md |
| 现成的主题和风格包都不对,要一整套新的样子 | references/style-packs.md(写一个风格包,要自己写几百行画面代码并对着图改,先确认自己做得了) |
| 安装失败、字体方框、ffmpeg 报错 | references/troubleshooting.md |
| 用户明确要 3D 场景、全屏着色器的自然风景这类画布画不了的片子 | references/pipelines.md(参考生产线,要自己写代码,先确认自己做得了) |
| 用户机器上有 Blender、库乐队,或有豆包语音的密钥,想要写实渲染、真实乐器的配乐、自然的人声 | references/external-tools.md(借助外部工具,给能力强的模型,先确认自己做得了) |
这个技能做不了的:凭空生成真人或实拍的画面(实拍只能用用户给的素材)、对素材做调色抠像这类精修(导出工程交给剪辑软件做)。遇到这类需求如实告诉用户。