关于 cinematic-camera
cinematic-camera 是用于 Remotion 动态视频创作的技能,适合需要连贯空间与共享镜头运动的创作者。它要求先确认画幅和背景、检查已批准的参考作品,并以镜头移动呈现动作因果。
主要功能
- 01规划共享空间中的镜头移动
- 02要求确认画幅与背景
- 03检查已批准作品及真实素材
- 04以停留和移动编排动作
- 05用静帧与成片进行质量检查
适用场景
- 01制作 Instagram 插入视频或全屏视频
- 02让镜头在相连的界面元素间移动
- 03依据项目既有视觉参考延续视频风格
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ liamrjohnston/ remotion-motion-graphics-skill --skill cinematic-camera安装后在 Claude Code 中输入/cinematic-camera确认已加载。
详细介绍
电影感摄像机
与 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, [/* focal x */], {
easing: ease,
extrapolateLeft: 'clamp',
extrapolateRight: 'clamp',
});
const fy = interpolate(frame, KEY_T, [/* focal y */], {
easing: ease,
extrapolateLeft: 'clamp',
extrapolateRight: 'clamp',
});
const z = interpolate(frame, KEY_T, [/* zoom */], {
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`,
}}
>
{/* Entire scene in world coordinates */}
</div>
</AbsoluteFill>
- 尺寸应来自已确认的格式,绝不能使用隐藏的默认值。
- 世界宽度通常是视口宽度的 2–2.5 倍。
- 重复相邻关键帧可形成停留。
- 摄像机通常移动 14–24 帧。
- 结尾使用两个几乎相同的关键帧,让编辑器中的画面保持稳定。
- 摄像机、光标、效果和关联对象必须处于同一坐标系中。
动作编排
- 以一个已经在运动的对象开场,并近距离呈现。
- 在主要动作完成时保持画面。
- 展示其所属的更大系统。
- 移动到对比/亮点所在的位置。
- 拉远画面,同时让辅助对象按交错顺序完成动作。
- 稳定画面,以便干净利落地切镜。
规则:
- 摄像机移动到下一个动作所在的位置;动作在停留期间完成。
- 每个节拍只安排一个主要动作。
- 仅在需要展示状态时使用微动效:打字、滴答、勾选、播放、进度变化、光标移动。
- 优先采用连续变形,而不是替换场景。
- 优先平滑移动,而不是急促甩镜。
- 动效应解释因果关系,绝不能用来弥补创意薄弱。
真实性与文本
- 有真实徽标、视频素材、截图、录屏、界面和已核实数据时,应优先使用。
- 绝不能用通用彩色方块、伪造标记、虚构界面或虚假指标替代真实内容。
- 允许使用产品名称、文件名、计数器、命令、进度和真实界面文本。
- 不要重复旁白中的句子,也不要因为画面显得空就添加说明性徽章。
首轮拒绝门槛
只有当所有答案都是“否”时,才显示渲染结果:
- 格式或背景是否尚未确认?
- 是否存在霓虹、辉光、彩色灯光、渐变晕染、玻璃面板,或带有 AI 氛围编码风格的处理?
- 场景是否是在虚空中摆放的一组互不相关的通用卡片?
- 是否使用了暗色风格,而用户并未选择暗色,且没有获批的参考要求使用暗色?
- 摄影机运动是否只是装饰,而非引导因果关系?
- 是否缺少可用的真实素材?
- 关键元素在选定的 Instagram 展示位置是否难以辨认?
- 结果是否未能匹配获批参考的间距、密度、材质和运动节奏?
请在内部反复修改,直到通过门槛。
QA 与交付
- 为开场、每个摄影机目的地、转场、效果呈现和结尾停留帧渲染静帧。
- 将画面与获批参考并排对比,检查构图、密度、视觉识别、材质克制程度和精致度。
- 确认真实素材仍清晰可辨。
- 确认采用“停留 → 移动 → 停留”的节奏,且移动过程中没有隐藏任何动作。
- 检查完整 MP4,确认不存在空洞的移动、裁切、停滞帧、通用填充内容、霓虹/辉光和无力的结尾停留帧。
- 只有在呈现效果与同一套获批视觉系统一致时才交付。
技术限制
- 使用
useCurrentFrame()、spring()和interpolate()驱动运动;不要使用 CSS 动画。 interpolate()的输入范围必须严格递增。- 场景复杂度保持适中;大型模糊/阴影图层开销很大,且通常违反视觉规则。
- 递增数据使用等宽数字。