Motion · Intro

Cần cẩu nâng lộ toàn cảnh

Reveal kiểu cần cẩu kéo lên — mở đầu áp sát cận cảnh một dòng dữ liệu, rồi camera giảm tốc nâng lên và lùi ra, từng dòng nội dung ùa vào đến khi cả dashboard phủ kín khung hình.

1920×108016:930 fps5.06s · 152 frameremotionGiấy phép: Apache-2.0#shotcraft#remotion#intro#opening#camera#data

Nguồn: video-shotcraft (Vincent Wei) ↗ · Apache-2.0 · Composition Remotion (React/TSX) — có video preview, không có player trong trình duyệt

Khi nào dùng

Mở đầu định cảnh kiểu "từ chi tiết ra toàn cục"; nghịch đảo của drone-dive-landing (toàn cục → bổ nhào một điểm).

Ý đồ

Thư viện mở đầu định cảnh đã có drone-dive-landing — bổ nhào từ góc nhìn thượng đế xuống cận cảnh hero, "toàn cục → tiêu điểm". Thẻ này là ảnh gương của nó: "tiêu điểm → toàn cục" — trước tiên áp sát vào một dòng dữ liệu thật để người xem hiểu rõ "đây là gì", rồi cần cẩu nâng lên lùi ra, hàng loạt nội dung ùa vào khung hình, cuối cùng cả sản phẩm phủ kín — "dòng bạn vừa thấy chỉ là một ô của cả bức tường này". Phù hợp cho mở đầu lấy quy mô sản phẩm/độ phong phú nội dung làm điểm bán; nếu cả hai thẻ cùng xuất hiện trong một phim thì chỉ dùng một chiều.

Thời lượng & năng lượng

  • Thời lượng: 5s (giữ cận cảnh 20f + nâng lên 100f + giữ toàn khung 30f).
  • Năng lượng: Trung bình cao (chuyển động một chiều liên tục, không có điểm va chạm).

Công thức cảnh quay (bản gốc tiếng Trung — timing, easing, bảng tham số, lỗi hay gặp)

意图

开场定场库内已有 drone-dive-landing——从上帝视角砸进 hero 特写, "全局→焦点"。本卡是它的镜像:"焦点→全局"——先怼在一行真实数据上 让观众看清"这是什么",再升降臂式拉升后退,一排排内容涌入画面, 最后整面产品铺满——"你看到的这一行,只是这一面墙的一格"。 适合以产品体量/内容丰富度为卖点的开场;两卡同片只用一个方向。

动效核心

  • transform-origin 固定左上,联动公式 translate = 屏幕中心 − 对准点×scale;

对准点沿 (底行中心)→(页面中心) 与 scale 3.2→1.0 共用同一条 Easing.out(quad) 进度——一条 p = 一台相机一次机动(同 C 式判例)

  • 减速曲线(先快后慢)是"升降臂"的手感:起步有劲、临顶缓停
  • 逐行脉冲:相机可见区上缘 visTop = fy − 540/s 首次越过某行顶边时,

该行深灰脉冲一拍(4f 起 18f 落,G.ink 叠层 opacity 0→0.22→0)—— "涌入"的可读性来源;触发帧逐帧解出,与运镜严格同步

  • 白底上"提亮"不可见,加深才可感(本批实渲判例:brightness 提亮

在白卡上等于没做,改深色叠层脉冲)

参数表

| 参数 | 典型值 | 调节手感 | |------|--------|----------| | 起点特写 | scale 3.2,对准最底行(一行占满画幅) | hold ≥20f 让"这是一行数据"可读再起飞 | | 拉升 | 100f Easing.out(quad),scale 3.2→1.0 | 快于 80f 行脉冲追不上;慢于 130f 中段拖 | | 行脉冲 | 越线触发,0→0.22→0 深色叠层 22f | 脉冲跟不上相机(固定间隔触发)立刻穿帮 | | 收尾 | 满幅后真静止 ≥30f | R1;满幅帧即标准构图,不再补推 |

