Como dividir um vídeo em partes usando Python?

Jan 05 2021

Preciso dividir um arquivo de vídeo de qualquer tamanho em várias partes de tamanho máximo de até 75 MB. Encontrei este código, mas não funciona:

import cv

capture = cv.CaptureFromFile(filename)
while Condition1:
    # Need a frame to get the output video dimensions
    frame = cv.RetrieveFrame(capture) # Will return None if there are no frames
    # New video file
    video_out = cv.CreateVideoWriter(output_filenameX, CV_FOURCC('M','J','P','G'), capture.fps, frame.size(), 1)
    # Write the frames
    cv.WriteFrame(video_out, frame)
    while Condition2:
        frame = cv.RetrieveFrame(capture) # Will return None if there are no frames
        cv.WriteFrame(video_out, frame)

Respostas

AvenDesta Jan 05 2021 at 07:30

Aqui está um script que acabei de criar usando MoviePy. Mas em vez de dividir pelo tamanho do byte, ele divide pela duração do vídeo. Portanto, se você definir divide_into_countcomo 5 e tiver um vídeo com duração de 22 minutos, obterá vídeos com duração de 5, 5, 5, 5, 2 minutos.

from moviepy.editor import VideoFileClip
from time import sleep

full_video = "full.mp4"
current_duration = VideoFileClip(full_video).duration
divide_into_count = 5
single_duration = current_duration/divide_into_count
current_video = f"{current_duration}.mp4"

while current_duration > single_duration:
    clip = VideoFileClip(full_video).subclip(current_duration-single_duration, current_duration)
    current_duration -= single_duration
    current_video = f"{current_duration}.mp4"
    clip.to_videofile(current_video, codec="libx264", temp_audiofile='temp-audio.m4a', remove_temp=True, audio_codec='aac')

    print("-----------------###-----------------")