我想用plotly dash处理一个上传组件收到的视频。目前我正在创建一个临时文件,然后用opencv阅读视频。但是,我想避免将文件写入磁盘。有没有直接从内存处理视频的方法?我的代码如下所示:
def process_motion(contents, filename):
print("Processing video: " + filename)
content_type, content_string = contents.split(',')
decoded = base64.b64decode(content_string)
with tempfile.NamedTemporaryFile() as temp:
temp.write(decoded)
cap = cv2.VideoCapture(temp.name)
frames = cap.get(cv2.CAP_PROP_FRAME_COUNT)
fps = cap.get(cv2.CAP_PROP_FPS)
# some calculations
1条答案
按热度按时间nnsrf1az1#
有趣的问题
正如@Dan Mašek正确提到的,正确的关键字应该是video decoding。问题是,像OpenCV一样,Python中必须使用FFMPEG作为后端的解码库,其中大多数是FFMPEG可执行文件的 Package 器(在子进程中运行FFMPEG),由于FFMPEG接受解码的文件路径(或解码视频流的URL),因此这些 Package 器也接受文件路径。
AFAIK是唯一一个接受字节作为输入来解码视频并获取所有帧的 Package 器库,它是imageio,在后台也将字节转换为临时文件,并使用FFMPEG解码。
下面是使用imageio和您的解决方案的比较。
注意:如果你能为FFMPEG创建一个python Package 器,就可以将字节数组转换成FFMPEG流解码函数可接受的格式。