[英]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.