remotion-markup

Par remotion-dev · skills

Bonnes pratiques pour écrire du balisage React Remotion

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

Ceci est un guide pour écrire du Remotion React Markup. Si ce n'est pas pertinent, chargez plutôt les Bonnes pratiques Remotion.

Règles générales

Animez les propriétés en utilisant useCurrentFrame() et interpolate().

Préférez interpolate() à spring().

Utilisez Easing.bezier() pour personnaliser le timing, y compris les mouvements saccadés ou qui dépassent. Utilisez Easing.spring() si vous voulez des animations élastiques.

Les éléments HTML qui ont du sens d'être rendus interactifs dans le Studio doivent utiliser Interactive : <div> -> <Interactive.Div>.
Définissez une prop name descriptive comme name="Hero title" pour Interactive, Solid, Sequence.

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

export const FadeIn = () => {
  const frame = useCurrentFrame();

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

Gardez l'appel interpolate() inline dans la prop style. Préférez les propriétés CSS scale, translate, rotate à transform.

// 👍 Keyframes et raccourcis transform éditables inline
style={{
  scale: interpolate(frame, [0, 100], [0, 1]),
  translate: interpolate(frame, [0, 100], ["0px 0px", "100px 100px"]),
  rotate: interpolate(frame, [0, 100], ["20deg", "90deg"]),
}}

// 👎 Les valeurs masquées et les chaînes transform deviennent plus difficiles à éditer dans le Studio
const scale = interpolate(frame, [0, 100], [0, 1]);

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

Les transitions ou animations CSS sont INTERDITES - elles ne s'afficheront pas correctement.
Les noms de classes d'animation Tailwind sont INTERDITS - ils ne s'afficheront pas correctement.

Placez les assets dans le dossier public/ à la racine de votre projet.

Utilisez staticFile() pour référencer les fichiers du dossier public/.

Ajoutez des vidéos et de l'audio en utilisant @remotion/media.
Ajoutez des images en utilisant le composant <Img>. Utilisez staticFile() pour les fichiers dans public/ ou passez directement une URL distante :

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

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

Pour retarder du contenu, enveloppez-le dans <Sequence> et utilisez from. Pour limiter la durée d'un élément, utilisez durationInFrames de <Sequence>. <Sequence> est par défaut un remplissage absolu couvrant la scène.
Pour le contenu inline, utilisez layout="none".

const Main = () => {
  const {fps} = useVideoConfig();

  return (
    <AbsoluteFill>
      <Sequence name="Background">
        <Background />
      </Sequence>
      <Sequence name="Title" from={30} durationInFrames={60} layout="none">
        <Title />
      </Sequence>
      <Sequence name="Subtitle" from={60} durationInFrames={60} layout="none">
        <Subtitle />
      </Sequence>
    </AbsoluteFill>
  );
}

export const Title = () => {
  const frame = useCurrentFrame();

  return (
    <div
      style={{
        opacity: interpolate(frame, [0, 60], [0, 1], {
          extrapolateRight: "clamp",
          extrapolateLeft: "clamp",
          easing: Easing.bezier(0.16, 1, 0.3, 1),
        }),
      }}
    >
      Title
    </div>
  );
};

export const Subtitle = () => {
  return <div>Subtitle</div>;
};

Cartes

Consultez map.md pour choisir entre les cartes statiques simples, les cartes Mapbox et les cartes MapLibre.

Voiceover

Consultez voiceover.md pour ajouter un voiceover généré par IA aux compositions Remotion en utilisant ElevenLabs TTS.

Découpe

Consultez trimming.md pour les modèles de découpe - couper le début ou la fin des animations.

Intégration de vidéos

Consultez embedding-videos.md pour des connaissances avancées sur l'intégration de vidéos - découpe, volume, vitesse, boucle, ton.

Intégration d'audio

Consultez audio.md pour les fonctionnalités audio avancées comme la découpe, le volume, la vitesse, le ton.

Transitions

Consultez transitions.md pour les modèles de transition de scène.

Effets visuels et pixellaires

Lors de la création d'un effet visuel, préférez : 1. une animation Remotion/HTML/CSS/SVG/filter/blend/mask normale, 2. un effet listé via effects.md, y compris sur HTML rendu via <HtmlInCanvas>, 3. un createEffect() personnalisé via effects.md lorsque l'utilisateur demande un effet réutilisable/spécifique au projet, 4. un <HtmlInCanvas onPaint> personnalisé via html-in-canvas.md uniquement si aucun effet ne convient.

Pour les superpositions de fuites de lumière, consultez light-leaks.md. Documentation : https://www.remotion.dev/docs/effects

Effets disponibles : brightness(), contrast(), colorKey(), duotone(), grayscale(), hue(), invert(), saturation(), tint(), linearGradient(), linearGradientTint(), thermalVision(), blur(), linearProgressiveBlur(), radialProgressiveBlur(), zoomBlur(), dropShadow(), glow(), lightTrail(), evolve(), venetianBlinds(), mirror(), scale(), uvTranslate(), xyTranslate(), barrelDistortion(), chromaticAberration(), fisheye(), cornerPin(), wave(), burlap(), emboss(), dotGrid(), halftone(), noise(), noiseDisplacement(), paper(), roughenEdges(), pattern(), pixelate(), pixelDissolve(), scanlines(), speckle(), shine(), shrinkwrap(), vignette(), contourLines(), checkerboard(), halftoneLinearGradient(), gridlines(), whiteNoise(), tvSignalOff(), lines(), rings(), waves(), zigzag(), lightLeak(), starburst().

Contenu 3D

Consultez 3d.md pour le contenu 3D dans Remotion en utilisant Three.js et React Three Fiber.

Effets sonores

Lorsque vous avez besoin d'utiliser des effets sonores, chargez le fichier ./sfx.md pour plus d'informations.

Visualisation audio

Lorsque vous avez besoin de visualiser de l'audio (barres de spectre, formes d'onde, effets réactifs à la basse), chargez le fichier ./audio-visualization.md pour plus d'informations.