已知坑

  • demo 在灰阶/占位素材上调校通过——参数是调校起点非实战定稿,

首次实战须以真实素材回验

  • 起点特写 = 一行内容被放大 3.2 倍盯着看,真实素材先过

审美准则 Q2 的高分辨率栅格化技法,低倍截图开场即糊

  • 快速拉升段可包 CameraMotionBlur(参数见 deck-deal-flyin 运动模糊行),

但只包前半程快速段——临顶慢速段包了会抹软文字(轮 #8 判例)

  • 与 drone-dive-landing 同片不并用(一升一降互为镜像,观众读作同一招);

与 crane 语义最近的 tilt-reveal 未入库,别混称

参考实现

demos/opening/crane-rise-reveal/ (CraneRiseReveal.tsx)

Mã nguồn tham chiếu (Remotion)

  • demos/opening/crane-rise-reveal/CraneRiseReveal.tsx — https://raw.githubusercontent.com/Vincentwei1021/video-shotcraft/main/demos/opening/crane-rise-reveal/CraneRiseReveal.tsx

Component import fixture chung từ demos/_fixtures và helper từ assets/lib của repo; xem SKILL.md trong repo để biết quy trình render.

Mọi thứ trên trang này đều có bản máy đọc. Đưa agent link JSON, hoặc thêm MCP server gimgs rồi bảo nó tìm motion template.

  1. Tải JSON — trong đó có công thức cảnh quay (timing, easing, bảng tham số, lỗi hay gặp) và toàn bộ source TSX.
  2. Clone repo video-shotcraft; component import fixture chung từ demos/_fixtures và helper từ assets/lib.
  3. Đăng ký component thành <Composition> trong project Remotion rồi render bằng `npx remotion render`, hoặc dựng lại công thức bằng engine của bạn.
curl -s https://gimgs.net/motion/crane-rise-reveal.json
git clone https://github.com/Vincentwei1021/video-shotcraft
# component: demos/opening/crane-rise-reveal/CraneRiseReveal.tsx
npx remotion render <CompositionId> out.mp4
claude mcp add --transport http gimgs https://gimgs.net/mcp
# then: search_motion_templates / get_motion_template("crane-rise-reveal")

Prompt

Use the video-shotcraft shot recipe "Cần cẩu nâng lộ toàn cảnh" (Remotion composition, Apache-2.0) published on gimgs.net.
Recipe JSON (prompt = timing/easing/parameter table/pitfalls, files = TSX source): https://gimgs.net/motion/crane-rise-reveal.json
Raw TSX: https://gimgs.net/motion/crane-rise-reveal/template.html
Repository: https://github.com/Vincentwei1021/video-shotcraft  (component: demos/opening/crane-rise-reveal/CraneRiseReveal.tsx; imports demos/_fixtures and assets/lib)
Spec: 1920x1080, 30 fps, 5.06s

1. Read the JSON and follow its "prompt" section (when to use, intention, parameter table, known pitfalls).
2. Adapt it for: <describe what you want>.
3. Either clone the repo, register the component as a <Composition> in a Remotion project and run npx remotion render <CompositionId> out.mp4 — or re-implement the recipe in your own engine (HTML/WAAPI works: keep the same timing and easing).

JSON · Markdown · llms.txt

2,802 chars · Apache-2.0Mở template gốc ↗
// ===== demos/opening/crane-rise-reveal/CraneRiseReveal.tsx =====
// 升降臂拉升揭示(crane-rise-reveal)——crane shot。
// 世界 = FakeDashboard(B) 五行列表。相机 transform-origin 左上,联动公式:
// translate = 屏幕中心 - 对准点*scale(对准点始终落在屏幕中心)。
// 帧 0–20 hold 在底行特写(scale 3.2,对准第 5 行图标+长条);
// 帧 20–120 scale 3.2→1 + 对准点 (520,958)→(960,540),Easing.out(quad) 减速升起;
// 视野上缘每越过一行顶边,该行深色脉冲一拍(4f 起 18f 落)读作"涌入";帧 120–150 满幅真静止。
import React from 'react';
import { useCurrentFrame, interpolate, Easing } from 'remotion';
import { G, FakeDashboard } from '../../_fixtures/Fixtures';

const HOLD = 20; // 开场特写 hold
const MOVE_END = 120; // 运镜结束,此后真静止
const ease = Easing.out(Easing.quad);

// FakeDashboard(B) 行几何:侧栏 220 + 内容 padding 36,header 72,5 行 gap 20
const ROW_LEFT = 220 + 36;
const ROW_W = 1920 - ROW_LEFT - 36;
const ROW_H = (1080 - 72 - 72 - 4 * 20) / 5; // 171.2
const rowTop = (i: number) => 72 + 36 + i * (ROW_H + 20);

const F0 = { x: 520, y: rowTop(4) + ROW_H / 2 }; // 起点对准最底行(图标+标题条区域)
const F1 = { x: 960, y: 540 }; // 终点对准整页中心
const S0 = 3.2;

const camAt = (frame: number) => {
  const p = Math.min(1, Math.max(0, (frame - HOLD) / (MOVE_END - HOLD)));
  const e = ease(p);
  const s = S0 + (1 - S0) * e;
  const fx = F0.x + (F1.x - F0.x) * e;
  const fy = F0.y + (F1.y - F0.y) * e;
  return { s, tx: 960 - fx * s, ty: 540 - fy * s, visTop: fy - 540 / s };
};

// 每行脉冲触发帧:视野上缘首次越过该行顶边(底行开场已在画内 → 运动一起步即触发)
const triggers = Array.from({ length: 5 }, (_, i) => {
  for (let f = HOLD; f <= MOVE_END; f++) {
    if (camAt(f).visTop <= rowTop(i) + 1) return f;
  }
  return MOVE_END;
});

export const CraneRiseReveal: React.FC = () => {
  const frame = useCurrentFrame();
  const { s, tx, ty } = camAt(frame);

  return (
    <div
      style={{
        width: 1920,
        height: 1080,
        background: G.bg,
        overflow: 'hidden',
        position: 'relative',
      }}
    >
      <div
        style={{
          position: 'absolute',
          width: 1920,
          height: 1080,
          transformOrigin: '0 0',
          transform: `translate(${tx}px, ${ty}px) scale(${s})`,
        }}
      >
        <FakeDashboard variant="B" />
        {triggers.map((t, i) => {
          const op = interpolate(frame, [t, t + 4, t + 22], [0, 0.22, 0], {
            extrapolateLeft: 'clamp',
            extrapolateRight: 'clamp',
          });
          if (op <= 0.001) return null;
          return (
            <div
              key={i}
              style={{
                position: 'absolute',
                left: ROW_LEFT,
                top: rowTop(i),
                width: ROW_W,
                height: ROW_H,
                borderRadius: 14,
                background: G.ink,
                opacity: op,
              }}
            />
          );
        })}
      </div>
    </div>
  );
};


  1. Read the recipe
    Prompt = when to use, intention, parameter table with typical values and how each one feels, known pitfalls. Treat values as calibrated starting points.
  2. Get the code
    tool: git
    git clone https://github.com/Vincentwei1021/video-shotcraft && cd video-shotcraft && npm install
  3. Register + render
    tool: remotion
    npx remotion render <CompositionId> out.mp4 # component: demos/opening/crane-rise-reveal/CraneRiseReveal.tsx
  4. Or re-implement
    Port the timing/easing from the recipe to HTML + WAAPI (gimgs motion contract) or any engine; keep the same segment windows and easing.
paramtypedefaultdescription
—

Cùng danh mục