4
如果我運行下面的代碼,它只會在820幀之後停止。我在Ubuntu 12.04 VM和Linux Mint 15上都測試了這個功能。不幸的是,沒有錯誤信息。 54:00Python Matplotlib FFMpegwriter的底圖動畫在820幀後停止?
import os, sys
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
import matplotlib.animation as animation
from datetime import datetime,timedelta
def animation_test(start,end,fps=10,save_path='/home/username/animation_test/',\
save_name="test.mp4",dpi=80):
step = timedelta(minutes = 3)
current = start
dates =[]
frame = 0
while current <=end:
dates.append(current)
current += step
fig = plt.figure(figsize=(16,9),facecolor='k',edgecolor='k')
ax = fig.add_subplot(111)
metadata = dict(title='Movie Test', artist='Matplotlib',
comment='Movie support!')
writer = animation.FFMpegWriter(fps=fps, metadata=metadata,bitrate=20000)
direction = -0.5
lat_current = 0
lon_current = 0
with writer.saving(fig,os.path.join(save_path,save_name),dpi):
for current in dates:
ax.cla()
if direction > 0 and lat_current > 40 or \
direction < 0 and lat_current < -40:
direction = - direction
lat_current = lat_current + direction
lon_current = lon_current - 0.75
if lon_current < -180 :
lon_current += 360
basem = Basemap(projection='ortho', lat_0=lat_current, lon_0=lon_current, resolution='l',ax=ax)
basem.drawcoastlines()
#plt.show()
plt.savefig(os.path.join(save_path, 'frame%d.png'%frame),
dpi=dpi,facecolor='w',edgecolor='k')
writer.grab_frame()
frame += 1
print current.isoformat()
start = datetime.now()
animation_test(datetime(2012,6,1,0,0,0),datetime(2012,6,4,0,0,0),fps=10,dpi=80)
print datetime.now() - start
要解釋代碼一點點:該程序打印2012-06-02T16後只是掛 我想讓它自帶小3分鐘文件,並顯示它的衛星數據的動畫在旋轉的地球上。這就是爲什麼我選擇通過動畫以3分鐘的步驟在以下示例代碼步驟中製作循環。我只是刪除了衛星數據的讀取和繪圖,以使代碼可以被任何人執行。
當我從程序中刪除底圖,並繪製隨機數據的散點圖時,程序一直運行。
我不確定,但我不認爲這是一個內存問題,因爲我的RAM只使用約。在程序運行時爲20%。
非常感謝您對此有所幫助。
你有什麼錯誤嗎?它是否與_just_底圖運行正常? – tacaswell
可悲沒有錯誤信息。是的,它貫穿如果我刪除ffmpegwriter,如果這就是你的意思 – cpaulik
@cpaulik爲了讓你知道,我跑你的代碼在Windows 7中,蟒蛇2.7,matplotlib 1.2.1和底圖1.0.6,它的工作完美.. 。 –