Python将视频存储为hdf5,从而产生较大的文件大小

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

我尝试将视频剪辑逐帧存储到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/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倍以上