Как скачать видео aiogram?

Имею хэндлер:

@dp.message_handler(content_types=["video"])

Как через него сохранить видео, которое поступит на вход?


Ответы (1 шт):

Автор решения: Ste3pze

Я использую такой подход

@dp.message_handler(content_types=["video"])
async def download_video(message: types.Message):
    file_id = message.video.file_id # Get file id
    file = await bot.get_file(file_id) # Get file path
    await bot.download_file(file.file_path, "video.mp4") # Download video and save output in file "video.mp4"

Сначала мы получаем id видео файла, после получаем путь к файлу, и уже потом сохраняем результат в файл video.mp4
Важно знать что формат MP4 является стандартным для телеграма, в других форматах лучше не пробовать сохранять.

Если вы не хотите перезаписывать файл после каждой загрузки видео, попробуйте этот код, есть решения элегантнее, но это в самый раз на скорую руку.

@dp.message_handler(content_types=["video"])
async def download_video(message: types.Message):
    file_id = message.video.file_id # Get file id
    file = await bot.get_file(file_id) # Get file path
    video_number = 0 # Number video file
    while(os.path.isfile(f"video{video_number}.mp4")): # If the file exists, add one to the number
        video_number += 1 
    await bot.download_file(file.file_path, f"video{video_number}.mp4") # Download video and save output in file "video.mp4"

А привязать конкретный видеофайл к конкретному пользователю вам поможет база данных. В ней вы можете связать id файла, с пользовательским id. И когда необходимо взаимодействовать с этими данными.

Документация aiogram (загрузка файлов)

→ Ссылка