保存Matplotlib动画时出现错误。

3

我尝试保存一个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 是一个 ', mode 'wb' at 0x7f3de99164b0>。这个变量还有一个 name 属性,其值为 ''。我不清楚这个字符串值的含义,而不是我尝试分配给文件的名称。
我知道我的动画没问题,因为我已经看到它工作了。它只有500帧,所以我认为它不会太大。如果有人对我应该如何追踪这个运行时错误有任何想法,我会非常感激。

你有可能忘记发布实际的错误信息了吗?错误信息是什么? - hitzg
@hitzg - 我想这会教训我在睡前发帖。我刚刚添加了实际的运行时错误消息。 - user1245262
1
我之前也遇到了同样的问题,但是一直无法解决。我认为这与libx264有关,而且我相信它与图像的像素大小有关(我认为x264无法处理任意大小:高度和宽度需要是2的倍数等)。我尝试使用avconv / ffmpeg添加裁剪滤镜,但没有成功......最终,我只是将图像重新缩放到各种值,并使其正常工作。 - hitzg
1个回答

2

好的,根据@hitzg提供的libx264信息,我刚刚摆脱了指定其使用的参数 - 也就是说,

movie.save("test.mp4", fps=10, extra_args=['-vcodec', 'libx264'])

被替换为

movie.save("test.mp4", fps=10)

现在,事情似乎正在正常运行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接