Как бот создаёт видео: архитектура за одну минуту
Прежде чем писать код, важно понять, что бот сам по себе видео не «рисует». Он — посредник между пользователем и движком генерации. Вот полная цепочка:
Три подхода к генерации видео — какой выбрать
«Создать видео» может означать очень разное. От выбранной задачи зависит весь технологический стек:
| Подход | Что делает | Сложность | Когда выбирать |
|---|---|---|---|
| Шаблонный рендер ffmpeg / MoviePy |
Вставляет текст пользователя в готовый шаблон: слайды, субтитры, озвучка | Низкая | Массовый контент: цитаты, факты, карточки |
| Обработка загруженного ffmpeg + фильтры |
Бот получает видео от пользователя и преобразует: обрезка, сжатие, стикер, GIF | Средняя | Утилитарные боты: конвертеры, кружки, стикеры |
| Генерация нейросетью видео-API |
Промпт пользователя уходит в модель text-to-video, бот ждёт результат и отдаёт его в чат | Высокая | Уникальные ролики по описанию, креативные проекты |
Пошаговая инструкция: бот за пять шагов
Получение токена через BotFather
В Telegram открывается диалог с официальным ботом @BotFather. Команда /newbot запускает создание: бот попросит имя и username (обязательно заканчивается на «bot»). В ответ приходит токен вида 123456789:AAE… — это ключ к API, который нельзя публиковать.
Установка библиотек
Базовый стек — Python 3.10+, фреймворк aiogram и ffmpeg для работы с видео:
pip install aiogram moviepy
# ffmpeg ставится отдельно: apt install ffmpeg / brew install ffmpeg
Скелет бота: приём текста от пользователя
Минимальный обработчик: всё, что не команда, считаем запросом на генерацию видео:
from aiogram import Bot, Dispatcher, F from aiogram.types import Message, FSInputFile from aiogram.filters import Command bot = Bot("ВАШ_ТОКЕН") dp = Dispatcher() @dp.message(Command("start")) async def start(m: Message): await m.answer("Отправьте текст — я превращу его в видео 🎬") @dp.message(F.text) async def make_video(m: Message): await m.answer("⏳ Генерирую видео, это займёт около минуты…") path = render_video(m.text, m.from_user.id) await m.answer_video(FSInputFile(path))
Рендер видео: функция render_video
Самый простой рабочий вариант — слайд с текстом на фоне, собранный через MoviePy или одной командой ffmpeg:
ffmpeg -f lavfi -i color=c=0xD80621:s=1080x1920:d=5 \ -vf "drawtext=text='Привет мир':fontcolor=white:fontsize=80:x=(w-text_w)/2:y=(h-text_h)/2" \ -pix_fmt yuv420p output.mp4
Команда создаёт вертикальный ролик 9:16 длительностью 5 секунд с текстом по центру. Заменяя текст на запрос пользователя, бот генерирует персональные ролики. Дальше наращиваются слои: фоновая картинка, музыка, озвучка текста через TTS, анимация появления.
Запуск: polling или webhook
Для старта достаточно опроса серверов Telegram — одна команда await dp.start_polling(bot) и бот работает даже на домашнем компьютере. При высокой нагрузке переходят на webhook: Telegram сам отправляет обновления на сервер, что снижает задержку ответа.
Главная ловушка: блокировка на время рендера
Нажав на вкладки ниже, можно увидеть, что происходит с ботом при рендере видео без очереди задач и с ней:
⚠ Все остальные пользователи висят без ответа, пока не закончится чужой рендер
Ограничения Telegram Bot API, о которых нужно знать
Именно лимиты чаще всего превращают «рабочий прототип» в «что-то сломалось»:
Чеклист перед запуском в продакшн
Итог: бот, создающий видео прямо в Telegram, состоит из трёх слоёв — приём запроса, фоновый рендер, доставка результата.
Начните с шаблонного рендера на ffmpeg: рабочая версия собирается за вечер, а масштабировать её можно до полноценного видео-конвейера