Конвертация видео в кругляшок

Рейтинг: 1Ответов: 2Опубликовано: 20.05.2023

Код:

import telebot

token = ''
bot = telebot.TeleBot(token)


@bot.message_handler(commands = ['start'])
def start(message):
  bot.send_message(message.chat.id, '❗️ Привет, отправь видео')


@bot.message_handler(content_types=['video'])
def video_id(message):
  document_id = message.video.file_id
  file_info = bot.get_file(document_id)
  print(document_id)
  bot.send_message(message.chat.id, document_id)
  bot.send_video_note(message.chat.id, document_id)


bot.polling(none_stop=True)

Задача: на отправленное видео бот должен отвечать кругляшком телеграма, но он просто отсылает то же видео, в чем проблема?

Ответы

▲ 1

Если в качестве параметра при отправке указывать message.video.file_id, то видео не всегда пересылается кружочком, по этому перед отправкой это видео лучше сохранить, а уже потом отправлять. Выглядит это так:

@bot.message_handler(content_types=['video'])
def send_text(message):
    file_info = bot.get_file(message.video.file_id)
    downloaded_file = bot.download_file(file_info.file_path)
    with open('video.mp4', 'wb') as video:
        video.write(downloaded_file)
    bot.send_video_note(message.chat.id, open('video.mp4', 'rb'))

Так же имейте ввиду, для отправки видео кружком оно должно быть формата MPEG4, продолжительностью не более 1 минуты и иметь соотношение сторон 1:1

▲ 1

К сожалению, не могу комментировать ответ, данный выше.

Помимо требований в расширении mp4, соотношения сторон 1:1 и максимального веса 20 МБ экспериментальным путём выявлено требование в максимальном разрешении 600x600 пикселей, без соблюдения которого видео прикрепляется не в формате кружка, а в виде простого видео. Удивился, что в документации об этом ни слова.

Также отмечу, что манипуляции с разрешением и соотношением сторон я произвожу при помощи библиотеки moviepy, opencv не подходит, т.к. он работает только с картинкой, но не со звуком.