Загрузка 0
ПОДЕЛИТЬСЯ

Мой блог

Листай вниз

Как разработчик превратил создание промороликов для macOS-приложения в код

Как разработчик превратил создание промороликов для macOS-приложения в код

Регулярный выпуск вертикальных видео для продвижения десктопного софта требует больших трудозатрат, особенно если главный герой проекта — виртуальный питомец со сложным поведенческим циклом. В данном случае процесс создания промороликов с участием анимированного персонажа Mewmori перенесли в программный код. Вместо ручной записи через дебаг-панель разработчик настроил пайплайн, где сценарий ролика описывается в формате JSON, а специальный скрипт управляет виртуальным экраном, запуском отладочной сборки и захватом видеопотока.

Как разработчик превратил создание промороликов для macOS-приложения в код
Как разработчик превратил создание промороликов для macOS-приложения в код — изображение 8
Как разработчик превратил создание промороликов для macOS-приложения в код — изображение 9
Как разработчик превратил создание промороликов для macOS-приложения в код — изображение 10
Как разработчик превратил создание промороликов для macOS-приложения в код — изображение 11
Как разработчик превратил создание промороликов для macOS-приложения в код — изображение 12

Такой подход позволяет вносить изменения в реплики или действия персонажа простым редактированием текстовой строки в репозитории с последующим перезапуском скрипта. Всего в проекте было подготовлено несколько десятков раскадровок и готовых видеофайлов, превративших съемочный процесс в стандартную процедуру сборки.

Автоматизация съёмки роликов через JSON-раскадровки

Регулярный выпуск вертикальных видео для продвижения десктопного софта требует больших трудозатрат, особенно если главный герой проекта — виртуальный питомец со сложным поведенческим циклом. В данном случае процесс создания промороликов с участием анимированного персонажа Mewmori перенесли в программный код. Вместо ручной записи через дебаг-панель разработчик настроил пайплайн, где сценарий ролика описывается в формате JSON, а специальный скрипт управляет виртуальным экраном, запуском отладочной сборки и захватом видеопотока.

Реклама
Реакция пиксельного кота на результаты сборки в приложении
Настоящие кадры: реакция кота на упавший и на зелёный билд

Такой подход позволяет вносить изменения в реплики или действия персонажа простым редактированием текстовой строки в репозитории с последующим перезапуском скрипта. Всего в проекте было подготовлено несколько десятков раскадровок и готовых видеофайлов, превративших съемочный процесс в стандартную процедуру сборки.

Внутреннее устройство съёмочного режима

Весь функционал для автоматизированной записи видео изолирован в специальном каталоге исходного кода с применением условной компиляции для отладочной сборки, благодаря чему код не попадает в финальный релиз продукта. Сценарий дубля жестко фиксирован в рамках логики актора и не может быть прерван случайными событиями вроде виртуального голода персонажа. Раскадровка оперирует базовыми командами вроде смены настроения, перемещения, вывода текста реплик и применения визуальных эффектов, используя относительные координаты экрана для независимости от разрешения.

Схема пайплайна создания видео из JSON-раскадровки
Пайплайн от storyboard.json через запись Debug-сборки и report.json до вертикального mp4

Синхронизация процессов и файлы взаимодействия

Интеграция между приложением и управляющим скриптом реализована через служебную директорию с файлами обмена. Приложение переводится в режим ожидания до получения управляющего сигнала, после чего скрипт инициирует захват экрана, передает отмашку для старта сцены, а по завершении считывает отчет с таймингами. Прямой запуск бинарного файла приложения с необходимыми аргументами обеспечивает корректный вывод отладочной информации в терминал.

Схема синхронизации скрипта и приложения через файлы отчета
Скрипт и кот синхронизируют запись через файлы cue, started и report.json

Особенности захвата кадров и звукового сопровождения

Для корректной обрезки видеоматериала приложение фиксирует текущие геометрические границы собственных окон с учетом их видимости и уровня прозрачности. Ввиду аппаратных особенностей захвата экрана отсчет таймингов производится с конца файла на основе точных данных из отчета. Звуковые эффекты, генерируемые программно внутри проекта, записываются путем временного переключения системного вывода аудио на виртуальное устройство с помощью вспомогательного скрипта на CoreAudio, после чего уровень громкости нормализуется до требуемых стандартов.

Практические сложности и типичные ошибки

Реализация автоматизированного пайплайна потребовала решения ряда специфических задач, связанных с поведением виртуального персонажа и окружения macOS. Например, опечатки в названиях клипов в раскадровке не вызывают критический сбой приложения, а приводят лишь к молчаливому бездействию персонажа на видео. Для предотвращения подобных дефектов были внедрены автоматические тесты, проверяющие соответствие текстовых сценариев доступным каталогам графических спрайтов и одежды.

Объединение окон персонажа и вертикальный кроп кадра
Объединение окон кота и вертикальный кроп 540 точек, который даёт 1080 пикселей на Retina

Исправление сбоев анимации и окружения

В ходе настройки автоматизации разработчик столкнулся с несколькими характерными проблемами:

  • Избыточная ширина кадра при перемещении персонажа на значительные расстояния корректировалась ограничением допустимого диапазона движения в вертикальной ориентации.
  • Начальная позиция кота зависела от его состояния в предыдущем сеансе, поэтому перед началом записи теперь выполняется принудительный телепорт в стартовую точку.
  • Конфликты с сохранением гардероба привели к необходимости собирать внешний вид персонажа с нуля перед каждым дублем.
  • Некорректная загрузка релизной версии вместо отладочной теперь предотвращается предварительной проверкой идентификатора бандла в файле Info.plist.
  • Проблемы с системной раскладкой клавиатуры при отправке команд через AppleScript были решены переходом на позиционные коды клавиш.

Итоги внедрения программного пайплайна

В результате интеграции съемочного процесса в структуру репозитория проморолики стали полноценным артефактом сборки, который можно легко контролировать через систему контроля версий или обновлять после изменения дизайна интерфейса. Аналогичным образом с помощью вспомогательных скриптов автоматизировано создание пресс-материалов и скриншотов. Несмотря на значительный объем написанного кода и необходимость отладки редких краевых случаев, такой подход существенно сокращает время на подготовку визуального контента для приложения.

Примеры неудачных дублей с дефектами анимации кота
Три сорванных дубля: кот в одежде, съехавшая голова и крошечный кот в большой рамке
01.