title: Python boto3 multipart upload video to aws s3
body: <p>I want to upload a video in multiparts, I have a function that reads a video do some processing on the frame and now instead of writing it to local disk i want to send it to aws s3.
  I have figured out way to upload in parts using boto3 client</p>
  
  <pre><code>import cv2
  import boto3
  
  
  multipart_upload = MultipartUpload(&lt;AWS_BUCKET_NAME&gt;, &lt;AWS_KEY&gt;)
  multipart_upload.open()
  video_path = "video.mp4"
  cap = cv2.VideoCapture(video_path)
  ok = cap.isOpened()
  while ok:
      ok,frame = cap.read()
  
      # do some processing on the frame
  
      """ then some code to convert these frames into video file writable bytes and collect bytes upto 5MB (specified in aws docs and pass to upload method)"""
  
      byte_data = frames_to_video_files(frame)  # i am not able to figure out how this part will work
  
      multipart_upload.upload(byte_data)
  
  multipart_upload.close()
  
  
  class MultipartUpload:
  
     def __init__(self,bucket,key):
         self.bucket = bucket
         self.key = key
         self.s3 = boto3.client("s3")
         self.parts = []
  
     def open(self):
         response = s3.create_multipart_upload(ACL="public-read",Bucket=self.bucket,ContentType="video/mp4",Key=self.key)
         self.upload_id = response["UploadId"]
  
     def upload(self,bytes_data,part_number):
         response = self.s3.upload_part(Bucket=self.bucket,Key=self.key,Body=bytes_data,PartNumber=part_number,UploadId=self.upload_id)
         self.parts.append({"ETag":response["ETag"],"PartNumber":part_number})
  
     def close(self):
         response = self.s3.complete_multipart_upload(Bucket=self.bucket,Key=self.key,UploadId=self.upload_id,MultipartUpload={"Parts":self.parts})
         print(response)
  
  
  
  </code></pre>