Python将视频存储为hdf5导致文件大小

时间:2017-06-01 13:51:46

标签: 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/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来压缩我的数据集。

还有其他方法可以节省内存消耗吗?

2 个答案:

答案 0 :(得分:2)

对于那些遇到同样问题的人:

使用第一张图片初始化数据集:

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

答案 1 :(得分:0)

输出hdf文件中的分块方案是什么?压缩是通过块完成的,因此考虑到视频中的大多数信息不会在帧与帧之间发生变化,当同一块中存在不同的帧时,您应该获得更好的压缩率。如果您提供示例视频文件,我可以尝试一下。