首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python存储视频作为hdf5导致较大的文件大小

Python存储视频作为hdf5导致较大的文件大小
EN

Stack Overflow用户
提问于 2017-06-01 13:51:45
回答 2查看 3.5K关注 0票数 0

我试着把一个视频剪辑逐帧存储到一个hdf5文件中。到目前为止,我的代码还在工作,但我注意到,与原始视频文件相比,hdf5文件的大小要大10倍以上。

输入文件:avi 200 x 126 MB,持续时间: 16分钟,大小:82 MB

输出文件:hdf5,gzip压缩,压缩= 9,大小:1 GB

存储框架的代码非常简单:

代码语言:javascript
复制
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压缩数据集。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-10 13:17:04

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

使用第一个图像初始化数据集:

代码语言:javascript
复制
myDataSet = myFile.create_dataset('someName', data=image[None, ...], maxshape=(
                None, image.shape[0], image.shape[1], image.shape[2]), chunks=True)

要添加图像,只需调整整个数据集的大小:

代码语言:javascript
复制
myDataSet.resize(myDataSet.len() + 1, axis=0)
myDataSet[myDataSet.len() - 1] = image
票数 2
EN

Stack Overflow用户

发布于 2017-06-02 07:57:36

在输出hdf文件中,您的分块方案是什么?压缩是由块完成的,因此,考虑到视频中的大部分信息在帧间不会发生变化,在同一块中存在不同的帧时,应该可以获得更好的压缩比。如果你提供样本视频文件,我可以试一试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44309437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档