电影摄像机
与 remotion-best-practices 和 motion-graphics 配合使用。构建一个相连的世界,并在其中移动一个共享的摄像机,而不是在虚空中弹出孤立的卡片。
强制摄入
在开始规划或编码之前,请遵循 motion-graphics 的摄入门。如果缺失,请询问:
你想要哪种格式:4:3 半屏 Instagram 插片还是 9:16 全屏 Instagram?以及哪种背景:暖光、干净暗色、亮色网格还是暗色网格?
不要默认选择 9:16 或暗色。如果用户委托你选择,使用暖光。
绝对视觉禁令
本技能绝不引入霓虹、辉光、发光、发光边缘、彩色阴影、渐变球体、径向彩色渐变、青紫渐变、玻璃态或赛博朋克照明。摄像机运动不能将克制的场景转变为氛围编码的 AI 演示。产品强调色保持扁平且克制。
强制批准参考门
在规划或编码之前完成:
- 检查与同一项目、产品、宽高比、放置位置或视觉机制相关的最新 3–5 个批准渲染。
- 打开源合成文件,检查摄像机关键帧、时间、间距、排版、颜色、密度、入场、出场和结束停顿。
- 检查实际片段或代表性帧;仅凭文件名是不够的。
- 清点真实资产:标志、吉祥物、截图、录音、素材和先前输出。
- 编写一个简短的节拍图,说明该片段如何延续已批准的系统。
- 如果没有项目参考,使用锁定回退:暖色米白实体/编辑世界、深色墨水、柔和中性色、一个克制的扁平品牌强调色、中性阴影,以及零装饰效果。
参考优先级:同一视频 → 同一产品/系列 → 同一宽高比/用例 → 其他批准的仓库示例 → 锁定回退。
规范图库:https://github.com/Liamrjohnston/remotion-motion-graphics-skill
最近批准的工作是基线,而不是可选的灵感。不要为了新奇而发明新的美学。
核心理念
构建一个比视口更大的世界。开始时紧贴一个动作,在其完成时停顿,揭示上下文,移动到对比/回报点,然后稳定下来。
面板可以存在,但它们必须共享一个世界和有意义的空间关系。避免在空空间中独立出现不连贯的卡片。
摄像机支架
使用共享的关键帧时间线来控制焦点和缩放:
const ease = Easing.inOut(Easing.cubic);
const KEY_T = [0, 46, 62, 78, 96, 132, 174, TOTAL_FRAMES];
const fx = interpolate(frame, KEY_T, [/* 焦点 x */], {
easing: ease,
extrapolateLeft: 'clamp',
extrapolateRight: 'clamp',
});
const fy = interpolate(frame, KEY_T, [/* 焦点 y */], {
easing: ease,
extrapolateLeft: 'clamp',
extrapolateRight: 'clamp',
});
const z = interpolate(frame, KEY_T, [/* 缩放 */], {
easing: ease,
extrapolateLeft: 'clamp',
extrapolateRight: 'clamp',
});
<AbsoluteFill style={{backgroundColor: BG}}>
<div
style={{
position: 'absolute',
transform: `translate(${VIEW_W / 2 - fx}px, ${VIEW_H / 2 - fy}px) scale(${z})`,
transformOrigin: `${fx}px ${fy}px`,
}}
>
{/* 整个世界坐标中的场景 */}
</div>
</AbsoluteFill>
- 尺寸来自已确认的格式,从不使用隐藏的默认值。
- 世界宽度通常是视口宽度的 2–2.5 倍。
- 重复的相邻关键帧会创建停顿。
- 摄像机移动通常需要 14–24 帧。
- 以两个几乎相同的关键帧结束,以获得稳定的编辑器停顿。
- 摄像机、光标、效果和连接的对象保持在同一个坐标系中。
编排
- 开始时紧贴一个已经在运动的物体。
- 在主要动作完成时停顿。
- 揭示其更大的系统。
- 移动到对比/回报点。
- 在支撑对象以交错顺序完成时拉远。
- 稳定下来,准备干净地切换场景。
规则:
- 摄像机移动到下一个动作;动作在停顿期间完成。
- 每个节拍一个主要动作。
- 仅使用微动来显示状态:打字、滴答、检查、播放、进度、光标移动。
- 优先选择连续变换而非场景替换。
- 优先选择平滑移动而非疯狂的甩动。
- 运动解释因果关系;它从不弥补薄弱的概念。
真实性与文本
- 尽可能使用真实标志、素材、截图、录音、UI 和经过验证的数据。
- 绝不用通用的彩色方块、虚假标记、虚构的 UI 或虚假指标来替代。
- 产品名称、文件名、计数器、命令、进度和真实的 UI 文本是允许的。
- 不要重复叙述的句子或因为帧感觉空旷而添加解释性徽章。
首轮拒绝门
在每一个答案都是“否”之前,不要展示渲染结果:
- 格式或背景是否未经确认?
- 是否存在任何霓虹、辉光、彩色照明、渐变洗色、玻璃面板或氛围编码的 AI 处理?
- 场景是否是一组在虚空中不连贯的通用卡片?
- 是否在没有用户选择或批准参考要求的情况下使用了暗色?
- 摄像机运动是否仅仅为了装饰而偏离了引导因果关系的目的?
- 当真实资产可用时是否缺失了?
- 在选择的 Instagram 放置位置中,基本元素是否难以辨认?
- 结果是否未能匹配批准参考的间距、密度、材质和运动节奏?
私下修改直到通过该门。
质量保证与交付
- 为开场、每个摄像机目标位置、过渡、回报点和结束停顿渲染静帧。
- 与批准参考并排比较取景、密度、身份、材质克制和精致度。
- 验证真实资产是否保持可读。
- 验证停顿 → 移动 → 停顿,并确保没有动作在移动过程中被隐藏。
- 检查完整的 MP4 文件中的空白移动、裁切、死帧、通用填充、霓虹/辉光和软弱的结束停顿。
- 只有在其看起来与批准的视觉系统一致时才交付。
技术约束
- 使用
useCurrentFrame()、spring()和interpolate()驱动运动;不使用 CSS 动画。 interpolate()的输入范围必须严格递增。- 保持世界规模适中;大型的模糊/阴影图层计算成本高,且通常违反视觉规则。
- 对滴答数据使用等宽数字。