Éditeur d'animations basé sur le Web avec système de keyframes et exportation vidéo transparente
Une équipe d'outils créatifs avait besoin d'un éditeur d'animations basé sur le navigateur permettant aux concepteurs de créer des animations fluides, pilotées par des keyframes, avec plusieurs objets et de les exporter sous forme de vidéos avec une transparence totale du canal alpha — permettant une superposition transparente sur d'autres contenus vidéo.
Discutez de Votre Projet
Le Défi
La création d'actifs animés avec des arrière-plans transparents pour la production vidéo était fastidieuse :
- Outils uniquement sur ordinateur de bureau — Les outils d'animation existants (After Effects, Motion) nécessitaient des licences coûteuses et une installation sur ordinateur de bureau
- Pas d'exportation de canal alpha — La plupart des outils d'animation basés sur le Web exportaient des vidéos opaques sans support de transparence
- Keyframing complexe — Les concepteurs avaient besoin d'une animation intuitive basée sur des keyframes avec contrôle de l'easing, et pas seulement des transitions CSS
- Prévisualisation en temps réel — Les éditeurs devaient voir les animations se dérouler en douceur avant l'exportation
- Types d'objets multiples — Les animations nécessitaient des formes et du texte avec des timelines d'animation indépendantes
- Qualité d'exportation — La sortie devait être des fichiers vidéo de qualité production utilisables dans des flux de travail de montage professionnels
Notre Solution
Nous avons construit un éditeur d'animations basé sur le Web utilisant React et Pixi.js pour le rendu accéléré matériellement, un moteur de keyframes avec plus de 30 fonctions d'easing, et un backend alimenté par FFmpeg pour exporter des vidéos WebM avec un support complet du canal alpha VP9.
Architecture
- Frontend: React avec TypeScript, Pixi.js pour le rendu de canvas accéléré par WebGL
- Gestion d'état : Zustand pour l'état centralisé de la scène
- Moteur d'animation : Moteur d'interpolation de keyframes personnalisé avec bibliothèque d'easing
- Backend : Express.js avec support WebSocket pour le streaming de frames en temps réel
- Encodage vidéo : FFmpeg (via fluent-ffmpeg) pour l'encodage VP9 WebM avec canal alpha
- Monorepo : espace de travail pnpm avec des types TypeScript partagés entre le frontend et le backend
Moteur d'animation
Système de keyframes
Le moteur d'animation central prend en charge l'animation basée sur des keyframes pour plusieurs propriétés :
- Position — Coordonnées X/Y pour les chemins de mouvement
- Rotation — Animation de rotation basée sur les degrés
- Couleur — Interpolation de couleur hexadécimale avec des transitions fluides
- Alpha — Animation d'opacité pour les effets de fondu
- Taille — Mise à l'échelle de la largeur, de la hauteur et du rayon
Chaque keyframe stocke le temps (en millisecondes), un sous-ensemble de propriétés animées et une fonction d'easing sélectionnée. Le moteur interpole entre les keyframes environnantes à tout moment, appliquant la courbe d'easing appropriée.
Bibliothèque d'Easing (plus de 30 fonctions)
Une bibliothèque d'easing complète couvrant toutes les courbes d'animation standard :
- Linéaire, Quadratique, Cubique, Quartique, Quintique
- SinusoĂŻdale, Exponentielle, Circulaire
- Élastique (dépassement de type ressort), Retour (anticipation), Rebond
- Chacune disponible en variantes ease-in, ease-out et ease-in-out
Interpolation
Pour tout horodatage donné, le moteur :
- Trouve les keyframes environnantes (avant et après)
- Calcule la progression normalisée entre elles (0 à 1)
- Applique la fonction d'easing sélectionnée à la valeur de progression
- Interpole les valeurs de propriété (linéaire pour les nombres, lerp de couleur pour les valeurs hexadécimales)
- Renvoie l'ensemble complet des propriétés animées pour le rendu
Canvas et Rendu
Types d'objets
- Rectangles — Largeur, hauteur, couleur, alpha, rotation configurables
- Cercles — Rayon, couleur, alpha, rotation configurables
- Texte — Famille de police, taille de police, contenu, couleur, alpha configurables
Rendu accéléré matériellement
- Rendu WebGL de Pixi.js pour une lecture fluide de la prévisualisation à 60fps
- Résolution du canvas configurable (par défaut 1920x1080 à 30fps)
- Support d'arrière-plan transparent avec alpha d'arrière-plan réglable
- Sélection interactive d'objets avec mise en évidence visuelle
- Lecture d'animations en temps réel avec lecture, pause et navigation sur la timeline
Interface de l'éditeur
Barre d'outils
Boutons de création d'objets pour ajouter des rectangles, des cercles et du texte à la scène avec des propriétés par défaut personnalisables immédiatement.
Panneau des propriétés
Propriétés de l'objet sélectionné éditables en temps réel : position, taille, couleur, alpha, rotation et propriétés spécifiques au type (contenu du texte, paramètres de police).
Timeline
Timeline visuelle affichant :
- Marqueurs de keyframes Ă leurs positions temporelles par objet
- TĂŞte de lecture pour le temps actuel avec navigation
- Sélection de la fonction d'easing par keyframe
- ContrĂ´les d'ajout/suppression de keyframes Ă la position actuelle de la tĂŞte de lecture
Pipeline d'exportation vidéo
Capture d'image
- La durée de l'animation et le FPS déterminent le nombre total d'images
- Chaque image est rendue individuellement en pleine résolution
- Contenu du canvas capturé comme blob PNG par image
- Images collectées pour être téléchargées vers le backend d'encodage
Backend d'encodage
Le backend Express.js gère l'encodage vidéo via un système basé sur des tâches :
- Création de tâche — Le client demande une nouvelle tâche d'exportation (basée sur UUID)
- Téléchargement d'images — Images téléchargées par lots (ou diffusées via WebSocket)
- Encodage FFmpeg — Images assemblées en vidéo WebM avec le codec VP9
- Canal Alpha — Utilise le format de pixel yuva420p pour un support complet de la transparence
- Suivi de progression — Mises à jour de progression en temps réel pendant l'encodage
- Téléchargement — Vidéo terminée disponible en téléchargement avec vérification de la transparence
Alternative WebSocket
Pour l'exportation en temps réel, les images peuvent être diffusées directement via WebSocket au lieu du téléchargement par lots HTTP, avec des mises à jour de progression en direct tout au long des phases de capture, de téléchargement et d'encodage.
Fonctionnalités clés
- Animation par Keyframes — Animation basée sur une timeline avec des keyframes par propriété
- Plus de 30 fonctions d'Easing — Bibliothèque d'easing complète pour des courbes d'animation professionnelles
- Exportation vidéo transparente — VP9 WebM avec support complet du canal alpha
- Canvas accéléré matériellement — Rendu WebGL de Pixi.js pour une prévisualisation fluide en temps réel
- Types d'objets multiples — Rectangles, cercles et texte avec animation indépendante
- Prévisualisation en temps réel — Lecture, pause et navigation instantanées dans les animations
- Exportation par lots et en streaming — Téléchargement par lots HTTP ou streaming d'images en temps réel via WebSocket
- Sortie configurable — Paramètres de résolution, FPS et débit pour l'exportation
- Monorepo Type-Safe — Types TypeScript partagés entre le frontend et le backend
- Arrière-plans personnalisés — Couleur et alpha d'arrière-plan réglables avec support image/vidéo
Résultats
Stack Technologique
caseStudyDetail.more Études de Cas
Découvrez plus de nos implémentations techniques
Traitement de factures assisté par l'IA avec OCR et intégration QuickBooks
Une entreprise de taille moyenne, traitant des centaines de factures fournisseurs chaque mois, devait éliminer la saisie manuelle des données en extrayant automatiquement les données des factures à l'aide de l'IA/OCR et en les synchronisant directement dans QuickBooks pour la tenue de livres et le suivi des paiements.
Insertion d'annonces côté client (CSAI) avec analyse des marqueurs SCTE-35 et intégration de lecteurs multiplateformes
Une plateforme de streaming vidéo devait implémenter l'insertion d'annonces côté client (CSAI) sur les applications web, mobiles et de télévision connectée — permettant des expériences publicitaires personnalisées au niveau de l'appareil avec un support complet d'interaction publicitaire (superpositions cliquables, bannières complémentaires, boutons de saut) que l'insertion côté serveur ne peut pas offrir.
PrĂŞt Ă Transformer Votre Entreprise ?
Discutons de la façon dont nous pouvons appliquer des solutions similaires à vos défis.