mcpField
R
remotion-markup

remotion-markup

github.com/remotion-dev创意与媒体5.8k222.8k 次安装2 天前更新
代码仓库

关于 remotion-markup

remotion-markup 是编写 Remotion 可编辑标记的指导技能,面向 Remotion 开发者,涵盖逐帧动画、媒体、效果和时间线结构,并支持在 Remotion Studio 中检查。

主要功能

  1. 01使用 Remotion 钩子制作逐帧动画
  2. 02组织可编辑的时间线和合成结构
  3. 03音频、视频、图像与效果指导
  4. 04在 Studio 中进行视觉检查

适用场景

  1. 01制作 Remotion 动画合成
  2. 02组织多场景或片段式视频
  3. 03添加效果、字幕、地图或配音
  4. 04在 Studio 中检查合成画面

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/remotion-dev/skills --skill remotion-markup

安装后在 Claude Code 中输入/remotion-markup确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

3d.md
arabic-text.md
audio-visualization.md
audio.md
calculate-metadata.md
color-correction.md
compositions.md
connected-compositions.md
cropping.md
effects.md
embedding-videos.md
ffmpeg.md
gifs.md
google-fonts.md
html-in-canvas.md
images.md
light-leaks.md
local-fonts.md
lottie.md
measuring-dom-nodes.md
measuring-text.md
motion-blur.md
multi-scene-video.md
parameters.md
agents/
openai.yaml
assets/
remotion-icon.svg
remotion-maps/
REFERENCE.md
remotion-maps/agents/
openai.yaml
remotion-maps/assets/
remotion-icon.svg
remotion-maps/techniques/cesium/assets/
cesium-path.json

详细介绍

这是编写 Remotion React Markup 的指南。 如果这与当前任务无关,请改为加载 Remotion Best Practices。

保留用户更改

用户可能会在对话之外编辑代码。

如果你发现期间出现了意外更改,请不要覆盖,假定这是有意为之,或请求确认。

通用规则

将 useCurrentFrame() 放在需要它的最小组件中。将依赖帧的音量、标题和叠加层提取到各自的组件中,而不是让整个合成或场景订阅帧;否则,无关的后代组件会在每一帧重新渲染。跨越时间边界提取时,保留现有的帧坐标,并将可编辑的插值内联在项目的 props 中。

在合成或场景组件内部,通过 useVideoConfig() 获取 fps,用于所有秒到帧的计算,包括 from、trimBefore 和 durationInFrames 等时间 props。将表达式保留在 JSX 节点上,例如 trimBefore={4 * fps},可让 Studio 编辑时间,并确保合成帧率变化时结果仍然正确。

使用 useCurrentFrame() 和 interpolate() 驱动动画。
CSS transition 或 animation 无法正确渲染,需要重构。
Tailwind 动画类无法正确渲染,需要重构。

使用 Easing.bezier() 和 Easing.spring() 自定义时间效果。

选择标记语言层级之前,请先阅读可编辑时间线结构。 先选择编辑单元,再选择它们所需的轨道或共享时间边界。文中包含一个带交互组件及其注册方式的完整示例。如需了解可编辑源代码的样式、架构和关键帧,请参阅 Remotion Interactivity。

import { useCurrentFrame, useVideoConfig, Easing, interpolate, Interactive } from "remotion";

export const FadeIn = () => {
  const frame = useCurrentFrame();
  const {fps} = useVideoConfig();

  return (
    <Interactive.Div
      name="Title"
      style={{
        opacity: interpolate(frame, [0, 2 * fps], [0, 1], {
          extrapolateRight: "clamp",
          extrapolateLeft: "clamp",
          easing: Easing.bezier(0.16, 1, 0.3, 1),
        }),
      }}
    >
      Hello World!
    </Interactive.Div>
  );
};

将 interpolate() 调用内联在 style prop 中。 优先使用 CSS 属性 scale、translate、rotate,而不是 transform。

// 👍 Inline editable keyframes and transform shorthands
style={{
  scale: interpolate(frame, [0, 100], [0, 1], {
    extrapolateLeft: 'clamp',
    extrapolateRight: 'clamp',
    easing: Easing.spring({damping: 200}),
    output: 'perceptual-scale' // For `scale` animations, use "output: 'perceptual-scale'"
  }),
  translate: interpolate(frame, [0, 100], ["0px 0px", "100px 100px"], {
    extrapolateLeft: 'clamp',
    extrapolateRight: 'clamp',
    easing: Easing.spring({damping: 200}),
  }),
  rotate: interpolate(frame, [0, 100], ["20deg", "90deg"], {
    extrapolateLeft: 'clamp',
    extrapolateRight: 'clamp',
    easing: Easing.spring({damping: 200}),
  }),
}}