Sous-titres

Lorsque vous travaillez avec des sous-titres ou des légendes, chargez la compétence Remotion Captions pour plus d'informations.

Google Fonts

Est la façon recommandée de charger les polices dans Remotion. Consultez google-fonts.md pour savoir comment charger les Google Fonts.

Polices locales

Consultez local-fonts.md pour savoir comment charger les polices locales.

GIFs

Consultez gifs.md pour savoir comment afficher les GIFs synchronisés avec la timeline de Remotion.

Images avancées

Consultez images.md pour le dimensionnement et le positionnement d'images, les chemins d'images dynamiques, et l'obtention des dimensions d'image.

Animations Lottie

Consultez lottie.md pour intégrer les animations Lottie dans Remotion.

Timing avancé

Consultez timing.md pour un timing avancé avec interpolate et l'easing de Bézier, et les ressorts.

Vidéos paramétrées

Consultez parameters.md pour rendre une composition paramétrizable en ajoutant un schéma Zod.

Mesure des nœuds DOM

Consultez measuring-dom-nodes.md pour mesurer les dimensions des éléments DOM dans Remotion.

Mesure du texte

Consultez measuring-text.md pour mesurer les dimensions du texte, adapter le texte aux conteneurs, et vérifier le débordement.

Utilisation de FFmpeg

Pour certaines opérations vidéo, comme le découpage de vidéos ou la détection de silence, FFmpeg doit être utilisé. Chargez le fichier ./ffmpeg.md pour plus d'informations.

Détection de silence

Lorsque vous avez besoin de détecter et découper les segments silencieux des fichiers vidéo ou audio, chargez le fichier ./silence-detection.md.

Durée, dimensions et données dynamiques

Consultez calculate-metadata.md pour définir dynamiquement la durée, les dimensions et les props de composition.

Compositions avancées

Consultez compositions.md pour savoir comment définir les images fixes, les dossiers, les props par défaut et comment imbriquer les compositions.

Séquençage avancé

Consultez sequencing.md pour plus de modèles de séquençage - délai, découpe, limitation de la durée des éléments.

Installer des modules

Utilisez npx remotion add pour ajouter de nouveaux packages avec la bonne version :

npx remotion add @remotion/media

Ceci s'applique aux packages @remotion/*, mediabunny, @mediabunny/*, et zod.

Aperçu du markup

Faites ceci uniquement si vous pensez que l'utilisateur veut voir l'aperçu.

npx remotion studio --no-open

Cela démarrera un processus de longue durée et affichera l'URL du serveur pour l'aperçu.
Si déjà démarré, l'URL s'affichera.

Optionnel : vérification du rendu à une seule image

Vous pouvez rendre une seule image avec la CLI pour vérifier la présentation, les couleurs ou le timing.
Ignorez-le pour les modifications triviales, les refactorisations pures, ou lorsque vous avez déjà suffisamment confiance grâce au Studio ou aux rendus antérieurs.

npx remotion still [composition-id] --scale=0.25 --frame=30

À 30 fps, --frame=30 est la marque d'une seconde (--frame est basé sur zéro).

Skills similaires