如何解决逐帧存储视频以进行视频编辑的最佳方法是什么?
我正在尝试创建视频编辑器,显然,您可以在其中删除和添加帧。我的想法是将视频文件本身转换为可以操纵的帧数组。
我使用this answers code做到了。这对于较小的视频文件可以很好地工作,但是对于较大的视频文件,可能会迅速发生内存错误-因为,当然,内存正在存储数百个未压缩的图像。
这是我使用的确切代码:
import numpy
import cv2
def video_to_frames(file):
"""Splits a video file into a numpy array of frames"""
video = cv2.VideoCapture(file)
frame_count = int(video.get(cv2.CAP_PROP_FRAME_COUNT))
frame_width = int(video.get(cv2.CAP_PROP_FRAME_WIDTH))
frame_height = int(video.get(cv2.CAP_PROP_FRAME_HEIGHT))
buffer = numpy.empty((frame_count,frame_height,frame_width,3),numpy.dtype("uint8"))
index_count = 0
running = True
while(index_count < frame_count and running): #Reads each frame to the array
running,buffer[index_count] = video.read()
index_count += 1
video.release()
return buffer #Returns the numpy array of frames
print(video_to_frames("Video.mp4"))
最后,这是我得到的确切内存错误:MemoryError: Unable to allocate 249. GiB for an array with shape (46491,1000,1920,3) and data type uint8
所以我真的有两个问题:
- 这是处理视频的最有效方法吗?
- 如果是,该如何存储所有这些帧而又不会遇到内存错误?
谢谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。