// 👎 Non-inline values and transform strings become harder to edit in Studio
const scale = interpolate(frame, [0, 100], [0, 1]);

style={{
  transform: `scale(${scale})`,
}}

资源

将资源放在项目根目录下的 public/ 文件夹中。 使用 staticFile() 引用 public/ 文件夹中的文件。

媒体组件

使用 @remotion/media 中的 <Video> 和 <Audio> 添加视频和音频。
使用 <CanvasImage> 组件添加图片。 使用 <AnimatedImage> 添加动画 GIF、APNG、WebP 或 AVIF 图片;如果不使用 Chrome,则使用 @remotion/gif。 对于 public/ 中的文件,请使用 staticFile();也可以直接传入远程 URL:

import { Audio, Video } from "@remotion/media";
import { staticFile, CanvasImage, AnimatedImage } from "remotion";

export const MyComposition = () => {
  return (
    <>
      <Video src={staticFile("video.mp4")} style={{ opacity: 0.5 }} />
      <Audio src={staticFile("audio.mp3")} />
      <CanvasImage
        src={staticFile("logo.png")}
        style={{ width: 100, height: 100 }}
      />
      <Video src="https://remotion.media/video.mp4" />
      <AnimatedImage src={staticFile('nyancat.gif')} />
    </>
  );
};

如果合成主要由视频或音频片段的时间线构成,请在选择源结构之前阅读 video-editing.md。

延迟与裁剪

使用序列编排选择时间边界,并通过timing props了解支持的 props 和操作顺序。

地图

如果想在视频中加入地图,请参阅 Remotion Maps。

文本高亮与注释

如需了解文本高亮(高亮标记)、圆圈、下划线、删除线、划掉的文本和方框,请参阅 text-highlights.md。

多场景视频

如果计划制作包含多个连续场景的视频,请参阅 multi-scene-video.md。

关联合成

如果某个场景或组需要自己的可编辑时间线,或需要处理 Studio 预合成请求,请阅读关联合成。 其中介绍了在父级视图和独立视图中进行提取、注册、继承样式和验证的方法。

旁白

如需了解如何使用 ElevenLabs TTS 为 Remotion 合成添加 AI 生成的旁白,请参阅 voiceover.md。

嵌入视频

如需了解嵌入视频的高级知识——裁剪、音量、速度、循环和音高,请参阅 embedding-videos.md。

嵌入音频

如需了解裁剪、音量、速度和音高等高级音频功能,请参阅 audio.md。

裁剪

如需裁剪组件的可见矩形,请参阅 cropping.md。

转场

如需了解场景转场模式,请参阅 transitions.md。

动态模糊

添加动态模糊或运动轨迹时,请阅读 motion-blur.md,了解推荐的画布内 HTML 方案、预览要求和替代方案。

视觉效果和像素效果

添加视觉效果时,先确定要应用效果的元素或元素组。 如果目标组件支持 effects,且下方的内置效果符合需求,应优先使用该效果,而不是用 CSS 近似实现。例如,如果晕影效果应作用于某个 <Video>,请直接将 vignette() 应用到它的 effects 属性。

以下组件可直接接受 effects:

导入自组件
remotion<Img>、<CanvasImage>、<AnimatedImage>、<Solid>、<HtmlInCanvas>
@remotion/media<Video>
@remotion/gif<Gif>
@remotion/rive<RemotionRiveCanvas>
@remotion/shapes<Arrow>、<Callout>、<Circle>、<Ellipse>、<Heart>、<Pie>、<Polygon>、<Rect>、<Spark>、<Star>、<Triangle>

普通 HTML 元素、<Interactive.*> DOM 封装器、<AbsoluteFill> 和 <Sequence> 均不能直接接受 effects。要对其内容应用效果,请将它们 包裹在 <HtmlInCanvas> 中,并将 effects 属性设在封装器上。

对于其他元素,适合时优先使用常规 HTML 和 CSS。如果适合对整个元素组进行后期处理,且环境支持,可考虑将其包裹在 <HtmlInCanvas> 中。

应用效果前,请阅读 effects.md,了解导入方式、参数和设置方法。该文档还介绍了当没有合适的内置效果时,如何使用 createEffect() 创建可复用的自定义效果。

可用效果

