关于 makevideo
makevideo 将 Markdown 或 JSON 场景脚本转换为配旁白和字幕的 MP4,适合需要稳定视频生成流程的 AI Agent。它可在本地仅用 CPU 运行,无需 API 密钥,并提供预览和校验工具。
主要功能
- 01将 Markdown 或 JSON 脚本渲染为 MP4
- 02生成旁白和同步字幕
- 03制作横屏、竖屏和方形视频
- 04用联系表预览画面布局
- 05校验脚本和场景节奏
适用场景
- 01制作带旁白的版本说明和回顾
- 02生成短视频社交内容
- 03渲染游戏预告片和演示
MCP 相关
MCP 服务提供从 Markdown 或 JSON 渲染视频、以联系表预览、校验脚本及获取视频参考信息的工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
docker run -i --rm ghcr.io/random00000000/makevideo:0.6.0本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
ghcr.io/random00000000/makevideo:0.6.0stdio工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
makevideo
为 AI Agent 快速生成标准视频。 输入一个 JSON 脚本,输出一段成片 MP4,每次渲染方式都相同。你只需编写场景,每个场景附上一句台词。makevideo 会用统一的神经网络语音为它们配音,根据实际音频确定每个场景的时长,添加字幕,并使用内置的 ffmpeg 渲染成 MP4。它仅使用 CPU 运行:无需浏览器、GPU、API 密钥或云服务。
▶ 现在就让你的 Agent 制作视频(1:39,由 Agent 根据一个 JSON 文件编写、配音并渲染) · ▶ 观看 87 秒演示,根据 examples/showcase.json 在笔记本电脑的 CPU 上渲染,速度快于播放速度。
也适用于短视频: "format": "shorts" 可生成 1080×1920 视频,并配有醒目的逐词字幕。▶ 观看 TikTok 风格演示(examples/tiktok.json):23 秒的视频仅需 15 秒即可渲染,还会自动导出 GIF。
更多示例,均由 makevideo 制作: ▶ 0.6 版新内容:游戏预告片(规范) · ▶ Neon Drift 游戏预告片(节拍表) · ▶ 0.5 版新内容:纪录片(规范) · ▶ 59 秒演示(规范) · ▶ 统一语音 · ▶ 发行回顾 · ▶ 0.4 版新内容:更贴近每个 Agent(规范) · ▶ 0.3 版新内容:速度(规范) · ▶ 0.2 版新内容(根据一个 Markdown 文件制作) · ▶ 为什么使用 makevideo,而不是从头构建(规范) · ▶ v0.1 更新日志视频(规范):更新日志和回顾视频是核心使用场景。
功能: 按节拍剪辑的游戏预告片,画面取自你的 Electron + Three.js 游戏 · 旁白幻灯片 · 自动转场(推移、滑动、缩放、擦除) · 动态声明 · 动画图表 · 分屏媒体与文本 · 编写 Markdown,生成视频 · 截图 · 游戏画面/视频片段 · GIF 导入与导出 · 代码 · 统计数据 · 引言 · 前后对比 · TikTok/Reels/Shorts 字幕 · 自定义字体 · 背景音乐 · 预告片屏幕录制 · .srt 字幕 · 海报帧。
npm i github:random00000000/makevideo
npx makevideo init # writes video.json (or: init --style documentary | shorts | explainer)
npx makevideo video.json # → video.mp4 + video.srt + video.report.json + video.jpg
npx makevideo video.json --fast # same, about 3x faster on a first render
import { video } from 'makevideo';
await video({
title: 'Patch notes 1.2',
scenes: [
{ type: 'title', title: 'Patch 1.2', subtitle: 'Siege update', say: 'Here is what is new in patch one point two.' },
{ type: 'clip', src: 'siege.mp4', title: 'Rams breach gates', say: 'Rams can now breach wooden gates.' },
{ type: 'bullets', title: 'Also new', items: ['Faster pathing', 'New HUD'], say: 'Also new. Pathing is faster. And the HUD is redesigned.' },
{ type: 'decisions', items: ['Ship Friday?'], say: 'One decision for you. Do we ship on Friday?' },
],
});
为什么
Agent 经常会被要求制作视频,而每个 Agent 制作视频的方式都不一样。每个视频都会采用一套新的流程、不同的声音,除非有人提出要求,否则就没有旁白,而且渲染可能需要十分钟。makevideo 将这一切标准化:
| 临时制作的 Agent 视频 | makevideo | |
|---|---|---|
| 格式 | 每次都写一份新脚本 | 一份 JSON 规格(schema) |
| 声音 | 随机 TTS,有时没有声音 | Kokoro-82M,每次使用同一种声音(af_heart) |
| 旁白 | 必须提出要求 | 默认开启:每个场景都有 say |
| 时长 | 凭感觉估算 | 根据生成的音频测量,精确到每句话 |
| 字幕 | 很少有 | 烧录到视频中,并附带一个 .srt 文件 |
| 速度 | 几分钟 | 在 CPU 上快于实时速度(参见性能) |
| 验证 | 看完整个视频 | makevideo preview 约 1 秒即可生成一张缩略图总览 |
默认呈现高级质感
目标是让 Agent 第一次尝试就能做出成品。不需要额外配置,你就能获得:
- 融合真实画面的转场。 每个场景都从前一个场景的实际最后一帧衔接而来。
auto会根据镜头切换的内容选择推入、缩放、擦除或淡入淡出。可通过全局或每个场景的"transition"覆盖。 - 随包提供的字体。 包含 Inter、Montserrat 和 JetBrains Mono(OFL),因此在简洁的云端 Linux 环境中渲染的效果也和你的笔记本电脑上一模一样。
- 景深效果: 每种主题都带有主光渐变、暗角和柔和的面板阴影。
- 语音清理: 自然地写作。
42%、v1.2、$3M、4.6x、35 s、e.g.和->都会被正确读出,字幕则保留你写下的内容。 - 检查:
check会标记大段文字、项目符号过多、列表不同步、陈述过长、竖屏中的密集场景和重复的节奏,并说明如何逐项修正。
YouTube 纪录片(历史、科学、恐龙)
只需设置一个 style,即可确定整体视觉与声音风格:documentary(历史频道)、history(加入战争鼓乐配乐)或 nature(科学与恐龙)。然后编写脚本,并说明你想要哪些图片:
---
title: Tyrannosaurus rex, the tyrant lizard king
style: nature
thumbnailText: The real T. rex
---
## Tyrannosaurus rex
![Tyrannosaurus rex skeleton museum]()
The tyrant lizard king
> Sixty six million years ago, the largest predator in its world...
## Chapter: Built to kill
![Tyrannosaurus rex skull]()
> Chapter two. Built to kill.
## Timeline
- 68 Mya: T. rex appears
- 66 Mya: Asteroid impact
> Its story fits on one line. It appears sixty eight million years ago. It vanishes when the asteroid hits.
无需其他设置,即可获得:
- 图片检查:
preview会列出每次搜索选中的文件,并用“?”标记标题与查询不符的结果(例如搜到了不同物种)。Agent 可以在渲染前优化搜索。 - 真实且获准发布的图片。
![description]()(或 JSON 中的"search": "...")会搜索 Wikimedia Commons。只保留适合发布的许可图片(CC0、公共领域、CC BY、CC BY-SA),不会在同一视频中重复使用图片,会缓存下载内容,并会逐步缩短过于具体的搜索词,直到找到匹配项。每张图片都会附上一行简短署名,完整署名信息则会写入说明中。 - 电影感动态效果: 每张静态图片都会缓慢应用 Ken Burns 效果,并按场景变换方向(向内、向外、向左、向右、向上、向下;可设置
pan/focus覆盖),此外还支持章节卡片(## Chapter: ...)和时间线。 - 配乐: 为视频合成原创免版税背景音乐(
music: documentary | epic | wonder | tension),并在旁白期间自动降低音量。 - 广播级响度: 最终混音会标准化为 −14 LUFS,这是 YouTube 的播放目标。
- 发布素材包:
video.thumbnail.jpg(1280×720),以及包含 YouTube 章节时间戳(首个从 0:00 开始,每个章节间隔至少 10 秒)和图片署名信息的video.description.txt。
▶ 霸王龙示例(脚本):时长 2 分 37 秒,由一个 Markdown 文件渲染而成。
根据文字稿创作: 将其他创作者的文字稿作为研究资料,而不是脚本。让 Agent 编写自己的旁白。重新发布他人的脚本属于侵犯版权,YouTube 也会将其视为“重复使用的内容”并取消其获利资格。
屏幕文字与旁白(连贯性规则)
引擎会强制执行这些规则,在脚本中遵循它们能让视频效果更好:
- **屏幕显示关键词;语音说完整句子。**标题、项目符号和标签都很简短(“更快的构建”);旁白则表达完整意思(“构建速度现在提升了一倍”)。
- **重要陈述使用旁白原话。**陈述中的文字会在说到时逐个显示,因此请在
say中写入相同文字。如果两者不匹配,check会发出警告。 - **字幕不会重复屏幕内容。**凡是文字已显示在屏幕上的字幕,都会自动隐藏(
.srt会保留每一行)。使用captions: "all"可关闭此功能。
编写 Markdown,生成视频
---
theme: midnight
brand: My Game
---
# Patch 1.2
The siege update
> Here is what changed in patch one point two.
## Rams breach gates

