繁体   English   中英

使用 OpenCV 将视频帧添加到列表会占用 RAM 中的大量资源

[英]Appending video frame to list using OpenCV take a lot of resources in RAM

我使用 opencv 在磁盘中读取了大小为 47 mb 的视频,并将其保存到磁盘。 生成的视频大小为 25 mb。 同时,我创建了一个列表,在其中添加了视频中的帧。 将此列表转换为数组时,数组的大小为 2449.51。 为什么会这样? 可能有一些压缩算法在保存时减小了大小,我可以在我的阵列上应用它们吗?

def read_face(vid_path):
    cap = cv2.VideoCapture(vid_path) 
    fps = cap.get(cv2.CAP_PROP_FPS)
    width  = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH ))
    height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT ))
    
    total_frames=[]
    fourcc = cv2.VideoWriter_fourcc(*"XVID")
    temp_name='outvide.mp4'
    out = cv2.VideoWriter(temp_name,fourcc, fps, (width,height))
    
    while(cap.isOpened()):  # Read until the video is completed
        ret, frame = cap.read()    # Capture frame by frame
        if ret:
                total_frames.append(frame)
                out.write(frame)
        else:
            break

    cap.release() 
    return np.array(total_frames)

这就是我以 MB 为单位计算帧数组大小的方式。 round(frames.nbytes / 1024 / 1024,2)

我怎样才能减小这个尺寸?

视频以压缩格式保存。 MP4、MOV 等是表示压缩格式以及音频等其他信息的编解码器。

如果您想减小框架列表的大小,可以在添加框架之前调整它们的大小。

if ret:
    cv2.resize(frame, 0.5, 0.5)
    total_frames.append(frame)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM