Files
AE_Anons/README.md

23 KiB
Raw Permalink Blame History

AE Anons - Автоматизированный генератор спортивных анонсов в After Effects

AE Anons Logo

License: MIT Rust Status

Автоматизированная система для создания спортивных анонсов с использованием шаблонов After Effects через Nexrender, с данными из электронных таблиц Synology Office.

Обзор

AE Anons — это CLI-утилита на Rust, которая выступает как интеллектуальный генератор заданий для Nexrender — опенсорсного оркестратора рендеринга After Effects (лицензия MIT).

  1. Подключения к NAS Synology для получения данных расписания из файлов офисных таблиц (.osheet)
  2. Парсинга Excel данных, содержащих информацию о спортивных событиях, командах, каналах и временных интервалах
  3. Генерации заданий Nexrender с соответствующими шаблонами и ресурсами
  4. Мониторинга завершения рендеринга и управления выходными файлами

Особенности

  • Интеграция с Synology: Аутентификация и загрузка файлов с NAS Synology
  • Экспорт офисных таблиц: Автоматическое преобразование файлов .osheet в формат Excel
  • Гибкий парсинг данных: Динамический парсинг листов с обнаружением заголовков
  • Множественная генерация вариантов: Создание "Сегодня", "Завтра" и датированных версий для каждого анонса
  • Умное управление логотипами: Автоматическое разрешение и масштабирование логотипов на основе хэштегов # в имени команды
  • Оркестрация заданий Nexrender: Автоматическая отправка, мониторинг и очистка заданий
  • Профессиональное логирование: Структурированный журнал с возможностью настройки уровня детализации
  • Конфигурация через переменные окружения: Все параметры управляются через файл .env

Предварительные требования

  • Rust 1.70 или выше
  • Доступ к NAS Synology с установленными и включенными пакетами File Station и Office
  • Экземпляр server и worker(не менее одного) Nexrender
  • Шаблоны After Effects, настроенные на worker (формат Adobe After Effects 2024 .aepx)

Установка

1. Клонирование репозитория

git clone https://git.tvstart.ru/lexx/AE_Anons.git
cd ae_anons

2. Сборка проекта

cargo build --release

Бинарный файл будет доступен по пути target/release/ae_anons

3. Настройка окружения

Скопируйте пример конфигурации и заполните своими данными:

cp .env.example .env

Затем отредактируйте файл .env:

# Synology NAS
NAS_FQDN=https://your-nas.domain.com
NAS_USER=your_username
NAS_PASS=your_password
NAS_FILE=/team-folders/path/to/your/file.osheet

# Nexrender
NEXRENDER_API_URL=http://your-nexrender-server:3000/api/v1/jobs
OUTPUT_FOLDER=//your-storage/path/to/output

# Logging
RUST_LOG=info

См. раздел Конфигурация для подробной информации.

Использование

Базовое выполнение

# Запуск с настройками по умолчанию
./target/release/ae_anons

# Запуск с пользовательским уровнем логирования
RUST_LOG=debug ./target/release/ae_anons

Уровни логирования

Управляйте детализацией вывода через переменную окружения RUST_LOG:

  • error - Только критические ошибки
  • warn - Предупреждения и ошибки
  • info - Общие операционные сообщения (по умолчанию)
  • debug - Детальная информация о процессе обработки
  • trace - Полное отладочное логирование с деталями API вызовов
RUST_LOG=debug cargo run

Конфигурация

Переменные окружения

Переменная Обязательна Описание
NAS_FQDN Да URL NAS Synology с протоколом и портом
NAS_USER Да Имя пользователя учетной записи Synology
NAS_PASS Да Пароль учетной записи Synology
NAS_FILE Да Полный путь к файлу .osheet на NAS
NEXRENDER_API_URL Да Конечная точка API сервера Nexrender
OUTPUT_FOLDER Да Сетевой путь для рендеренных видео
RUST_LOG Нет Уровень детализации логирования (по умолчанию: info)
TEMPLATE_DOUBLE_SRC Да Путь к AEP-шаблону для двух команд
TEMPLATE_SINGLE_SRC Да Путь к AEP-шаблону для одной команды
TEMPLATE_COMPOSITION Да Имя композиции в проекте AE (например, main)
TEMPLATE_OUTPUT_MODULE Да Имя модуля вывода в AE (например, h264)
TEMPLATE_OUTPUT_EXT Да Расширение выходного файла (например, mp4)

Пример файла .env

# Synology NAS
NAS_FQDN="https://your-nas.example.com"
NAS_USER="your_username"
NAS_PASS="your_password"
NAS_FILE="/Team Folder/path/to/file.osheet"

#Loging
RUST_LOG="info"

# Nexrender
NEXRENDER_API_URL="http://nexrender-server:3050/api/v1/jobs"
OUTPUT_FOLDER="/path/to/output"

