Finance Data Analysis
AI驱动的财务分析与可视化工具,支持KPI追踪与自动化报告生成。
通过代码生成带语音的动画视频,支持多种转场效果和自动渲染。
openclaw skills install @etrobot/code2animation命令、参数、文件名以原文为准
一个全面的视频编辑与渲染技能,使 AI 代理能够创建基于代码的动画,包含文本转语音旁白和流畅的转场效果。
此技能允许代理实现以下功能:
请参阅 public/projects/agentSaasPromoVideo.json 获取完整示例,演示所有转场类型及 stayInClip 行为。
此技能执行以下 shell 命令:
npx tsx scripts/generate-audio.ts <projectId>node scripts/render.js <projectId> [--portrait]ffmpeg -framerate 30 -i frames/frame-%05d.jpg -c:v libx264 ...ffmpeg -i video.mp4 -i audio1.mp3 -i audio2.mp3 -filter_complex ...which 命令在 Linux/macOS 上查找 Chrome/ChromiumPUPPETEER_EXECUTABLE_PATH 环境变量设置该技能可暴露一个 HTTP 端点用于 TTS 生成:
POST /api/tts
Content-Type: application/json
{
"text": "要朗读的文本",
"voice": "en-US-GuyNeural",
"rate": "+0%",
"pitch": "+0Hz"
}此端点为可选功能,仅在未预先生成音频文件时使用。
public/projects/<projectId>/public/projects/<projectId>/audio/、public/video/execSync 执行:浏览器检测、音频生成触发可选配置:
PUPPETEER_EXECUTABLE_PATH:自定义 Puppeteer 使用的浏览器路径FASTMCP_LOG_LEVEL:日志级别(默认值:ERROR)public/
projects/
<projectId>/
<projectId>.json # 项目配置文件
footage/ # HTML/CSS 媒体组件
audio/ # 生成的 TTS 音频文件
0.mp3, 1.mp3, ...
0.json, 1.json, ... # 词级时间标记文件
video/
render-<projectId>-landscape.mp4
render-<projectId>-portrait.mp4pnpm generate-audio agentSaasPromoVideo
pnpm dev
pnpm render agentSaasPromoVideo
pnpm render agentSaasPromoVideo --portrait
在创建用于视频渲染的 HTML 动画时,请使用 CSS 变量时间线 模型。
--t。DOM = f(t)。play/start/reset)和隐藏的运行时状态。transitionIn 属性。:root { --t: 0; }--t。--p: clamp(0, calc((var(--t) - var(--start)) / var(--duration)), 1);t 获取字幕或文本索引)。transitionanimation / @keyframeswindow.registerFrameAnimation(...)requestAnimationFrame 循环推进时间线Date.now() / performance.now() 隐式获取时间以控制视觉状态transitionInopacity: var(--p) 而非 opacity: calc(var(--p) * (1 - var(--fade))),以确保元素在最终状态仍可见。.element {
--start: 0.5;
--duration: 1;
--p: clamp(0, calc((var(--t) - var(--start)) / var(--duration)), 1);
opacity: var(--p);
transform: translateY(calc((1 - var(--p)) * 20px));
}直接在进度上使用数学计算:
--p: clamp(0, calc((var(--t) - var(--start)) / var(--duration)), 1);
--ease-out: calc(1 - (1 - var(--p)) * (1 - var(--p)));
opacity: var(--ease-out);<script>
const labels = ['A', 'B', 'C'];
const el = document.getElementById('label');
window.onTimelineUpdate = (t) => {
const idx = Math.floor(Math.max(0, t) / 1.2) % labels.length;
el.textContent = labels[idx];
};
</script>t 与 globalTime)onTimelineUpdate(t, globalTime) 支持两个时间域: - t:片段本地时间(当片段切换时重置为 0)。这是大多数 HTML 动画的默认选择。
- globalTime:跨片段连续的时间线。仅当元素需要在跨片段切换时保持连续性时使用。
t 是媒体本地时间。如果媒体在片段中间出现,其首次可见时 t 可能已经较大。globalTime 锚定,并推导: - local = globalTime - mediaStartGlobalTime
window.onTimelineUpdate = (t, globalTime) => {
const g = Number.isFinite(globalTime) ? globalTime : t;
// 一般动画使用 `t`,仅在需要连续性时使用 `g`
};t 都应产生唯一且确定的帧。t = totalDuration)必须停留在最后一个片段上(不循环回第一个片段)。此技能会执行 shell 命令并启动子进程进行视频渲染。所有操作均限于以下范围:
不会执行任意代码或传递用户输入至 shell 命令。所有文件路径和命令均为预定义并经过验证。
已收录 1 个 Skill