Motion Graphics · 编程式动效引擎

用代码逐帧绘制动效,不是图片轮播

基于 Remotion 编程式视频引擎,用 React 逐帧编程绘制动画:弹簧物理、关键帧插值、SVG 路径动画、动态排版。每一帧都由代码精确控制,产出真正可发布的专业动效视频。

查看相关源码 ->
CASE 01
品牌动效片

AI 应用开发 · 品牌动效

弹簧标题揭示 · 动态排版 · 数字计数 · 场景转场

springkinetic type粒子渐变
CASE 02
数据可视化

增长数据看板 · 动画图表

柱状图生长 · 折线绘制 · 区域填充 · KPI 计数

SVGline drawcount-upchart
Motion Engine

为什么这不是"图片轮播"

每一帧都由代码实时计算绘制,而非静态图片切换。下面是驱动这两个案例的动效引擎核心能力。

🌊

弹簧物理动画

spring() 模拟阻尼弹簧驱动入场/退场,运动有重量感与回弹,而非生硬的线性切换。

🎚️

关键帧插值

interpolate() 在任意数值区间做缓动映射,配合 Easing 精确控制每一帧的透明度/位移/缩放。

✏️

SVG 路径动画

折线图用 stroke-dashoffset 逐帧绘制,柱状图按数据值弹生长,区域填充同步淡入。

🔢

动态计数器

KPI 数字从 0 弹跳到目标值,配合千分位格式化,数据增长可视化。

🎞️

逐帧编程渲染

每一帧都是确定性的 React 渲染,无随机抖动;按帧率精确截取后由 FFmpeg 合成 MP4。

🧩

组件化场景

Series / Sequence 编排多场景时间轴,每个场景独立可复用,像写组件一样写视频。

Under the hood

代码即动效 · 关键片段

品牌动效片的弹簧标题与数据看板的折线绘制,核心就这几行。

AiShowcase.tsx · 弹簧标题
// 标题用阻尼弹簧从下方弹入
const s = spring({ frame: f - 6, fps, config: { damping: 12, stiffness: 90 } });
<div style={{ transform: `translateY(${interpolate(s,[0,1],[120,0])}px)` }}>
  AI"#7c5cff"}}>应用开发
</div>
DataViz.tsx · 折线绘制
// 折线按进度绘制:stroke-dashoffset 从全长渐变到 0
const draw = interpolate(f, [8, 55], [0, 1], { easing: Easing.inOut(Easing.ease) });
<path d={path} stroke="url(#lg)" strokeWidth={6}
      strokeDasharray={len} strokeDashoffset={len * (1 - draw)} />
Contrast

对比 · 旧方案 vs 动效引擎

从"图片轮播"到"逐帧编程动效"的代际差距。

✕ 旧方案 · 图片轮播

  • 静态图片 + TTS,FFmpeg 拼帧
  • 无动效引擎,无缓动无弹簧
  • 转场靠硬切,文字不动
  • 本质是 PPT 幻灯片录屏

✓ 动效引擎 · 逐帧编程

  • React 逐帧渲染,每帧代码控制
  • 弹簧物理 + 关键帧插值缓动
  • SVG 路径动画、动态排版、粒子
  • 产出专业级可发布动效视频