0

フィットファイルからアニメーション(ムービー)を作成するスクリプトを書きました。1 つのファイルのサイズは 2.8 MB で、no. ファイルの数は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 個のファイルを読み込んでアニメーションを作成できるのでしょうか? いくつかのバッファまたはいくつかの並列処理を作成することは可能ですか?

なにか提案を?

4

2 に答える 2

1

ArtistAnimation とFuncAnimationで説明されているように、ArtistAnimation の代わりに FuncAnimation を使用してアニメーションを作成することをお勧めします。FuncAnimation の save_count パラメータも試してみる必要があるかもしれません。例については API ドキュメントを参照してください。

于 2015-11-03T07:55:18.503 に答える