5.0 KiB
5.0 KiB
ТЗ: Караоке-генератор — MVP (v0.1)
Цель
Реализовать CLI-инструмент, который принимает аудиофайл песни и генерирует видео-файл с синхронизированным текстом (стиль "субтитры/караоке").
Стек
- Python 3.10+
- Whisper (openai-whisper или faster-whisper) — транскрипция + тайминги
- FFmpeg — рендер финального видео
- MoviePy или ffmpeg-python — наложение текста на видео
- Pillow — рендер текстовых кадров (если MoviePy не справляется)
- Pexels API — поиск стоковых видео-фонов
- GigaChat API (через прокси
185.130.212.192:8443) — NLP-анализ смысла текста
Функционал MVP (v0.1)
Вход
python karaoke.py --audio song.mp3 [--text lyrics.txt] [--output output.mp4]
--audio— обязательный аргумент, путь к аудиофайлу (mp3, wav, ogg, m4a)--text— опционально, путь к файлу с текстом (txt, lrc, srt)--output— опционально, путь к выходному файлу (по умолчаниюoutput.mp4)
Шаг 1: Транскрипция
- Если
--textне передан → запустить Whisper на аудио - Whisper возвращает сегменты с таймингами
[{start, end, text}] - Если
--textпередан:.lrc/.srt→ парсить тайминги напрямую.txt→ выровнять текст по аудио через Whisper (forced alignment)
Шаг 2: NLP-анализ (для фона)
- Отправить полный текст в GigaChat
- Промпт: "Определи настроение и 3-5 ключевых визуальных сцен для этой песни. Ответь JSON: {mood: str, scenes: [str]}"
- Пример ответа:
{"mood": "romantic", "scenes": ["sunset beach", "city lights", "rain"]}
Шаг 3: Подбор видео-фона
- Взять первую сцену из
scenes - Запрос к Pexels API:
GET /videos/search?query={scene}&per_page=3 - Скачать первый подходящий клип (HD, landscape)
- Зациклить клип до длины аудио (loop)
- Если Pexels не вернул результат → использовать чёрный фон
Шаг 4: Рендер видео
- Разрешение: 1280x720
- Фреймрейт: 30fps
- Фон: видео-клип (зациклен)
- Текст: текущая строка по центру внизу экрана
- Шрифт: белый, размер 48px, с чёрной тенью
- Подсветка активной строки: жёлтый цвет
- Fade-in/out: 0.3 сек
- Аудио: оригинальный файл встроен в видео
- Формат выхода: mp4 (H.264 + AAC)
Структура проекта
tasks/karaoke/
├── PROJECT.md
├── karaoke.py # точка входа
├── transcribe.py # Whisper транскрипция
├── nlp.py # GigaChat NLP-анализ
├── video_bg.py # Pexels API + скачивание фона
├── render.py # FFmpeg/MoviePy рендер
├── requirements.txt
└── README.md
Конфигурация / секреты
Читать из переменных окружения (или из ~/.openclaw/.env):
PEXELS_API_KEY— ключ Pexels API (нужно получить на pexels.com/api)GIGACHAT_BASE_URL—https://185.130.212.192:8443(прокси)OPENAI_API_KEY— если используется OpenAI Whisper API (опционально, можно local)
Ограничения MVP
- Только один видео-фон на всю песню (не меняется по сценам)
- Нет UI — только CLI
- Нет предпросмотра
- Рендер может занять 1-5 мин для песни 3-5 мин
Критерии готовности
python karaoke.py --audio test.mp3→ генерируетoutput.mp4- Текст синхронизирован с аудио (±0.5 сек)
- Видео-фон подобран автоматически (или чёрный если API недоступен)
- Файл воспроизводится в VLC/браузере без ошибок
requirements.txtзаполнен,README.mdс инструкцией запуска
Что НЕ нужно в MVP
- UI/веб-интерфейс
- Смена фона по сценам
- Дуэт (два текста)
- Экспорт SRT/LRC
- Ручная коррекция таймингов
Создано: 2026-04-29 | Проект: proj_karaoke