Веб-орієнтований редактор анімації із системою ключових кадрів та експортом прозорого відео
Команда з креативних інструментів потребувала браузерного редактора анімації, який дозволяв дизайнерам створювати плавні анімації на основі ключових кадрів з кількома об'єктами та експортувати їх як відео з повною прозорістю альфа-каналу — що забезпечувало безшовне накладання на інший відеоконтент.
Обговоріть Ваш Проєкт
Виклик
Створення анімованих об'єктів із прозорим фоном для виробництва відео було громіздким:
- Десктопні інструменти — Існуючі інструменти анімації (After Effects, Motion) вимагали дорогих ліцензій та інсталяції на робочий стіл
- Відсутність експорту альфа-каналу — Більшість веб-орієнтованих інструментів анімації експортували непрозорі відео без підтримки прозорості
- Складне керування ключовими кадрами — Дизайнерам потрібна була інтуїтивно зрозуміла анімація на основі ключових кадрів з контролем кривих зміни швидкості, а не просто CSS переходи
- Попередній перегляд у реальному часі — Редакторам потрібно було бачити плавне відтворення анімації перед експортом
- Кілька типів об'єктів — Анімації вимагали форм та тексту з незалежними часовими шкалами анімації
- Якість експорту — Вихідні дані мали бути відеофайлами виробничого рівня, придатними для професійних робочих процесів редагування
Наше Рішення
Ми розробили веб-орієнтований редактор анімації, використовуючи React та Pixi.js для апаратного прискореного рендерингу, рушій ключових кадрів з понад 30 функціями згладжування, а також бекенд на основі FFmpeg для експорту відео у форматі WebM з повною підтримкою альфа-каналу VP9.
Архітектура
- Фронтенд: React з TypeScript, Pixi.js для рендерингу canvas з WebGL-прискоренням
- Керування станом: Zustand для централізованого стану сцени
- Рушій анімації: Власний рушій інтерполяції ключових кадрів з бібліотекою функцій згладжування
- Бекенд: Express.js з підтримкою WebSocket для потокової передачі кадрів у реальному часі
- Кодування відео: FFmpeg (через fluent-ffmpeg) для кодування VP9 WebM з альфа-каналом
- Монорепозиторій: pnpm workspace зі спільними типами TypeScript для фронтенду та бекенду
Рушій анімації
Система ключових кадрів
Основний рушій анімації підтримує анімацію на основі ключових кадрів для кількох властивостей:
- Позиція — Координати X/Y для траєкторій руху
- Обертання — Анімація обертання на основі градусів
- Колір — Інтерполяція HEX-кольорів з плавними переходами
- Альфа — Анімація непрозорості для ефектів згасання
- Розмір — Масштабування ширини, висоти та радіуса
Кожен ключовий кадр зберігає час (у мілісекундах), підмножину анімованих властивостей та обрану функцію згладжування. Рушій інтерполює між навколишніми ключовими кадрами в будь-який момент часу, застосовуючи відповідну криву згладжування.
Бібліотека функцій згладжування (30+ функцій)
Комплексна бібліотека функцій згладжування, що охоплює всі стандартні криві анімації:
- Linear, Quadratic, Cubic, Quartic, Quintic
- Sinusoidal, Exponential, Circular
- Elastic (пружинистий перевиліт), Back (передчуття), Bounce (відскок)
- Кожна доступна у варіантах ease-in, ease-out та ease-in-out
Інтерполяція
Для будь-якої заданої мітки часу рушій:
- Знаходить навколишні ключові кадри (до та після)
- Обчислює нормалізований прогрес між ними (від 0 до 1)
- Застосовує обрану функцію згладжування до значення прогресу
- Інтерполює значення властивостей (лінійно для чисел, color lerp для HEX-значень)
- Повертає повний набір анімованих властивостей для рендерингу
Canvas та рендеринг
Типи об'єктів
- Прямокутники — Налаштовувані ширина, висота, колір, альфа, обертання
- Кола — Налаштовувані радіус, колір, альфа, обертання
- Текст — Налаштовувані сімейство шрифту, розмір шрифту, вміст, колір, альфа
Апаратне прискорений рендеринг
- WebGL-рендеринг за допомогою Pixi.js для плавного відтворення попереднього перегляду на 60fps
- Налаштовувана роздільна здатність canvas (за замовчуванням 1920x1080 при 30fps)
- Підтримка прозорого фону з регульованим альфа-каналом фону
- Інтерактивний вибір об'єктів з візуальним виділенням
- Відтворення анімації в реальному часі з функціями відтворення, паузи та скраббінгу на часовій шкалі
Інтерфейс редактора
Панель інструментів
Кнопки створення об'єктів для додавання прямокутників, кіл та тексту до сцени з властивостями за замовчуванням, які можна одразу налаштувати.
Панель властивостей
Властивості вибраного об'єкта, що редагуються в реальному часі: позиція, розмір, колір, альфа, обертання та властивості, специфічні для типу (вміст тексту, налаштування шрифту).
Часова шкала
Візуальна часова шкала показує:
- Маркери ключових кадрів у їхніх часових позиціях для кожного об'єкта
- Повзунок (playhead) для поточного часу з функцією скраббінгу
- Вибір функції згладжування для кожного ключового кадру
- Елементи керування додаванням/видаленням ключових кадрів на поточній позиції повзунка
Конвеєр експорту відео
Захоплення кадрів
- Тривалість анімації та FPS визначають загальну кількість кадрів
- Кожен кадр рендериться індивідуально у повній роздільній здатності
- Вміст canvas захоплюється як PNG blob для кожного кадру
- Кадри збираються для завантаження на бекенд кодування
Бекенд кодування
Бекенд Express.js обробляє кодування відео через систему, засновану на завданнях:
- Створення завдання — Клієнт запитує нове завдання на експорт (на основі UUID)
- Завантаження кадрів — Кадри завантажуються партіями (або передаються потоком через WebSocket)
- Кодування FFmpeg — Кадри збираються у відео WebM з кодеком VP9
- Альфа-канал — Використовує формат пікселів yuva420p для повної підтримки прозорості
- Відстеження прогресу — Оновлення прогресу в реальному часі під час кодування
- Завантаження — Завершене відео доступне для завантаження з перевіркою прозорості
Альтернатива WebSocket
Для експорту в реальному часі кадри можуть передаватися безпосередньо через WebSocket замість пакетного завантаження по HTTP, з оновленнями прогресу в реальному часі протягом фаз захоплення, завантаження та кодування.
Ключові особливості
- Анімація ключових кадрів — Анімація на основі часової шкали з ключовими кадрами для кожної властивості
- 30+ функцій згладжування — Повна бібліотека функцій згладжування для професійних кривих анімації
- Експорт прозорого відео — VP9 WebM з повною підтримкою альфа-каналу
- Апаратно прискорений Canvas — WebGL-рендеринг за допомогою Pixi.js для плавного попереднього перегляду в реальному часі
- Кілька типів об'єктів — Прямокутники, кола та текст з незалежною анімацією
- Попередній перегляд у реальному часі — Миттєве відтворення, пауза та скраббінг анімації
- Пакетний та потоковий експорт — Пакетне завантаження по HTTP або потокова передача кадрів у реальному часі через WebSocket
- Налаштовуваний вихід — Налаштування роздільної здатності, FPS та бітрейту для експорту
- Type-Safe Monorepo — Спільні типи TypeScript для фронтенду та бекенду
- Користувацькі фони — Регульований колір фону та альфа-канал з підтримкою зображень/відео
Результати
Технологічний Стек
caseStudyDetail.more Кейси
Ознайомтесь з іншими нашими технічними впровадженнями
Обробка рахунків-фактур за допомогою AI, OCR та інтеграції з QuickBooks
Середній бізнес, який щомісяця обробляє сотні рахунків-фактур від постачальників, потребував усунення ручного введення даних шляхом автоматичного вилучення даних рахунків-фактур за допомогою AI/OCR та їх прямої синхронізації з QuickBooks для ведення бухгалтерського обліку та відстеження платежів.
Вставка реклами на стороні клієнта (CSAI) з парсингом маркерів SCTE-35 та інтеграцією багатоплатформного плеєра
Платформа потокового відео потребувала впровадження вставки реклами на стороні клієнта (CSAI) для веб-, мобільних програм та програм для підключених телевізорів — що забезпечує персоналізований рекламний досвід на рівні пристрою з повною підтримкою взаємодії з рекламою (натискні оверлеї, супутні банери, кнопки пропуску), який не може забезпечити вставка на стороні сервера.
Готові Трансформувати Свій Бізнес?
Давайте обговоримо, як ми можемо застосувати подібні рішення для ваших завдань.