Python将视频存储为hdf5,从而产生较大的文件大小
我尝试将视频剪辑逐帧存储到hdf5文件中。 到目前为止,我的代码还在运行,但我注意到,与源视频文件相比,hdf5文件的大小要大10倍多 输入文件:avi 200 x 126px,持续时间:16分钟,大小:82 MB 输出文件:hdf5,gzip压缩,压缩=9,大小:1 GB 存储帧的代码非常简单:Python将视频存储为hdf5,从而产生较大的文件大小,python,video,hdf5,Python,Video,Hdf5,我尝试将视频剪辑逐帧存储到hdf5文件中。 到目前为止,我的代码还在运行,但我注意到,与源视频文件相比,hdf5文件的大小要大10倍多 输入文件:avi 200 x 126px,持续时间:16分钟,大小:82 MB 输出文件:hdf5,gzip压缩,压缩=9,大小:1 GB 存储帧的代码非常简单: import h5py from skvideo.io import VideoCapture frames = [] cap = VideoCapture('/home/ubuntu/Pycharm
import h5py
from skvideo.io import VideoCapture
frames = []
cap = VideoCapture('/home/ubuntu/PycharmProjects/video2H5Test/data/video_F100_scaled2.avi')
cap.open()
it = 0
while True:
retval, image = cap.read()
if image != None:
frames.append(image)
it += 1
if (it % 1000 == 0):
print('Processed %d frames so far' % (it))
if not retval:
break
with h5py.File('./test3.hdf5','w') as h5File:
h5File.create_dataset('camera1',data=frames,compression='gzip',compression_opts=9)
正如您所看到的,我已经使用gzip压缩了我的数据集
是否有其他方法可以节省内存消耗?输出hdf文件中的分块方案是什么?压缩是由块来完成的,因此考虑到视频中的大部分信息不会随帧而变化,当同一块中存在不同帧时,应该可以获得更好的压缩比。如果您提供示例视频文件,我可以尝试一下。您在输出hdf文件中的分块方案是什么?压缩是由块来完成的,因此考虑到视频中的大部分信息不会随帧而变化,当同一块中存在不同帧时,应该可以获得更好的压缩比。如果您提供示例视频文件,我可以试用。对于遇到相同问题的人: 使用第一个图像初始化数据集:
myDataSet = myFile.create_dataset('someName', data=image[None, ...], maxshape=(
None, image.shape[0], image.shape[1], image.shape[2]), chunks=True)
要添加图像,只需调整整个数据集的大小:
myDataSet.resize(myDataSet.len() + 1, axis=0)
myDataSet[myDataSet.len() - 1] = image
对于遇到相同问题的人: 使用第一个图像初始化数据集:
myDataSet = myFile.create_dataset('someName', data=image[None, ...], maxshape=(
None, image.shape[0], image.shape[1], image.shape[2]), chunks=True)
要添加图像,只需调整整个数据集的大小:
myDataSet.resize(myDataSet.len() + 1, axis=0)
myDataSet[myDataSet.len() - 1] = image
现在没有分块。有没有办法在我的while循环中保存数据集?如果是较大的视频文件,帧列表可能会非常大。是的,您可以部分编写hdf文件。这实际上是这种文件格式的优点之一。@kakk11:你能看看这个问题吗?我有同样的问题,正如上面所说,现在没有块。有没有办法在我的while循环中保存数据集?如果是较大的视频文件,帧列表可能会非常大。是的,您可以部分编写hdf文件。这实际上是这种文件格式的优点之一。@kakk11:你能看看这个问题吗?我有和上面一样的问题,你忘了添加压缩。如果没有它,文件大小与为每个帧创建单独的数据集相同,但需要10倍以上的时间您忘记添加压缩。没有它,文件大小与为每个帧创建单独的数据集相同,但所需时间要长10倍以上