我编写了从拟合文件创建动画(电影)的脚本。一个文件的大小为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个文件并创建动画?是否可以创建一些缓冲区或某些并行处理?
有什么建议吗?
答案 0 :(得分:2)
我建议您使用ffmpeg
。使用命令image2pipe
,您不必将所有图像加载到RAM中,而是逐个(我认为)加载到管道中。
除此之外,ffmpeg
还允许您操纵视频(帧速率,编解码器,格式等)。
答案 1 :(得分:1)
使用FuncAnimation而不是ArtistAnimation创建动画可能会更好,如ArtistAnimation vs FuncAnimation matplotlib animation matplotlib.animation中所述.FuncAnimation的内存使用效率更高。您可能还想尝试使用FuncAnimation的save_count参数,请查看API文档以获取示例。