Video Lite v2 是做什么的?
一个从小型故事板 JSON 生成的完成版 MP4 视频。每一帧都是使用 cairo 绘制的矢量艺术(抗锯齿文字、符号、几何图形、发光效果、粒子、摄像机运动、场景转场),并由 ffmpeg 编码;语音由 espeak-ng/MBROLA(支持巴西葡萄牙语和英语)生成,配合一段在语音下方自动降低音量的程序化背景音乐,并在剪辑和揭示时添加嗖嗖/弹出音效。可在老旧 Pentium M 上运行:大约 90 秒的 720p 视频耗时约 7-8 分钟(480p 草稿模式:约 4 分钟)。无需 Node、Chromium、GPU、模型或网络。
<skill-dir> 指的是本 SKILL.md 所在的文件夹。所有命令都从用户的工程文件夹运行;输出文件也放在那里。
黄金路径 —— 请严格按照顺序执行
# 1. 一次性检查机器(同时测量其速度,约 1 分钟)。它会指出缺少什么以及如何修复。
python3 <skill-dir>/scripts/doctor.py
# 没有语音?在 Debian/Ubuntu/antiX 上,该脚本会在 ~/.local 中安装 espeak-ng + MBROLA 巴西葡萄牙语,无需 root 权限:
bash <skill-dir>/scripts/setup_voice.sh
# 2. 从格式(任务)和主题(风格)开始:
python3 <skill-dir>/scripts/compose.py formats # explainer-motion / story / listicle / explainer / promo / demo
python3 <skill-dir>/scripts/compose.py themes # mystic, neon, terminal-green, sunset, ocean, paper, mono
python3 <skill-dir>/scripts/compose.py new --format explainer-motion --theme neon --out storyboard.json
# 然后编辑 storyboard.json:所有 "TROQUE:" 占位符必须替换为本视频的真实内容(渲染器会拒绝遗留的占位符)。你可以自由添加、删除或重新排列场景。
# 旁白速度:大约每秒 14 个字符。每个场景一个想法,1-2 句话。
# 3. 渲染。一直运行到 MP4 生成完毕。--draft = 480p,速度更快:在旧机器上优先使用。
python3 <skill-dir>/scripts/render.py storyboard.json --out video.mp4 --draft
python3 <skill-dir>/scripts/render.py storyboard.json --out video.mp4
# 可选:在长时间渲染前查看某一帧(会生成 video.png):
python3 <skill-dir>/scripts/render.py storyboard.json --out video.mp4 --still 12.5
# 4. 验证实际文件(时长、视频+音频流)并查看联系表 PNG。
python3 <skill-dir>/scripts/verify.py video.mp4 --require-audio
不要手动编写 ffmpeg 管道或自行绘制帧:render.py 负责布局、文本适配、动画、时序和同步。如果某一步失败,请阅读其输出信息——它会告诉你需要修改什么。机器慢且赶时间?使用 render.py ... --fast(减少粒子效果,无摄像机运动)。
故事板
{
"theme": "mystic",
"voice": "mb-br3",
"scenes": [
{"kind": "title", "title": "O Caibalion", "subtitle": "os sete princípios herméticos", "symbol": "☿",
"narration": "Conheça o Caibalion e seus sete princípios."},
{"kind": "kinetic", "text": "O Todo é *Mente*",
"narration": "O primeiro princípio diz: o Todo é mente."},
{"kind": "bullets", "title": "Na prática", "bullets": ["observe seus pensamentos", "mude o foco", "repita"],
"narration": ["Observe seus pensamentos.", "Mude o foco.", "E repita todo dia."]},
{"kind": "wheel", "title": "Os sete princípios", "center": "☿",
"nodes": ["Mentalismo", "Correspondência", "Vibração", "Polaridade", "Ritmo", "Causa e Efeito", "Gênero"],
"narration": "Mentalismo, correspondência, vibração, polaridade, ritmo, causa e efeito e gênero."},
{"kind": "cta", "title": "Leia o livro", "subtitle": "domínio público desde 1908",
"narration": "Leia e tire suas conclusões."}
]
}
顶层字段:theme(主题),voice(语音,pt-br、en-us、es……或 MBROLA 的 mb-br3 / mb-br1 / mb-br4,听起来更不像机器人;若设为 pt-br 且已安装 MBROLA,则默认使用 mb-br3;"none" 表示静音)。语速由 render.py 设置(约 14 字符/秒);"speed": 0.9–1.15 可微调(v1 中的 rate 已被忽略)。可选字段:transition(所有场景通用转场),"music": false(关闭语音下的柔和和弦背景音乐),"sfx": false(关闭嗖嗖/弹出/上升音效),"captions": true(以字幕形式显示旁白;默认关闭——屏幕上显示关键词,语音讲述其余内容)。
每个场景:kind(类型,见下文),narration(旁白),可选的 seconds(秒数,默认等于旁白时长加上短停顿;只能让场景变长),可选的 transition(fade 淡入淡出 | slide 滑动 | zoom 缩放 | wipe 擦除 | iris 虹膜 | cut 硬切;默认使用主题自身的轮换),可选的 camera(auto 慢速缩放/平移,或 none 无)。
将画面与语音同步: narration 可以是一个句子列表。当 bullets、wheel、icons 或 split 场景包含 N 个项目,并且旁白包含 N 个句子(或 N+1 个:第一个作为开场白)时,第 k 个项目会在第 k 个句子开始播放时精确出现:
{"kind": "bullets", "title": "Por quê", "bullets": ["roda em PC velho", "modelos grátis", "testa tudo"],
"narration": ["Três motivos.", "Roda em computador velho.", "Usa modelos grátis.", "E testa antes de dizer pronto."]}
不要在 narration 中放入链接、电子邮件或文件路径(渲染器会拒绝):请将这些内容显示在屏幕上(cta 副标题)。保持每个句子在 ~110 个字符以内。
场景类型(compose.py kinds 可打印此列表)
| kind 类型 | 你看到的画面 | 字段 |
|---|---|---|
title 标题 | 大标题逐词显示,下方绘制下划线,顶部可选符号 | title,subtitle,symbol(可选) |
bullets 要点 | 标题 + 逐条显示的项目,每条带图标 | title,bullets:["文字", {"text": "…", "icon": "fa-rocket"}] |
terminal 终端 | 打字效果的终端窗口 | lines:["$ comando", "saída"] |
quote 引用 | 大引号标记,文字淡入,作者滑动进入 | title(引文),subtitle(作者) |
cta 行动号召 | 结尾呼吁:标题弹出,副标题显示在发光按钮中 | title,subtitle,symbol(可选) |
symbol 符号 | 一个巨大的符号逐笔绘制,然后填充并发光,带有光环环 | symbol,title,subtitle,spin(true/false 是否旋转) |
geometry 几何 | 神圣几何逐步绘制,然后发光 | shape(一个名称或列表),title,subtitle,labels(仅用于 arrows 箭头) |
wheel 轮盘 | 圆上的 N 个节点(2–12 个)逐一揭示并带有指向中心的连线;当前节点发光 | title,nodes:["a", {"label": "b", "icon": "fa-cog"}],center(中心词或符号),active(1..N:高亮该节点) |
icons 图标 | 1–8 个图标组成的网格,带标签弹出 | title,items:[{"icon": "fa-cogs", "label": "motor"}] |
kinetic 动态文字 | 大号文字与语音同步出现;*word* = 强调色 + 发光 | text |
split 分屏 | 文字列 + 另一侧的插图 | title,text 或 bullets,以及 symbol 或 shape,side(right/left:图案在哪一侧) |
shape 形状名称:circle 圆形,triangle 三角形,triangle-down 倒三角,square 正方形,hexagon 六边形,hexagram 六芒星,pentagram 五角星,flower 生命之花,seed 生命之种,vesica 鱼形,spiral 黄金螺旋,eye 三角之眼,ouroboros 衔尾蛇,wave 振动波,pendulum 节奏摆,arrows 因果箭头(使用 "labels": ["causa", "efeito", "causa"])。组合形状:"shape": ["circle", "hexagram"]。
symbol/icon/center 可接受(compose.py symbols 列出所有名称):
- 单个字符:
"☿","☤","☯","✡","⚖","∞","🜂"(炼金术),"♀","☉","☽"… - Font Awesome 4 名称:
"fa-cogs","fa-book","fa-rocket","fa-lightbulb-o","fa-globe","fa-terminal"… - 命名符号:
"mercurio","caduceu","yin-yang","balanca","fogo","agua","olho"… - 表情符号:
"🔥","🚀","💡"(有颜色;以弹出方式显示,不是逐笔绘制)。
一个完整的约 90 秒示例(赫尔墨斯主义,神秘主题,包含所有插图类型):<skill-dir>/examples/caibalion.json。
快速获得良好品位
- 变化场景类型:同一类型不要连续出现 3 个场景;交替使用文字密集型(
bullets要点,split分屏)和视觉型(symbol符号,geometry几何,kinetic动态文字,wheel轮盘)。 - 标题要简短(≤ 5 个词),副标题 ≤ 10 个词,要点每个 ≤ 6 个词,最多 5 个要点。
- 对于 N 项列表:先用一个
wheel轮盘做概览,然后每个项目用一个场景(symbol符号/geometry几何),或者再次使用wheel并添加"active": k。 - 主题:
mystic神秘(靛蓝/金色,衬线字体,星光),neon霓虹(洋红/青色,合成网格),terminal-green终端绿(代码风格),sunset日落,ocean海洋,paper纸张(浅色,衬线字体),mono单一色。
测试
python3 <skill-dir>/scripts/selftest.py 会以草稿模式短暂渲染每种场景类型,并用 ffprobe 检查生成的 MP4(exit 0 表示通过)。添加 --voice 参数还会测试 espeak 和字幕功能。