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

时间:2015-05-24 19:20:00

标签: 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)):
#My operations for each image

第3步:

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

3 个答案:

答案 0 :(得分:1)

简短版本是你可以使用ramdisk或tmpfs之类的东西,这样文件确实存储在内存中。但是,我想知道你的“每个图像的操作”。你真的需要一个图像文件吗?如果你所做的只是读取它们的大小,为什么你需要一个图像(压缩/解压缩等)?为什么不直接使用FFmpeg API,读取AVI文件,解码帧,并对解码数据进行度量标准?

答案 1 :(得分:1)

看看PyAV。 (有documentation,但它相当稀疏。)

看起来你可以打开一个视频,然后迭代这些帧。

答案 2 :(得分:1)

使用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)