我有一个在 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 小时的摄像机录制,在运动期间会切换到高分辨率。