Как конвертировать видео на s3 с помощью python, не загружая его?

#python #python-3.x #amazon-web-services #amazon-s3

Вопрос:

У меня в корзине s3 есть куча видео, и я хочу конвертировать их формат с помощью python, но в настоящее время я застрял на одной проблеме. Мой скрипт на python для извлечения всех объектов bucket выглядит следующим образом.

 s3 = boto3.client('s3',
            region_name = S3_REGION,
            aws_access_key_id = S3_ACCESS_KEY_ID, 
            aws_secret_access_key = S3_ACCESS_SECRET_KEY)
        result = s3.list_objects(Bucket = bucket_name, Prefix='videos/')
        for o in result.get('Contents'):
            data = s3.get_object(Bucket=bucket_name, Key=o.get('Key'))
 

А для преобразования видеоформата я использовал библиотеку MoviePy, которая преобразует видеоформат в mp4

 import moviepy.editor as moviepy
clip = moviepy.VideoFileClip("video-529.webm")
clip.write_videofile("converted-recording.mp4")
 

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

Комментарии:

1. S3-это просто большое, тупое хранилище. Он ничего не может выполнить. Вам придется загружать, конвертировать и загружать.

2. Есть некоторые сервисы AWS, которые вы можете использовать для конвертации, преобразования и т. Д. В AWS, поэтому вам не нужно их загружать. Один пример: aws.amazon.com/blogs/networking-and-content-delivery/…

Ответ №1:

Вы правы. Библиотеки требуют, чтобы видеофайл находился на «локальном диске», поэтому вы должны использовать download_file() вместо get_object() .

В качестве альтернативы вы можете использовать Amazon Elastic Transcoder для перекодирования файла «как услуги», а не делать это в своем собственном коде. (Взимается дополнительная плата в зависимости от длины видео.)