Python 阅读许多文件并创建动画
我写了一个脚本,用fits文件创建动画(电影)。一个文件大小为2.8MB,文件数为9000。 这是代码Python 阅读许多文件并创建动画,python,matplotlib,pyfits,Python,Matplotlib,Pyfits,我写了一个脚本,用fits文件创建动画(电影)。一个文件大小为2.8MB,文件数为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 = animatio
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[]时,我有8GB的RAM,当RAM满时,我的操作系统终止python脚本
我的问题是:
如何读取9000个文件并创建动画?是否可以创建一些缓冲区或一些并行处理
有什么建议吗?您最好使用FuncAnimation而不是ArtistAnimation创建动画,正如FuncAnimation中所述,FuncAnimation在内存使用方面更有效。您可能还想尝试FuncAnimation的save_count参数,请查看API文档以获取示例。您最好使用FuncAnimation而不是ArtistAnimation创建动画,正如FuncAnimation中所述,FuncAnimation在内存使用方面更有效。您可能还想尝试FuncAnimation的save_count参数,请查看API文档以获取示例。您最好使用FuncAnimation而不是ArtistAnimation创建动画,正如FuncAnimation中所述,FuncAnimation在内存使用方面更有效。您可能还想尝试FuncAnimation的save_count参数,请查看API文档以获取示例。您最好使用FuncAnimation而不是ArtistAnimation创建动画,正如FuncAnimation中所述,FuncAnimation在内存使用方面更有效。您可能还想尝试FuncAnimation的save_count参数,请查看API文档中的示例。我建议您使用
ffmpeg
。使用命令image2pipe
您不必将所有图像加载到RAM中,而是一个接一个(我认为)加载到管道中。除此之外,
ffmpeg
允许您操作视频(帧率、编解码器、格式等)
我建议您使用
ffmpeg
。使用命令image2pipe
您不必将所有图像加载到RAM中,而是一个接一个(我认为)加载到管道中。除此之外,
ffmpeg
允许您操作视频(帧率、编解码器、格式等)
我建议您使用
ffmpeg
。使用命令image2pipe
您不必将所有图像加载到RAM中,而是一个接一个(我认为)加载到管道中。除此之外,
ffmpeg
允许您操作视频(帧率、编解码器、格式等)
我建议您使用
ffmpeg
。使用命令image2pipe
您不必将所有图像加载到RAM中,而是一个接一个(我认为)加载到管道中。除此之外,
ffmpeg
允许您操作视频(帧率、编解码器、格式等)
感谢您的回答……但我认为这不是我的问题……我在将数据数组从文件读取到img[]数组时遇到问题……动画是在我正确读取数组img[]时创建的,但问题是您首先没有采取正确的方法。您不应该使用imshow制作渲染图像的列表,因为其中的每一个都会占用内存。FuncAnimation允许您根据需要一次渲染一帧,而无需一次渲染所有图像。也许你可以更清楚地知道你希望完成什么,但是列一个大的图像艺术家列表不是办法。作为后续,你所做的工作的原因是,比如说,一个线图或类似的东西,是因为线和多边形等在内存中表示和动画是微不足道的。整个图像是一个不同的故事,当您调用imshow时,您正在为每个帧的每个像素使用内存。天真的方法是行不通的。谢谢你的回答……但我认为这不是我的问题……我在将数据数组从文件读取到img[]数组时遇到问题……动画是在我正确读取数组img[]时创建的,但问题是你一开始没有采取正确的方法。您不应该使用imshow制作渲染图像的列表,因为其中的每一个都会占用内存。FuncAnimation允许您根据需要一次渲染一帧,而无需一次渲染所有图像。也许你可以更清楚地知道你希望完成什么,但是列一个大的图像艺术家列表不是办法。作为后续,你所做的工作的原因是,比如说,一个线图或类似的东西,是因为线和多边形等在内存中表示和动画是微不足道的。整个图像是一个不同的故事,当您调用imshow时,您正在为每个帧的每个像素使用内存。天真的方法是行不通的。谢谢你的回答……但我认为这不是我的问题……我在将数据数组从文件读取到img[]数组时遇到问题……动画是在我正确读取数组img[]时创建的,但问题是你一开始没有采取正确的方法。您不应该使用imshow制作渲染图像的列表,因为其中的每一个都会占用内存。FuncAnimation允许您根据需要一次渲染一帧,而无需一次渲染所有图像。也许你可以更清楚地知道你希望完成什么,但是列一个大的图像艺术家列表不是办法。作为后续,你所做的工作的原因是,比如说,一个线图或类似的东西,是因为线和多边形等在内存中表示和动画是微不足道的。整个图像是一个不同的故事,当您调用imshow时,您正在为每个帧的每个像素使用内存。天真的方法是行不通的。谢谢你的回答……但我认为这不是我的问题……我在将数据数组从文件读取到img[]数组时遇到了问题……动画是在我正确读取了数组img[]后创建的,但问题是你