Communitygithub.com

Ledsav/video-editing

根据提示创建动态设计视频——解说、推广、动态排印、Logo展示、片头片尾、数据/信息图动画、3D场景、照片蒙太奇、社交媒体广告——完全使用HTML/CSS/SVG/Canvas/WebGL设计,结合GSAP、Lottie和three.js,以帧精确的方式渲染为视频,并与音乐、节拍同步和过渡效果进行编辑。也适用于将设计的场景与真实素材混合。当用户请求动态图形、动画视频、动画、片头/片尾、歌词或动态文字视频、动画信息图或“动态设计”作品时使用。

video-editing 是什么?

该技能是一个AI驱动的动画设计工具,能够根据文本提示生成完整的动态设计视频。它采用HTML/CSS/SVG/Canvas/WebGL技术栈,结合GSAP、Lottie和three.js等库,实现纯函数时间驱动的动画系统,确保渲染的确定性和帧精确性。技能支持包括动态排印、Logo展示、数据可视化、3D场景、照片堆叠等多种场景模板,并允许将设计的场景与真实视频素材混合编辑。工作流程包括概念确定、风格框架设计、分镜脚本、场景构建、预览和最终渲染,并内置了丰富的设计原则和最佳实践指南。该技能适用于Claude Code、Cursor、Codex等AI Agent平台,通过自然语言指令即可驱动完整的视频制作流程。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Ledsav/video-editing/tree/HEAD/.claude/skills/motion-design

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

动态设计

你是艺术总监、设计师和动画师。此处的动态设计视频是一种编辑规范,其剪辑片段为HTML场景("scene": "<template>" 或 "html": "scenes/x.html"),并可选择性地与素材混合。其他所有内容(音乐、节拍同步、过渡、文字、调色、导出)与 video-edit 技能中的工作方式完全相同(请阅读其 references/edit-spec.md)。

渲染是确定性的:每一帧都通过将页面定位到时间 t 来生成(mograph/lib/runtime.js),因此动画必须是时间的纯函数。

工作流程

  1. 简报 → 概念(用几句话向用户说明):信息、受众、平台(16:9 / 9:16 / 1:1)、时长、基调、2-3个参考形容词(如“瑞士、粗体、动感”)。
  2. 首先确定风格框架:决定调色板(3-4种颜色 + 一个强调色)、字体组合(一个展示字体 + 一个正文字体)、网格/边距、形状语言。将其写在规范的 brief 顶部。
  3. 以场景为单位制作分镜:3-8个场景,每个场景一个想法,时长2-6秒。根据音乐(使用 bin/vedit beats 得到的节拍/强拍)编写带有时间标记的场景列表。
  4. 构建场景:从模板开始(bin/vedit templates,类型为 scene),并通过 params 进行自定义,或者在 projects/<name>/scenes/ 目录下编写新页面(复制模板)。保持每个场景自包含;通过 params 传递内容。
  5. 每次更改后审查静态帧:bin/vedit mograph preview <scene> --params '{...}' --times 0.3,1,2,3.5 并阅读图像。检查层级、间距、可读性、时间安排、安全边距和颜色。
  6. 在 edit.json 中组装,使用 bin/vedit plan、bin/vedit storyboard、bin/vedit render --preview,检查每个剪辑点周围的帧,进行修复,然后进行最终渲染。

场景契约(自定义页面)

<meta name="vedit:kind" content="scene">          <!-- 全屏,不透明:快速渲染(JPEG帧,H.264编码) -->
<meta name="vedit:duration" content="5">
<meta name="vedit:libs" content="gsap,lottie,three"><!-- 仅使用你需要的库;所有库均为离线 -->
<script>
  const P = VM.params({ title: 'Hello' });          // 规范参数会覆盖这些默认值
  // 选项A:GSAP。在加载时构建时间线;渲染器会定位(暂停的)全局时间线。
  const tl = gsap.timeline();
  tl.from('.title .ch', { yPercent: 110, stagger: 0.03, duration: 0.6, ease: 'expo.out' }, 0.2);
  // 选项B:时间的纯函数
  VM.onFrame((t) => { el.style.transform = `scale(${VM.spring(t, 0.4)})`; });
  // 异步设置(three.js,图片,Lottie JSON):将一个Promise赋值给 VM_READY
  window.VM_READY = (async () => { const THREE = await import(VEDIT.libs.three); /* ... */ })();
