Python ffmpeg-在内存中而不是磁盘中输出图像

Python ffmpeg-在内存中而不是磁盘中输出图像,python,ffmpeg,pipe,disk,Python,Ffmpeg,Pipe,Disk,我有一个python脚本,它基本上将视频转换成图像并存储在文件夹中,然后读取所有这些图像并从中提取信息,然后删除图像。由于写入图像的步骤非常慢,显然对我需要的东西没有用处,我想以某种方式将图像存储在内存中而不是磁盘中,从那里读取这些图像并执行操作,这将大大加快我的过程 现在,我的代码如下所示: 第一步: ffmpeg -i myvideo.avi -r 1 -f image2 C:\img_temp 第二步: for i in range(1, len(os.listdir(IMGTEMP))

我有一个python脚本,它基本上将视频转换成图像并存储在文件夹中,然后读取所有这些图像并从中提取信息,然后删除图像。由于写入图像的步骤非常慢,显然对我需要的东西没有用处,我想以某种方式将图像存储在内存中而不是磁盘中,从那里读取这些图像并执行操作,这将大大加快我的过程

现在,我的代码如下所示: 第一步:

ffmpeg -i myvideo.avi -r 1 -f image2 C:\img_temp
第二步:

for i in range(1, len(os.listdir(IMGTEMP)):
#My operations for each image
第三步:

for image in os.listdir(IMGTEMP):
        os.remove(IMGTEMP + "\\" + image)

简短的版本是,您可以使用ramdisk或类似的东西,因此文件实际上存储在内存中。然而,我想知道你的“每个图像的操作”。你真的需要他们的图像文件吗?如果您所做的只是读取它们的大小,那么为什么您需要一个图像(带有压缩/解压缩等)开销呢?为什么不直接使用FFmpeg API,读取AVI文件,解码帧,并直接对解码数据进行度量?

看一看。(有,但相当稀少。)

看起来您可以打开一个视频,然后在帧上迭代。

使用:


我使用库计算图像的散列值,需要实际图像对其执行一些操作(调整大小、比较像素等)。您有任何建议方法的示例吗?我真的什么都不知道。你可以用-f framecrc或-f framemd5而不是-f image2来计算图像的散列。作为输出文件,给一个文件,将哈希写入该文件,或者-将它们写入标准输出。我建议也使用and,它也可以这样做。似乎很有趣,只要我设法安装它,我就会尝试。我不断遇到构建错误。在ms windows上构建东西可能很困难,也很令人沮丧,因为它缺少UNIX变体所拥有的工具和基础结构。令人惊讶的是,它似乎可以工作!只有两个问题,为什么imageio需要并下载ffmpeg 32位,而我有一个64位系统?有没有办法控制要选择的帧?就像在ffmpeg中一样,我可以使用-r 1每秒选择一帧,我想在MoviePy中做同样的事情。我不知道imageio,它看起来像一个不需要的行为,可能会在项目页面中打开一个问题。对于fps,只需编写clip.iter_frames(fps=1)就可以了,奇怪的事情发生了。当我现在尝试运行脚本时,出现错误“import moviepy.editor as mpy,ImportError:没有名为editor的模块”。有趣的是,我没有改变任何东西,moviepy仍然安装,脚本仍然是一样的。
import moviepy.editor as mpy
clip = mpy.VideoFileClip("video.avi")
for frame in clip.iter_frames():
    # do something with the frame (a HxWx3 numpy array)