根据分辨率变化分割视频

根据分辨率变化分割视频

我有一个在 3008x3008 和 480x480 分辨率之间切换的视频。我想将视频的每个 3008x3008 部分提取到自己的视频中。我已经能够使用 Python 和 OpenCV 实现这一点,但这很慢并且不能保持可变的帧速率。

import cv2 as cv

def process_day(video_file: str):
    cap = cv.VideoCapture(video_file)
    frame_count = 0
    fourcc = cv.VideoWriter_fourcc(*'H264')
    fps = 8  # Variable frame rates will not be maintained.
    video_writer = None
    while cap.isOpened():
        _, frame = cap.read()
        frame_count += 1
        if frame.shape[:2] == (3008, 3008):
            if video_writer is None:
                video_writer = cv.VideoWriter(f"{frame_count}.avi", fourcc, fps, frame.shape[:2])
            video_writer.write(frame)
        else:
            video_writer = None
        if frame_count % 1000 == 0:
            print(f"{frame_count/cap.get(cv.CAP_PROP_FRAME_COUNT)}% Processed.")

我希望有一个更快的解决方案,或者一些 FFmpeg 魔法。保持可变帧速率或能够为输出视频添加时间戳将是一个额外的好处。

编辑:为了便于理解,我想对很多视频进行此操作。大多数视频都是 24 小时的摄像机录制,在运动期间会切换到高分辨率。

相关内容