读取许多文件并创建animation-python

时间:2015-11-03 07:47:28

标签: python matplotlib pyfits

我编写了从拟合文件创建动画(电影)的脚本。一个文件的大小为2.8 MB,编号为。的文件是9000。 这是代码

import numpy as np
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import os
import pyfits
import glob
import re



Writer = animation.writers['ffmpeg']
writer = Writer(fps=15, metadata=dict(artist='Me'), bitrate=1800)

global numbers
numbers=re.compile(r'(\d+)')

def numericalSort(value):
    parts = numbers.split(value)
    parts[1::2] = map(int, parts[1::2])
    return parts


image_list=glob.glob('/kalib/*.fits')

image_list= sorted(image_list,key=numericalSort)
print image_list
fig = plt.figure("movie")
img = []

for i in range(0,len(image_list)):

    hdulist = pyfits.open(image_list[i])
    im = hdulist[0].data
    img.append([plt.imshow(im,cmap=plt.cm.Greys_r)])


ani = animation.ArtistAnimation(fig,img, interval=20, blit=True,repeat_delay=0)
ani.save('movie.mp4', writer=writer)

我认为我的问题是当我创建数组img []时...我有8 GB RAM,当RAM已满时我的操作系统会终止python脚本。

我的问题是: 我如何阅读9000个文件并创建动画?是否可以创建一些缓冲区或某些并行处理?

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

我建议您使用ffmpeg。使用命令image2pipe,您不必将所有图像加载到RAM中,而是逐个(我认为)加载到管道中。

除此之外,ffmpeg还允许您操纵视频(帧速率,编解码器,格式等)。

https://ffmpeg.org/ffmpeg.html

答案 1 :(得分:1)

使用FuncAnimation而不是ArtistAnimation创建动画可能会更好,如ArtistAnimation vs FuncAnimation matplotlib animation matplotlib.animation中所述.FuncAnimation的内存使用效率更高。您可能还想尝试使用FuncAnimation的save_count参数,请查看API文档以获取示例。