我有一个视频文件,我现在想要的就是将所有视频的帧放入Python列表中。我正在使用Python的OpenCV库来完成它。但我的笔记本电脑永远不会这样做。它只是卡住了我必须切断电源重新启动它。我的猜测是由于内存不足,python列表无法处理所有帧。这是代码,我相信它是做我想要的正确方法(语法)。现在我需要为什么笔记本电脑卡住以及使用列表以外的任何解决方案。
import cv2
video = cv2.VideoCapture("myvideo.mp4")
all_frames = []
while 1:
ret, frame = video.read()
if ret:
all_frames.append(frame)
continue
break
下面是一些可能对您有帮助的视频数据 视频包含7000帧 每一帧都有(1080,1920)维度
答案 0 :(得分:4)
你不能这样做。
读取时,帧从<{1}}到原始输出未压缩,如每像素3个字节等。
所以你想存储总共7000 * 3 * 1080 * 1920字节,大约是43 Gb !!
更不用说由于.mp4
而不断调整列表大小会创建更多副本,所以即使如果你有可用的内存,这也会很长。
这个计划背后的想法可能是分析框架。所以基本上你不需要同时在内存中所有帧。
在这种情况下,读取少量它们(在旋转缓冲区中),执行形状检测分析,无论如何,存储分析的数据(小得多)并丢弃原始数据,重复(程序执行实时分析)无法存储所有数据,因为它们永远在运行