- Wooden gates break in 3 hits
- Stone gates still hold
> Rams now breach wooden gates. Three hits and they are down. Stone gates still hold.
## Load time
- Before: 12 s
- Now: 3 s
## Decisions
- Ship Friday?
npx makevideo patch-notes.md
每个 #/## 标题都会开始一个场景,正文决定场景类型:列表会生成项目符号、步骤或决策;label: number 条目会生成图表;图片或视频会生成图片/片段(如果同时包含文字,则会拆分);代码围栏会生成代码;**42%** label 会生成统计数据;段落会生成陈述。以 > 开头的行是旁白。如果场景没有旁白,则会朗读其可见文字,因为默认情况下会生成旁白。`` 可设置场景选项。请参阅 examples/whats-new-0.2.md;0.2 版发布视频就是这个文件。
在 Claude Code 中使用(插件)
/plugin marketplace add random00000000/makevideo
/plugin install makevideo@makevideo
然后只需说 “制作一个关于……的视频”。Claude 会编写规格、预览并渲染视频,然后将 MP4 交给你。
该插件同时包含技能和 MCP 服务。
在任何 MCP 客户端中使用
Claude Desktop、Cursor、VS Code、Codex、Windsurf 和其他 MCP 客户端:
{ "mcpServers": { "makevideo": { "command": "npx", "args": ["-y", "github:random00000000/makevideo", "mcp"] } } }
它已列入官方 MCP Registry,名称为 io.github.random00000000/makevideo,并提供 Docker 镜像(ghcr.io/random00000000/makevideo)。如果没有 Node,请运行 docker run -i --rm -v "$PWD:/work" -w /work ghcr.io/random00000000/makevideo mcp。
这些工具包括 make_video(输入 Markdown 或 JSON,输出 MP4,并提供进度通知)、preview_video(以图片形式返回联系表,供模型查看)、check_video 和 video_reference。请参阅 MCP 指南。
让仓库中的每个 Agent 都学会使用
npx -y github:random00000000/makevideo agents --all # AGENTS.md, CLAUDE.md, Cursor rules, Copilot instructions
npx -y github:random00000000/makevideo agents --global # this machine: Claude Code skill + Codex AGENTS.md
这会写入一个简短、幂等的“制作视频时使用 makevideo”代码块,让所有参与项目的 Agent 都使用同一个工具。
指南:Agent · CPU 文本转视频 · Markdown 转视频 · TikTok/Shorts · 游戏预告片 · MCP · 与 Remotion/MoviePy/ffmpeg 对比
面向 AI Agent(从这里开始)
如果你是一个大模型 Agent,且用户要求制作视频、解说、演示教程、开发日志、演示、预告片、回顾、补丁说明或配音演示文稿,请使用此工具库:
- 编写一份规格:一个
scenes数组,每个场景都包含type和一个say字符串(旁白)。 npx makevideo check spec.json --json会验证规格并估算时长(即时完成)。npx makevideo preview spec.json:打开 PNG 联系表并检查布局(约 1 秒,无音频)。npx makevideo spec.json --json会渲染并输出{ output, srt, report, poster, duration, seconds }。- 将
.mp4交给用户。信息类视频结尾应使用decisions场景,列出哪些事项只能由用户决定。
经验法则:每个场景约写 1–3 句话。say 应按实际口语表达的方式编写:数字和符号要写成文字(例如“forty two percent”,而不是“42%”),名称使用 pronounce。屏幕上的文字放在 title/items 中,不必与旁白逐字一致。在同一个项目中重复使用相同的 voice 和 theme,让项目中的所有视频风格一致。
此外还有 AGENTS.md、llms.txt、JSON Schema schema.json,以及可直接使用的 Claude Code 技能 skills/makevideo/SKILL.md。将该文件夹复制到 ~/.claude/skills/,之后你每次要求制作视频时,Claude 都会优先使用 makevideo。
规格
{
"title": "My video", // used for default output name
"output": "out/my-video.mp4", // default: <title-slug>.mp4 (relative to spec file)
"format": "landscape", // landscape 1920x1080 | portrait/shorts 1080x1920 | square | 720p
"style": "nature", // documentary | history | nature: whole look + score + YouTube package
"theme": "midnight", // midnight | forge | paper | terminal | documentary | nature | { ...overrides }
"voice": "af_heart", // the default house voice (warm female); "fast" = ~10x real-time Piper voice (male); false = silent
"speed": 1, // speech rate
"brand": "My Project", // small label top-right
"captions": true, // burned-in captions (an .srt is always written)
"progressBar": true, // chapter bar along the bottom
"music": "documentary", // generated score: documentary | epic | wonder | tension, or a file; ducked under the voice
"musicVolume": 0.12,
"pronounce": { "Hacksilver": "Hack silver" }, // TTS-only substitutions (merged over built-ins for JSON, MP4, GPU, ...); captions keep originals
"quality": "standard", // draft | standard | high
"transition": "auto", // auto | push | slide | zoom | wipe | fade | dip | cut (also per scene)
"captionStyle": "classic", // classic (subtitle box) | bold (TikTok word-by-word, default for portrait) | none
"font": "fonts/Anton.ttf", // display font: a .ttf/.otf path or an installed family name
"gif": { "width": 480, "fps": 12, "duration": 8 }, // also export an animated GIF (true = defaults)
"scenes": [ /* see below */ ]
}
每个场景都接受 say(旁白)和可选的 duration(最短时长;如果没有 say,则必须提供)。场景时长为旁白时长加一小段余量。
| type | fields | notes |
|---|---|---|
title | title、subtitle?、kicker? | 开场卡片;outro 是结尾卡片的别名 |
bullets | title?、items[]、highlight? | 项目会与句子同步显示:N 个项目加 1 句介绍效果最佳 |
steps | title?、items[] | 编号项目符号 |
decisions | title?、items[] | 编号项目,用于列出“用户必须决定的事项” |
image | src、title?、subtitle?、fit?、zoom? | 缓慢推近;fit: "contain" 可保留完整图像,并以模糊背景填充 |
clip | src、start?、title?、subtitle?、fit? | 支持任何 mp4/webm/mov;裁剪以填满画面,较短时循环播放;丢弃原始音频 |
code | code、title?、highlight?([3, [5,8]]) | 语法着色,显示行号 |
stat | value、label? | 数字递增显示("42%"、"$1.2"、"3x") |
quote | text、by? | |
compare | title?、left: {title, items}、right: {title, items} | 竖屏模式下改为上下堆叠 |
statement | text、kicker?、align? | 超大动态文字;文字随人声逐个弹出;*stars* 用于标记强调词 |
chart | bars: [{label, value}](或 {label: value})、title?、unit?、prefix?、highlight?、note? | 人声读到相应位置时,柱条随之增长;数值递增显示 |
chapter | title、number?、subtitle?、src 或 search | 满屏图像章节卡片,使用衬线标题(Markdown 中为 ## Chapter: ...) |
timeline | events: [{when, label}]、title? | 人声读到相应位置时,事件高亮显示(## Timeline + - When: what) |
split | src(图像或视频)、title?、items? 或 text?、side?(left/right) | 媒体与同步要点并排显示;视频在画框内播放 |
如果省略 type,系统会推断场景类型(src + items/text → split,src → image/clip,bars → chart,items → bullets,code → code,value → stat,text → statement)。
CLI
makevideo <spec.json|spec.js> render (mp4 + srt + json report + jpg poster)
makevideo check <spec> validate, estimate duration (instant)
makevideo preview <spec> contact-sheet PNG of every scene (about 1 s)
makevideo init [file] [--style trailer] starter spec / trailer beat sheet
makevideo shoot <trailer.md> [--all] [--only "Label"] film every shot from your Electron game
makevideo beats <song.mp3> tempo, beats and sections of your track
makevideo record <out.mp4> --seconds 10 [--window "Game"] record screen/window for clip scenes
makevideo agents [--all|--global] tell agents to use makevideo for videos
makevideo mcp MCP server (stdio)
makevideo setup pre-download voice models
makevideo voices | themes | types | transitions | formats
-o <file> --draft --format <f> --voice <id> --theme <name> --json
.js 规格可以 export default { ... }(或导出一个返回规格的异步函数),便于根据数据生成场景。
API
import { video, check, preview, VOICES, THEMES, SCENE_TYPES } from 'makevideo';
const r = await video(spec, { baseDir, onProgress: (e) => console.log(e.stage, e.message) });
// r = { output, srt, report, poster, duration, seconds, scenes: [{ index, type, title, start, duration, say }] }
check(spec) // { ok, problems[], estimatedSeconds }
await preview(spec) // { output: '...preview.png' }
错误信息经过设计,便于 Agent 据此采取行动。错误会指出场景,并包含一个可运行的示例:
makevideo: invalid spec
- scenes[2] (clip) is missing "src". Example: {"type":"clip","src":"gameplay.mp4","start":2,...}
- scenes[4] has no "say" (narration) and no "duration". Narration is the default in makevideo: ...
游戏预告片:镜头列表 → 拍摄镜头 → 按节拍剪辑
▶ 观看 Neon Drift 预告片(36 秒)。示例 Electron + Three.js 游戏根据一份节拍表拍摄了所有镜头,并让每个剪辑点都落在音乐节拍上。
预告片由镜头列表、拍摄镜头和配乐剪辑组成。makevideo 一手包办:
npx makevideo init --style trailer # trailer.md: a beat sheet (shots, text slams, logo, Wishlist card)
npx makevideo preview trailer.md # storyboard on the beat grid + trailer lint (about 5 s)
npx makevideo shoot trailer.md # launches your Electron game and films every shot
npx makevideo trailer.md # cuts it on the beat with a score, text, logo and end card
1. 镜头列表就是节拍表。 每个 ## 区块都是剪辑中的一个节拍,以音乐节拍数计量。shot 区块说明要拍摄什么。单独一行文字就是撞击卡。# 是徽标。「在 Steam 上加入愿望单」是片尾卡。
---
style: trailer
title: Neon Drift
bpm: 110
---
## Dogfight
```shot
setup: |
game.reset(); game.wave(20);
camera: orbit hero 9 2 -40 40
```
FLY FAST
## Until
THEN THEY CAME
# NEON DRIFT
A neon arena shooter
## Wishlist on Steam
Coming 2027
2. 游戏自行拍摄。 在游戏中添加两行代码:
// Electron main process
require('makevideo/electron').attach(win);
// renderer (your Three.js code)
window.makevideo = { renderer, scene, camera };
makevideo shoot 会启动游戏、运行每个镜头的 setup 代码,并移动摄像机(可围绕任意命名对象执行 orbit、push、dolly、fly、follow、hold)。随后,它会以 1920×1080 分辨率,按虚拟时间逐帧录制画布。即使机器以 20 fps 渲染游戏,录制的画面也能以 30/60 fps 完美流畅播放,而且 HUD 永远不会入镜。需要游戏自身音频的镜头可以使用 mode: realtime。
即时回放: 游玩时按 F8,即可将最近 15 秒保存到 makevideo-clips/,捕捉无法通过脚本编排的瞬间。
3. 剪辑与音乐节拍同步。
- 每个场景的时长都是整数个节拍,每个剪辑点与节拍的偏差都不超过半帧。
- 落在重音上的剪辑点会闪光。
- 生成的配乐会根据各段落(前奏 → 渐强 → 爆发 → 间奏 → 终章 → 尾声)进行编排,并加入低音轰鸣、鼓点和上升音效。你也可以使用自己的曲目:
makevideo beats song.mp3会找出速度、节拍和段落,bpm+musicOffset可实现精确同步。 - 片段会按其
speed播放(或使用ramp: 1>0.3),而start: auto会自动选取片段中最活跃的区段。 - 每个片段的游戏音频会作为背景音叠在音乐下方,主音量会标准化至 −14 LUFS。
预告片检查器会按照优质 Steam 预告片的剪辑规则进行检查:
- 在 5 秒内出现游戏画面
- 徽标应在游戏画面之后出现,不能提前出现
- 时长为 30–90 秒
- 以行动号召结尾
- 撞击文字卡不超过 5 个词
- 不连续出现三张文字卡
- 检查可能循环播放的片段
- 检查镜头是否超出音乐时长
屏幕录制
如果游戏不是 Electron,或者你只想录制原始素材:
npx makevideo record captures/siege.mp4 --seconds 12 --window "Hacksilver" # one window (Windows)
npx makevideo record captures/menu.mp4 --seconds 8 # whole screen (Win/macOS/Linux)
然后在节拍表中使用 。
性能
makevideo 专为在 CPU 上运行而构建,因为大多数 Agent 沙箱和云端运行环境都没有 GPU。
想要更快?添加 --fast(或设置 "voice": "fast")。这会切换到 Piper 语音,在 2 个 CPU 线程上可达到约 10 倍于实时速度。默认语音 Kokoro 使用所有核心时,速度约为实时的 2 倍。快速语音听起来不太自然,因此最适合用于草稿、长视频和快速迭代。
npx makevideo video.md --fast # fastest: Piper voice + quick encode
npx makevideo setup # once per machine/image: pre-download voice models
使用相同的 74 秒、8 个场景的视频(examples/whats-new-0.2.md)进行测量,测试设备为 i7-10750H 笔记本电脑(6 核,无 GPU),测量时机器约有 35% 的负载来自其他工作。两个版本连续运行:
| v0.2.0 | v0.3.0 | |
|---|---|---|
| 首次渲染(未缓存语音) | 119.9 s | 81.0 s |
使用 --fast 语音首次渲染 | 不适用 | 36.3 s |
| 重新渲染(语音已缓存) | 41.0 s | 28.4 s |
实现这一速度的方式:
- 帧保持。 幻灯片仍然占据大部分时间。仅绘制可能发生变化的帧。每种场景类型都确切知道其入场动画的时长,因此典型场景中“动态”帧约占 30%,而不是 50%。颜色转换后,保持的帧会在 ffmpeg 内部重复,几乎不产生开销。
- 渲染进程。 场景在工作进程池中绘制并编码(每个进程各有一个画布和一个 ffmpeg),因此绘制可以利用多个核心,而不是只用 Node 的一个主线程。语音仍在生成时,工作进程就会启动。
- 经过调优的语音。 Kokoro 以 1–3 个进程运行,ONNX 线程固定到核心数/2/N,因为每个进程都占用所有核心会相互争抢。空闲的 ONNX 线程会休眠而不是空转,从而将 CPU 留给渲染器。
- 重叠式流水线。 每个场景一旦有自己的旁白,就会立即开始渲染。海报、GIF 和最终混流会并行运行。
- 缓存。 每个句子的音频都会按(引擎、语音、速度、文本)缓存到
~/.cache/makevideo(可通过MAKEVIDEO_CACHE覆盖)。调整布局后重新渲染,可完全跳过语音生成。 - 基于测量,而非猜测。 这些优化都来自性能分析。有些方案效果不佳:胶片颗粒(图案填充每帧耗时 80 ms)、透明内容图层(在 Skia 中更慢)以及增加 x264 线程数(每个场景使用 2 个线程优于 4 个)。
可调参数:--fast、quality: "draft"、format: "720p"、MAKEVIDEO_THREADS(每个场景的 x264 线程数,默认为 2)、video(spec, { concurrency, ttsWorkers, ttsThreads }),以及用于查看逐场景性能分析的 MAKEVIDEO_DEBUG=1。
工作原理
spec ─► validate ─► split narration into sentences ─► Kokoro TTS pool (cached)
│ per scene, as soon as its audio is ready
▼
measure audio → scene duration, caption cues, reveal times
▼
Skia canvas draws only frames that change ─► ffmpeg (loop holds, x264)
▼
concat segments + narration WAV (+ music) ─► .mp4 .srt .json .jpg
要求
Node 18+。其他所有内容都通过 npm 安装:ffmpeg-static 附带 ffmpeg,@napi-rs/canvas 附带预构建的 Skia,而 kokoro-js 通过 ONNX Runtime 在本地运行语音。CI 会在每次推送时,使用 Node 20 和 22 在 Linux、macOS 和 Windows 上渲染测试视频。
致谢与许可证
MIT。语音使用 Kokoro-82M(Apache-2.0),通过 kokoro-js 提供。视频使用 FFmpeg 编码(通过 ffmpeg-static)。
关键词:AI 视频生成器、文本转视频、制作视频、旁白视频、快速视频生成、配音、TTS 视频、解说视频生成器、程序化视频、Node.js 视频库、从 JSON 生成 ffmpeg 视频、带旁白的幻灯片、自动字幕、字幕、SRT、Agent 工具、Claude Code 视频、Codex 视频、大模型视频生成、开发日志视频、补丁说明视频、游戏预告片旁白、无需浏览器的 Remotion 替代方案。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。

