gpt4 book ai didi

sqlite - 将视频存储在 SQLite 数据库中?

转载 作者:太空宇宙 更新时间:2023-11-03 21:03:33 24 4
gpt4 key购买 nike

我正在研究一种算法,该算法需要非常快速地随机访问可能很长的视频(至少 30 分钟)中的视频帧。我目前正在使用 OpenCV 的 VideoCapture 来阅读我的视频,但是搜索功能要么损坏要么非常慢。到目前为止,我发现最好的方法是在 MKV 容器中使用 MJPEG 编解码器,但速度不够快。

我可以选择任何视频格式,甚至可以创建一个新格式。存储空间不是问题(当然在某种程度上)。唯一的要求是尽可能快地寻找视频中的任何位置。理想情况下,我希望能够同时访问多个帧,以利用我的四核 CPU。

我知道关系数据库非常适合存储大量数据,它们允许同时读取访问,并且在使用索引时速度非常快。

SQLite 是否适合我的特定需求?我计划存储压缩为 JPEG 格式的每个视频帧,并使用帧编号索引来快速访问它们。

编辑:对我来说,一个只是一个图像,而不是整个视频。一个 25 fps 的 3000 万视频包含 30*60*25=45000 帧,我希望能够使用它的编号快速获得其中之一。

编辑:对于那些可能感兴趣的人,我最终实现了一个自定义视频容器,将每个帧保存在固定大小的 block 中(因此,可以直接计算任何帧的位置!)。图像使用 turbojpeg 库压缩,文件访问是多线程的(对 NCQ 友好)。瓶颈不再是 HDD,我终于获得了更好的性能 :)

最佳答案

我认为使用 SQLite(或任何其他数据库引擎)不是解决您问题的好方法。数据库不是文件系统。

如果您需要的是非常快的随机访问,那么坚持使用文件系统,它是为这种用途设计的,并在考虑到这一点的情况下进行了优化。根据您的评论,您说 5 小时的视频需要 450k 文件,嗯,我认为这不是问题。当然,目录列表会有点长,但您将获得绝对最快 可能的随机访问。而且它肯定会比 SQLite 更快,因为您处于一个抽象级别之下。

如果您真的担心目录列表时间,您只需要像树一样组织您的文件夹结构。这将使您的路径更长,但上市速度更快。

关于sqlite - 将视频存储在 SQLite 数据库中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11072884/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com