@remotion/effects 中的内置效果:

  • 色彩和色调:brightness()、colorCorrection()、colorKey()、contrast()、curves()、duotone()、exposure()、grayscale()、hue()、invert()、levels()、linearGradient()、linearGradientTint()、lut()、saturation()、shadowsHighlights()、thermalVision()、tint()、vibrance()、whiteBalance()。
  • 模糊和轨迹:blur()、lightTrail()、linearProgressiveBlur()、radialProgressiveBlur()、regionBlur()、zoomBlur()。
  • 光照:dropShadow()、longShadows()、glow()、lightLeak()、shine()、starburst()、vignette()。
  • 畸变和变换:barrelDistortion()、chromaticAberration()、cornerPin()、fisheye()、mirror()、noiseDisplacement()、scale()、skew()、tile()、uvTranslate()、wave()、xyTranslate()。
  • 纹理和图案:burlap()、checkerboard()、contourLines()、dotGrid()、emboss()、flannel()、gridlines()、halftone()、halftoneLinearGradient()、lines()、liquidContours()、noise()、paper()、pattern()、rings()、scanlines()、speckle()、tvSignalOff()、waves()、whiteNoise()、zigzag()。
  • 边缘:outline()、roughenEdges()、shrinkwrap()、tear()。
  • 像素化和转场:evolve()、linearProgressivePixelate()、pixelate()、pixelDissolve()、radialProgressivePixelate()、venetianBlinds()。

颜色校正

请阅读 color-correction.md,了解使用 colorCorrection() 进行主要调整、使用 levels() 或 curves() 进行色调映射、相应的 Studio 编辑器,以及使用 3D .cube 文件进行 lut() 调色。

3D 内容

查看 ./3d.md,了解如何在 Remotion 中使用 Three.js 和 React Three Fiber 制作 3D 内容。

音效

需要使用音效时,请加载 ./sfx.md 文件以了解更多信息。

音频可视化

需要将音频可视化(频谱条、波形、低音响应效果)时,请加载 ./audio-visualization.md 文件以了解更多信息。

地图

对于静态地图、动画路线和标记、地理信息讲解、Mapbox、MapLibre、MapTiler、GeoJSON 或 3D 地理飞行效果,请加载 Remotion Maps。

字幕

处理字幕或标题时,请加载 Remotion Captions 技能以了解更多信息。

阿拉伯语和从右向左书写的文本

对于阿拉伯语、波斯语、乌尔都语或希伯来语文本,请阅读 arabic-text.md:设置基础书写方向,按词语制作动画,并且只以能保持字母连写的方式拆分字母。

Google Fonts

这是在 Remotion 中加载字体的推荐方式。查看 google-fonts.md,了解如何加载 Google Fonts。

本地字体

查看 local-fonts.md,了解如何加载本地字体。

GIF

查看 gifs.md,了解如何让 GIF 与 Remotion 的时间轴同步显示。

高级图像

查看 images.md,了解图像的尺寸和定位、动态图像路径以及如何获取图像尺寸。

Lottie 动画

查看 lottie.md,了解如何嵌入 Lottie 动画。

时间

查看 timing.md,了解更多 interpolate() 的时间控制技巧。

参数化视频

查看 parameters.md,了解如何通过添加 Zod 模式使合成可参数化。

测量 DOM 节点

查看 measuring-dom-nodes.md,了解如何测量 Remotion 中 DOM 元素的尺寸。

测量文本

查看 measuring-text.md,了解如何测量文本尺寸、使文本适应容器以及检查溢出。

使用 FFmpeg

对于某些视频操作,例如剪辑视频或检测静音,应使用 FFmpeg。请加载 ./ffmpeg.md 文件以了解更多信息。

静音检测

需要检测并剪掉视频或音频文件中的静音片段时,请加载 ./silence-detection.md 文件。

动态时长、尺寸和数据

查看 calculate-metadata.md,了解如何动态设置合成时长、尺寸和 props。

合成和静帧

注册 <Composition> 或 <Still> 元素之前,请阅读 compositions.md,了解可通过源代码编辑的注册方式、文件夹、默认 props 和嵌套。如需在 Studio 中导航到场景自身的时间轴,请使用关联合成。

高级序列编排

查看 sequencing.md,了解更多序列编排模式:延迟、修剪和限制项目时长。

安装模块

使用 npx remotion add 添加版本匹配的新包:

npx remotion add @remotion/media

这适用于 @remotion/* 包、mediabunny、@mediabunny/*、zod 和 @huggingface/transformers。

视觉检查

打开 Remotion Studio 检查视觉变化。 更改时间轴结构时,请检查完整合成以及所有关联组件;确认可见图层、剪辑时间和同步内容。

你也可以使用 Rendering 将一帧或多帧渲染为图像进行检查。

评论

支持 Markdown