</script>
  • 单位:仅使用 vw/vh/vmin,使得一个场景能够渲染为1920×1080、1080×1920和1080×1080。 对于竖屏,根据 innerHeight > innerWidth 进行布局分支。
  • 切勿使用定时器、Date.now()、rAF循环或 Math.random();请使用 VM.rand(seed)、VM.noise。
  • Lottie:lottie.loadAnimation({container, path: P.animation, autoplay: false, renderer: 'svg'}); 每个注册的动画会自动定位。参数中的路径相对于编辑文件解析。
  • three.js:new THREE.WebGLRenderer({ preserveDrawingBuffer: true, alpha: true }) 并在 VM.onFrame 内部进行渲染。WebGL 使用软件渲染:保持几何体适中(< ~30万三角形)。
  • 叠加层(非全屏)省略 vedit:kind scene;它们会带有Alpha通道进行渲染(请参阅video-edit技能)。

运行时辅助函数(VM):params、duration、prog、tween、env、keys(关键帧)、spring、stagger、split(字符/单词)、draw(SVG线条绘制)、count(数字计数器)、mix(颜色)、rand、noise、ease.* 以及音乐同步:beats(秒,相对于场景)、beatIndex(t)、pulse(t)。详细信息和示例:references/recipes.md。

场景模板

模板描述
scene_kinetic动态排印,线条在节拍上落地,色块擦除,最终组合(GSAP)
scene_stats在带有标签的圆环中计数的计数器(数据/回顾)
scene_logo_reveal字标轮廓绘制、填充、圆环轨迹、光效扫过、标语
scene_3d_mountainsthree.js 低多边形景观飞越,金色时刻,带标题
scene_photo_stack照片飞入形成3D堆叠,带手写说明文字

来自 video-edit 技能的叠加层模板(标题、下方三分之一、过渡)同样适用于场景。

设计原则(每次都要应用)

  • 每个场景一个想法,每帧一个焦点。通过大小和对比度建立层次,而不是通过添加元素。
  • 时间安排:入场0.4–0.8秒,退场更快(0.25–0.4秒),可读文本保持显示时间 ≥ 1秒 + 每个单词0.3秒。 交错间隔25–80毫秒。在节拍上动画入场;让大幅动作落在强拍上。
  • 缓动:入场使用 expo.out/outExpo,退场使用 expo.in,状态间移动使用 inOutCubic, 物理/趣味效果使用弹簧。线性缓动只用于恒定漂移。
  • 连续性:在剪辑切换处延续一个元素、颜色或方向(匹配剪辑),使场景流畅衔接; 在连续场景之间变化幅度和节奏。
  • 字体:最多两种字族;展示字体使用紧凑行距(0.85–0.95);小型大写字母使用宽松字距; 确保文字在水平7% / 垂直9%的安全边距内(竖屏:避免底部18%区域)。
  • 颜色:一个主中性色,一个次要色,一个强调色(少量使用以突出重点)。
  • 质感/精致度:细微颗粒感,通过交错/滤镜实现的运动模糊,以不同速度运动的视差层。
  • 克制:没有不必要的故障效果、镜头光晕或不服务于信息传达的视觉特效。

与素材混合

场景和素材剪辑片段位于同一个 timeline 中。素材保持其连续调色;场景保持其精确颜色(在场景中添加 "graded": true 以跟随调色弧线)。在场景中使用素材自身的静态帧:bin/vedit frames media/x.mp4 --times 3.2 --out scenes/img,然后在 params.images 中传递路径。

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

相关技能