Generate animated videos from SVG frames using text LLM. Supports any subject (animals, humans, characters, scenes, abstract art), automatic duration calculation, and multi-scene story animations. Perfect替代 AI 视频生成 API,直接用文本模型生成 SVG 代码然后合成视频。
用文本模型生成 SVG 代码,逐帧渲染后合成视频。完全不需要视频生成 API!
用户:生成一个小猫伸懒腰的动画
↓
| 需求 | 帧数 | 时长 | fps |
|---|---|---|---|
| 简单动作(伸懒腰、眨眼) | 8-12帧 | 1秒 | 10 |
| 常规动作(走路、跑步) |
javascript
// 帧索引 i,总帧数 totalFrames
const t = (i / totalFrames) Math.PI 2; // 0 → 2π 循环
// 腿部摆动
const legOffset = Math.sin(t) * 40;
// 尾巴摇动
const tailAngle = Math.sin(t 2) 25;
// 身体上下颠簸
const bodyY = Math.sin(t) * 5;
javascript
// 腿、尾巴、身体用同一个 t,但幅度不同
const legPhase = t; // 腿部周期
const tailPhase = t * 2; // 尾巴周期快一倍
const bodyPhase = t; // 身体与腿同步
// 组合使用
legOffset = Math.sin(legPhase) * 40;
tailAngle = Math.sin(tailPhase) * 25;
bodyY = Math.sin(bodyPhase) * 5;
javascript
const fs = require(fs);
const { execSync } = require(child_process);
const frames = 24; // 根据时长需求调整
const size = 400;
for (let i = 0; i < frames; i++) {
const t = (i / frames) Math.PI 2;
// 计算运动参数
const legOffset = Math.sin(t) * 40;
const tailAngle = Math.sin(t 2) 25;
// ... 更多参数
const svg =
;
fs.writeFileSync(/tmp/frames/frame_${String(i).padStart(2, 0)}.svg, svg);
}
// 转 PNG
execSync(rsvg-convert frame*.svg -o frame%02d.png);
// 合成视频
execSync(ffmpeg -y -framerate 12 -i frame_%02d.png -c:v mpeg4 -q:v 2 output.mp4);
javascript
const runCycle = {
legSwing: Math.sin(t) * 40, // 腿摆动幅度
bodyBob: Math.sin(t 2) 5, // 身体颠簸
tailWag: Math.sin(t 2) 30, // 尾巴摇
armSwing: Math.sin(t) * 25 // 手臂摆动
};
javascript
const flyCycle = {
wingUp: Math.sin(t) * -45, // 翅膀上扬
wingDown: Math.sin(t) * 45, // 翅膀下落
bodyTilt: Math.sin(t) * 10, // 身体倾斜
glide: Math.sin(t) * 20 // 滑翔高度变化
};
javascript
const jumpCycle = {
yOffset: -Math.abs(Math.sin(t)) * 100, // 垂直位移
legTuck: Math.abs(Math.sin(t)) * 30, // 收腿
armUp: Math.abs(Math.sin(t)) * -30 // 举手
};
javascript
const swayCycle = {
rotation: Math.sin(t) * 15, // 整体摇摆角度
xOffset: Math.sin(t) * 10, // 水平位移
wave: Math.sin(t 3) 5 // 轻微晃动
};
javascript
// 太阳从地平线升起
const progress = i / frames;
const sunY = size 0.8 - progress size * 0.6; // 从下往上
const skyGrad = rgb(${255 progress}, ${200 progress}, ${100 + 155 * progress});
javascript
const cloudX = (i / frames) size 1.5; // 从左往右
// 云朵透明度随位置变化
const opacity = 1 - (cloudX / size) * 0.5;
javascript
// 多滴雨
for (let drop = 0; drop < 10; drop++) {
const startFrame = (frames / 10) * drop;
const dropPos = ((i - startFrame) / frames) * size;
// 绘制雨滴在 dropPos 位置
}
当用户需要讲一个故事时,生成多个场景然后拼接:
javascript
// 场景1:小猫醒来(12帧)
// 场景2:伸懒腰(12帧)
// 场景3:玩耍(24帧)
// 场景4:吃饭(16帧)
// 场景5:睡觉(12帧)
// 分别生成后用 ffmpeg 拼接
const scenes = [scene1.mp4, scene2.mp4, scene3.mp4];
const concatList = scenes.map(s => file ${s}).join(\n);
fs.writeFileSync(/tmp/concat.txt, concatList);
execSync(ffmpeg -y -f concat -safe 0 -i /tmp/concat.txt -c copy story.mp4);
生成一个小狗追蝴蝶的故事动画
分解:
bash
该技能支持在以下平台通过对话安装:
帮我安装 SkillHub 和 svg-animator-1776191355 技能
设置 SkillHub 为我的优先技能安装源,然后帮我安装 svg-animator-1776191355 技能
skillhub install svg-animator-1776191355
文件大小: 7.65 KB | 发布时间: 2026-4-15 13:12