从字节读取视频

Posted

技术标签:

【中文标题】从字节读取视频【英文标题】:Read video from bytes 【发布时间】:2018-03-20 01:23:22 【问题描述】:

我正在使用Flask 编写简单的REST API,它读取上传的视频并返回一些JSON。视频通过 POST 请求作为文件发送,内容类型为application/x-www-form-urlencoded

我想使用opencv 处理它,但我不知道如何从原始二进制字符串中读取它。 我想出的唯一解决方案是将视频保存到文件并使用 opencv VideoCapture 类读取它。但是我想避免 IO 操作,因为我认为它会减慢我的 API。

所以我的问题是:

如何将视频从原始字节表示形式转换为 opencv 表示形式(numpy 数组列表)?

【问题讨论】:

这个运气好吗? 不。我的应用只使用了视频中的几帧,因此我对其进行了修改以接受图像而不是整个视频。 【参考方案1】:

如果您将视频作为文件上传到服务器,那么听起来您已经将其保存到文件中 - 在这种情况下,简单地从文件中读取它可能不会那么低效。

视频通常太大而无法放入内存,因此无论如何它可能会以某种方式进入磁盘并返回。

如果您的意思是您希望您的 openCV 程序直接接受流式视频,进行处理,然后做任何您想做的事情(例如保存到文件、显示、流式传输到其他地方),那么通常最容易流式传输如果可能,将视频发送到 OpenCV 程序并使用 OpenCV 直接读取流:

VideoCapture cap;
cap.open(yourStreamURL);

【讨论】:

在许多 ML 应用程序中,视频都很短(10 秒),因此它们可以很容易地存储在内存中。此外,机器学习机器通常具有 200GB 以上的大量 RAM。

以上是关于从字节读取视频的主要内容,如果未能解决你的问题,请参考以下文章

libevent:从缓冲区读取所有字节

java基础(IO流---字节流字符流字节数组流)

从 golang 中的缓冲读取器读取特定数量的字节

从波形文件python读取字节

Arduino 可以从控制台读取字节,但不能从 java

从字节数组中读取短