# After Effects Templates
TEMPLATE_DOUBLE_SRC="file:///path/to/double_team_template.aepx"
TEMPLATE_SINGLE_SRC="file:///path/to/single_team_template.aepx"
TEMPLATE_COMPOSITION="main"
TEMPLATE_OUTPUT_MODULE="h264"
TEMPLATE_OUTPUT_EXT="mp4"

Структура электронной таблицы

Файл Excel должен содержать следующие листы со специфичными структурами:

Лист "SPORT"

Связывает названия видов спорта с соответствующими видео пакетами.

SPORT LINK
Без оформления \server\share\path\to\null.mov
Футбол \server\share\path\to\football_pack.mov
Волейбол \server\share\path\to\volleyball_pack.mov

Лист "TEAMS"

Сопоставляет имена команд с их видами спорта и логотипами. Колонка SPORT заполняется из выпадающего списка (заполнена из листа SPORT).

Если несколько команд в одном виде спорта имеют одинаковые названия, но разные логотипы, используется разделитель хеш # для уникальной идентификации.

TEAM SPORT LINK
Галатасарай#Turki Футбол \server\share\path\to\galatasaray_football.png
Галатасарай Волейбол \server\share\path\to\galatasaray_volleyball.png
Галатасарай#UCL Волейбол \server\share\path\to\galatasaray_ucl.png
Сомбатей##400 Футбол \server\share\path\to\szombathely.png

Лист "CHANELL"

Сопоставляет названия каналов с их логотипами. Поля заполняются вручную без выпадающих списков.

CHANEL LINK
КАНАЛ \server\share\path\to\channel_logo.png
TRIUMPH \server\share\path\to\triumph_logo.png

Лист "Start"

Основной источник данных для генерации анонсов. Большинство полей заполняются из выпадающих списков, основанных на других листах.

Обязательные колонки: DATA, TIME, CHANEL, SPORT, LEAGUE, TEAM A, TEAM B

Примечание: Колонка LEAGUE обязательна для заполнения, но не имеет выпадающего списка. Проверка орфографии и опечаток отсутствует!

STATE TRIPPLE DATA TIME SPORT LEAGUE CHANEL TEAM A TEAM B
TRUE TRUE 27.2.2026 23:40 Футбол Чемпионат Португалии START Спортинг#ll#550 Эшторил#ll#550
FALSE TRUE 28.2.2026 12:55 Волейбол Чемпионат Турции. Женщины TRIUMPH Бешикташ Галатасарай#Turki

Формат имен команд

Имена команд поддерживают два типа разделителей хэш #:

  1. Первый хеш: Уникальный идентификатор для команд с одинаковыми названиями в одном виде спорта, или одинаковым названием в разных видах спорта. Примеры:
  • Динамо#Футбол, Динамо#Волейбол - Одно название разный вид спорта
  • Спартак#ЖенскийФ, Спартак#МужскойФ Одно название разный вид спорта
  1. Второй хеш: Целевой размер в пикселях для масштабирования логотипа

Формат: DisplayName#UniqueID#TargetSize

Примеры:

  • Галатасарай#Turki - только уникальный идентификатор
  • Сомбатей##400 - только целевой размер (обратите внимание на двойной хеш)
  • Спортинг#ll#550 - оба идентификатор и целевой размер

Важно: Обрабатывается только второй хеш для масштабирования логотипа. Если уникальный идентификатор не требуется, используйте двойной хеш ## перед целевым размером.

Выходные файлы

Рендеренные видео

Рендерные видео сохраняются в OUTPUT_FOLDER по следующему шаблону именования:

YYYYMMDD_Sport_League_TeamA_TeamB_Channel[_Variant].mp4

Имена файлов транслитерируются в латиницу. Примеры:

  • 20260228_Volleyball_Championship-Turkey-Women_Beşiktaş_Galatasaray_TRIUMPH.mp4
  • 20260228_Volleyball_Championship-Turkey-Women_Beşiktaş_Galatasaray_TRIUMPH_Today.mp4
  • 20260228_Volleyball_Championship-Turkey-Women_Beşiktaş_Galatasaray_TRIUMPH_Tomorrow.mp4

Рабочий процесс

  1. Аутентификация: Подключение к NAS Synology с использованием предоставленных учетных данных
  2. Получение файла: Поиск и экспорт указанного файла .osheet в Excel
  3. Парсинг данных: Чтение всех листов и структурирование данных
  4. Разрешение ресурсов: Сопоставление видов спорта, команд и каналов с визуальными элементами
  5. Генерация заданий: Создание заданий Nexrender для каждой активной строки с вариантами
  6. Очистка: Удаление завершенных/неудачных заданий из предыдущих запусков
  7. Отправка: Отправка заданий на API Nexrender
  8. Мониторинг: Слежение за прогрессом выполнения до завершения
  9. Завершение сеанса: Закрытие сессии Synology

