from aiogram import Bot, Dispatcher, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.utils import executor
from moviepy.editor import VideoFileClip, concatenate_videoclips
import logging
API_TOKEN = 'tok' # Замените на ваш токен
# Настройка логирования
logging.basicConfig(level=logging.INFO)
# Инициализация бота и диспетчера
bot = Bot(token=API_TOKEN)
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)
@dp.message_handler(commands=['start'])
async def start_command(message: types.Message):
await message.reply("Отправьте мне видео, и я преобразую его в видеокружок.")
@dp.message_handler(content_types=types.ContentType.VIDEO)
async def process_video(message: types.Message):
try:
video_file = await bot.get_file(message.video.file_id)
await video_file.download("input_video.mp4")
# Преобразование видео в видеокружок
input_video = VideoFileClip("input_video.mp4")
w, h = input_video.size
circle_size = 360
aspect_ratio = float(w) / float(h)
if w > h:
new_w = int(circle_size * aspect_ratio)
new_h = circle_size
else:
new_w = circle_size
new_h = int(circle_size / aspect_ratio)
resized_video = input_video.resize((new_w, new_h))
output_video = resized_video.crop(x_center=resized_video.w / 2, y_center=resized_video.h / 2, width=circle_size, height=circle_size)
# Загрузка дополнительного видео для добавления
additional_video = VideoFileClip("big.mp4")
# Проверка длины дополнительного видео и обрезка до 1 секунды
if additional_video.duration > 1:
additional_video = additional_video.subclip(0, 1)
# Конкатенация обработанного видео с дополнительным видео
final_video = concatenate_videoclips([output_video, additional_video])
# Сохранение финального видео с высоким качеством
final_video.write_videofile("output_video.mp4", codec="libx264", audio_codec="aac", bitrate="5M", fps=30)
# Отправка финального видеокружка в чат
with open("output_video.mp4", "rb") as video:
await bot.send_video_note(chat_id=message.chat.id, video_note=video, duration=int(final_video.duration), length=circle_size)
except Exception as e:
logging.error(f"Произошла ошибка: {e}")
await message.reply("Произошла ошибка при обработке видео. Пожалуйста, попробуйте еще раз.")
if __name__ == "__main__":
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.utils import executor
from moviepy.editor import VideoFileClip, concatenate_videoclips
import logging
API_TOKEN = 'tok' # Замените на ваш токен
# Настройка логирования
logging.basicConfig(level=logging.INFO)
# Инициализация бота и диспетчера
bot = Bot(token=API_TOKEN)
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)
@dp.message_handler(commands=['start'])
async def start_command(message: types.Message):
await message.reply("Отправьте мне видео, и я преобразую его в видеокружок.")
@dp.message_handler(content_types=types.ContentType.VIDEO)
async def process_video(message: types.Message):
try:
video_file = await bot.get_file(message.video.file_id)
await video_file.download("input_video.mp4")
# Преобразование видео в видеокружок
input_video = VideoFileClip("input_video.mp4")
w, h = input_video.size
circle_size = 360
aspect_ratio = float(w) / float(h)
if w > h:
new_w = int(circle_size * aspect_ratio)
new_h = circle_size
else:
new_w = circle_size
new_h = int(circle_size / aspect_ratio)
resized_video = input_video.resize((new_w, new_h))
output_video = resized_video.crop(x_center=resized_video.w / 2, y_center=resized_video.h / 2, width=circle_size, height=circle_size)
# Загрузка дополнительного видео для добавления
additional_video = VideoFileClip("big.mp4")
# Проверка длины дополнительного видео и обрезка до 1 секунды
if additional_video.duration > 1:
additional_video = additional_video.subclip(0, 1)
# Конкатенация обработанного видео с дополнительным видео
final_video = concatenate_videoclips([output_video, additional_video])
# Сохранение финального видео с высоким качеством
final_video.write_videofile("output_video.mp4", codec="libx264", audio_codec="aac", bitrate="5M", fps=30)
# Отправка финального видеокружка в чат
with open("output_video.mp4", "rb") as video:
await bot.send_video_note(chat_id=message.chat.id, video_note=video, duration=int(final_video.duration), length=circle_size)
except Exception as e:
logging.error(f"Произошла ошибка: {e}")
await message.reply("Произошла ошибка при обработке видео. Пожалуйста, попробуйте еще раз.")
if __name__ == "__main__":