2015-06-08 2 views
3

Я попытался сохранить анимацию Matplotlib, но получаю странную ошибку. Фрагмент (я считаю) соответствующий код:Ошибка при сохранении анимации 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 является », режим„термометру“в 0x7f3de99164b0>. Эта переменная также имеет атрибут со значением ''. Значение этого строкового значения, а не имя, которое я пытался назначить файлу, мне не понятно.

Я знаю, что моя анимация в порядке, потому что я видел, как она работает. Он имеет только 500 кадров, поэтому я не думаю, что он слишком велик. Если у кого-нибудь есть идеи о том, как я должен преследовать эту ошибку Runtime, я бы очень признателен.

+0

Возможно ли, что вы забыли опубликовать фактическую ошибку? Что такое сообщение об ошибке? – hitzg

+0

@hitzg - Я полагаю, что научит меня публиковать сразу перед сном. Я просто добавил сообщение об ошибке Runtime. – user1245262

+1

У меня были одни и те же проблемы, и я тоже не мог понять. Я думаю, что это связано с 'libx264', и я считаю, что это связано с размером пикселя фигуры (я думаю, что x264 не может обрабатывать произвольные размеры: высота и ширина должны быть кратными 2 и т. Д.); Я попытался с добавлением фильтра обрезки в avconv/ffmpeg, но это не сработало ... В итоге я просто изменил фигуру на различные значения и получил ее для работы. – hitzg

ответ

2

Ну, используя информацию о libx264 от @hitzg, я просто избавились от аргументов, определяющих его использование - т.е.

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

был заменен

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

Теперь, все, кажется, за работой.

Смежные вопросы