课程录像
叙述 垂直课程视频 (1080×1920, Douyin / Reels ready)取自一出书面剧本——外加与之相伴的封面艺术和出版副本.
整个事情都基于一个想法: 图片是时间的纯函数 t。你写所说的话,边缘的TTs 说它和手回 字层的计时,然后每个帧都是 计算 从时间表。 语音,字幕和幻灯片按构造排列,所以之后没有任何内容可以编辑.
script.json ──tts.py──▶ narration.wav + lesson.json ──render.mjs──▶ 30fps JPEG frames ──build.py──▶ mp4 + srt
covers.json ──cover.mjs──▶ 1080×1920 video cover + 1080×1440 profile cover
为什么它存在
- 真电话安全区. App按钮和状态栏覆盖了肖像屏幕的边缘,因此布局通过设计使侧面和顶部保持了空:内容活在745×1170 px内部,字幕带从y=1470开始.
- 事前自检.
render.mjs --check失败 在此之前 在帧上花费了几分钟:内容经过了字幕安全行,被卡片剪接的代码行,以及留下了单字符孤行的标题. - 没有编辑软件,没有GPU. 无头色素 +
imageio-ffmpeg; 三分钟一集在CPU上制作约5分钟,一个脚本修补后重接是一个命令. - 没有烘焙品牌. 水印,品牌标记,CTA和每个标题都出自数据文件——模板飞船,没有任何人的硬码.
里面的东西
| 路径 | 这是什么 |
|---|---|
skills/lesson-video/SKILL.md | 技能:脚本计划 三条命令,布局规则,陷阱 |
skills/lesson-video/kit/ | 工具包—— tts.py, (中文(简体) ), render.mjs, (中文(简体) ), build.py, (中文(简体) ), deck.html, (中文(简体) ), cover.mjs, (中文(简体) ), cover.html; 将其复制到项目 lib/ |
skills/lesson-video/example/ | 一个骨架 script.json (四种场景类型)和 covers.json |
所需资源
| 需求 | 安装 |
|---|---|
| Python 软件包 | pip install edge-tts imageio-ffmpeg (ffmpeg 二进制随第二个) |
| 剧作家核心 | 任何可用的 playwright-core; 点 PLAYWRIGHT_MODULE 临τ |
| 浏览器 | 任意铬/铬; 点 CHROME_PATH 临τ |
快开始
cp -r <skill>/kit/* <project>/lib/
mkdir -p <project>/lessons/ep01
# 1. write <project>/lessons/ep01/script.json (see the skill for the schema)
PYTHONUTF8=1 python lib/tts.py lessons/ep01
node lib/render.mjs --dir lessons/ep01 --check # 10s: safe area, clipped code, orphan titles
PLAYWRIGHT_MODULE=… CHROME_PATH=… node lib/render.mjs --dir lessons/ep01
PYTHONUTF8=1 python lib/build.py lessons/ep01 # out/ep01.mp4 + out/ep01.srt
许可证
阿帕奇 - 2.0