Главная Веб-разработка Как я сделал Telegram-кружки из обычного видео с помощью Python, ffmpeg и магии

Как я сделал Telegram-кружки из обычного видео с помощью Python, ffmpeg и магии

от admin

Создание Telegram-бота, который автоматически превращает любое видео в формат видео-сообщения (кружка). Проект начинался с Python-скрипта на базе moviepy и ffmpeg, затем был обёрнут в Telegram-бота с помощью python-telegram-bot

08 открытий19 показов

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

Решил не останавливаться на одном видео — и написал автоматизированный скрипт на Python, а позже — и Telegram-бота, который превращает любое видео в Telegram-кружок. Рассказываю по порядку.

Что такое Telegram-кружок (video message)

С технической точки зрения это:

  • .mp4 видео;
  • квадратное (1:1), отображается в виде круга в клиенте;
  • длительность — до 60 секунд;
  • кодек H.264, контейнер MP4;
  • ограниченный битрейт (до 1 МБ/минуту — неофициально);
  • поддерживается только в мобильных клиентах (на десктопе выглядит как обычное видео).

Цель

Сделать скрипт (и впоследствии бота), который:

  • принимает любое видео;
  • обрезает до 1:1;
  • уменьшает длительность до 60 секунд;
  • кодирует в H.264;
  • сохраняет в виде MP4, подходящего для отправки как кружок.

Этап 1: Простой скрипт на Python

Используем moviepy и ffmpeg. Убедитесь, что ffmpeg установлен в системе (ffmpeg -version).

Установка зависимостей

			pip install moviepy 		

Код конвертации видео

			from moviepy.editor import VideoFileClip import os  def make_circle_video(input_path, output_path, max_duration=60):     clip = VideoFileClip(input_path)      # Обрезка до 1 минуты     if clip.duration > max_duration:         clip = clip.subclip(0, max_duration)      # Обрезка до квадрата по центру     size = min(clip.w, clip.h)     x_center = clip.w / 2     y_center = clip.h / 2     clip = clip.crop(         x_center=x_center,         y_center=y_center,         width=size,         height=size     )      # Сохранение     clip.write_videofile(         output_path,         codec="libx264",         audio_codec="aac",         fps=30,         threads=4,         bitrate="800k"     )      print("Готово! Сохранено в:", output_path)  # Пример использования make_circle_video("input.mp4", "circle_output.mp4") 		

После этого вы можете отправить полученный файл в Telegram → нажать на скрепку → выбрать видео → и выбрать опцию 📹 Отправить как видео-сообщение (в мобильной версии).

Читать также:
Sublime Text: лёгкий и мощный текстовый редактор

Этап 2: Обёртка в Telegram-бота

Когда всё заработало локально, решил завернуть это в бота, чтобы не запускать скрипт вручную. Использовал python-telegram-bot, Flask и простой сервер на VPS.

Архитектура:

  • Telegram API (бот через Webhook)
  • Обработка видео — через тот же скрипт
  • Временное хранилище — /tmp и очистка старых файлов.

Логика:

  • Получает видео
  • Обрабатывает
  • Отправляет обратно результат

Фрагмент логики обработки:

			from telegram import Update from telegram.ext import ApplicationBuilder, MessageHandler, filters, ContextTypes import asyncio  async def handle_video(update: Update, context: ContextTypes.DEFAULT_TYPE):     video_file = await update.message.video.get_file()     input_path = f"/tmp/{video_file.file_unique_id}.mp4"     output_path = f"/tmp/circle_{video_file.file_unique_id}.mp4"      await video_file.download_to_drive(input_path)      make_circle_video(input_path, output_path)      await update.message.reply_video(video=open(output_path, 'rb'), supports_streaming=True) 		

Добавил команды /start и /feedback, логику очередей и обработку ошибок. Всё — на минималках, но работает.

Ознакомится с результатом: @roundifyrobot

Что делает:

  • принимает видео до 1 минуты;
  • обрезает, сжимает, выдает кружок;
  • можно сразу переслать в канал или другу;
  • добавил простую систему фидбэка через /feedback.

Выводы

Этот мини-проект оказался полезным не только как утилита, но и как:

  • Тренировка работы с видео в Python;
  • Практика работы с Telegram Bot API;
  • Реальный кейс для обработки и доставки мультимедиа в чатах;
  • Возможность собрать аналитику, статистику, запросы, баги и развивать дальше.

Если вы тоже хотите сделать своего Telegram-бота с мультимедийной обработкой — берите этот проект за основу, добавляйте свои фишки, улучшайте UI/UX и выкладывайте в open source. Это отличный формат для pet-проекта или MVP стартапа.

Похожие статьи