我试图保存一个Matplotlib动画,但是出现了一个奇怪的错误。 (我相信)相关代码的片段是:
def showMovie(self):
frameFnc = self.getNoisyImage
initFnc = self.initImage
movie = animation.FuncAnimation(self.movieFig, frameFnc,
frames = len(self.noiseArrays),
init_func = initFnc,
interval=1, blit=True,
repeat = True)
movie.save("test.mp4", fps=10, extra_args=['-vcodec', 'libx264'])
print "Saved movie"
plt.ion()
plt.show()
if __name__ == '__main__':
z = noiseTester()
z.makeStaticNoiseImages()
z.readPredList()
z.showMovie()
我得到的错误如下:
Traceback (most recent call last):
File "noiseTest6.py", line 134, in <module>
z.showMovie()
File "noiseTest6.py", line 123, in showMovie
movie.save("test.mp4", fps=10, extra_args=['-vcodec', 'libx264'])
File "/usr/lib/pymodules/python2.7/matplotlib/animation.py", line 718, in save
writer.grab_frame(**savefig_kwargs)
File "/usr/lib/pymodules/python2.7/matplotlib/animation.py", line 204, in grab_frame
dpi=self.dpi, **savefig_kwargs)
File "/usr/lib/pymodules/python2.7/matplotlib/figure.py", line 1421, in savefig
self.canvas.print_figure(*args, **kwargs)
File "/usr/lib/pymodules/python2.7/matplotlib/backend_bases.py", line 2220, in print_figure
**kwargs)
File "/usr/lib/pymodules/python2.7/matplotlib/backends/backend_agg.py", line 497, in print_raw
renderer._renderer.write_rgba(filename_or_obj)
RuntimeError: Error writing to file
当我检查时, filename_or_obj 是',模式'wb'位于0x7f3de99164b0&gt; 。此变量还具有名称属性,其值为''。我不清楚这个字符串值的含义,而不是我试图分配给文件的名称。
我知道我的动画没问题,因为我看到它有效。它只有500帧,所以我认为它不是太大。如果有人对如何追查这个运行时错误有任何想法,我真的很感激。
答案 0 :(得分:2)
好吧,使用@hitzg中有关libx264的信息,我只是删除了指定其用法的参数 - 即。
movie.save("test.mp4", fps=10, extra_args=['-vcodec', 'libx264'])
被
取代movie.save("test.mp4", fps=10)
现在,事情似乎正在发挥作用。