Требования к шаблонам After Effects

Шаблоны должны быть предварительно настроены на узлах рендеринга со следующими именами слоев:

Типы шаблонов

Файл шаблона Назначение
PackShot_DOUBLE.aepx Сопоставление с двумя командами
PackShot_SINGLE.aepx Анонсы для одной команды

Обязательные слои

Имя слоя Тип Описание
DATA Text Отображение даты (автоматически подстраивается)
TIME / TIME_H / TIME_M Text Отображение времени
LEAGUE Text Название лиги
SPORT Text Категория спорта
TEAMS Text Скомбинированные имена команд
TEAM_A_LOGO Image Логотип домашней команды
TEAM_B_LOGO Image Логотип гостевой команды
CHANEL Image Логотип канала
TOP Video Наложение видео оформления

Настройки композиции

  • Имя композиции: pack
  • Выходной модуль: Start_h264
  • Формат вывода: mp4
  • Формат проекта: Adobe After Effects 2024 .aepx

Устранение неисправностей

Частые проблемы

Ошибка подключения к NAS

  • Проверьте, что NAS_FQDN включает протокол и порт (например, https://nas.example.com:5001)
  • Проверьте сетевую связность с NAS
  • Убедитесь, что сервисы File Station и Office включены

Файл не найден

  • Убедитесь, что путь в NAS_FILE точно соответствует пути в Synology Drive
  • Путь должен начинаться с /Team Folder/ для рабочих папок
  • Проверьте права доступа к файлу для учетной записи сервиса

Ошибка отправки задания Nexrender

  • Подтвердите доступность сервера Nexrender
  • Убедитесь, что NEXRENDER_API_URL правильный
  • Проверьте существование файлов шаблонов на узлах рендеринга

Режим отладки

Включите подробное логирование для детального анализа:

RUST_LOG=debug ./target/release/ae_anons

Это выведет:

  • Детали API запросов/ответов
  • Информацию о парсинге листов
  • Детали создания заданий
  • Процесс разрешения ресурсов

Возможные ограничения по производительности

  • Большие таблицы: Ограничение обработки до 10,000 строк на лист
  • Задержка сети: Загрузка файлов с NAS может занимать время для больших файлов
  • Параллельные задания: Nexrender управляет очередью заданий внутренне
  • Использование памяти: Парсинг Excel сохраняет всю книгу в памяти

Примечания по безопасности

  • Храните учетные данные только в файле .env (исключен из git)
  • Используйте специальные аккаунты с минимально необходимыми правами
  • Сессии Synology завершаются после выполнения
  • HTTPS рекомендуется для подключений NAS в продакшене

Разработка

Структура кода

ae_anons/
├── Cargo.toml
├── LICENSE
├── assets/
│   └── logo.png
├── README.md
├── .env.example
└── src/
    ├── main.rs       # Точка входа и оркестрация приложения
    ├── config.rs     # Управление конфигурацией
    ├── nexrender.rs  # Генерация заданий Nexrender и структура данных
    └── synology.rs   # Клиент API Synology

Зависимости

Crate Версия Назначение
reqwest 0.12 HTTP клиент для коммуникации API
serde / serde_json 1.0 Сериализация JSON
calamine 0.26 Парсинг файлов Excel
chrono 0.4 Обработка дат и времени
tokio 1.0 Асинхронная среда выполнения
dotenv 0.15 Конфигурация через переменные окружения
log / env_logger 0.11 Инфраструктура логирования
thiserror 2.0 Определение типов ошибок
anyhow 1.0 Обработка ошибок

Планируемые новые возможности

  1. Расширить JobData в nexrender.rs для новых полей данных
  2. Обновить логику парсинга листов при необходимости добавления новых колонок
  3. Добавить соответствующие слои After Effects в шаблоны
  4. Обновите метод to_nexrender_job() с новыми сопоставлениями ресурсов

🙏 Благодарности

Особая благодарность проекту Nexrender (@inlife и контрибьюторам) за создание надёжной платформы для автоматизации After Effects.

Лицензия

AE AnonsMIT License
NexrenderMIT License

Обе лицензии MIT обеспечивают полную свободу использования и модификации кода.

Разрешается:

  • Использовать в коммерческих целях
  • Изменять исходный код
  • Распространять копии
  • Использовать приватно

Требуется:

  • Сохранять копирайт и текст лицензии

Поддержка

Для вопросов и запросов функций обращайтесь:

История изменений

v0.1.0

  • Первый выпуск
  • Интеграция с Synology Office
  • Базовая генерация заданий Nexrender
  • Парсинг Excel с динамическим обнаружением листов
  • Создание множественных вариантов
  • Автоматические настройки размера шрифта и позиции
  • Умное масштабирование логотипов по целевому размеру

v0.1.1

  • Оптимизированна работат с памятью
  • Убрана функция создания .json

Made with 🦀 Rust and coffee