2013-11-22 12 views
8

Sono relativamente nuovo in Python (ho usato MATLAB molto di più). In sostanza, voglio essere in grado di creare e salvare animazioni. Così sono andato e ho controllato come è stato fatto e ho trovato questo: http://jakevdp.github.io/blog/2012/08/18/matplotlib-animation-tutorial/Uso di FFmpeg e IPython

I ho copiato/incollato il codice in un Notebook IPython.

Capisco che deve essere installato ffmpeg, cosa che pensavo di aver fatto (secondo http://www.wikihow.com/Install-FFmpeg-on-Windows). Il percorso è C:/ffmpeg. Funziona quando provo ffmpeg -version nel prompt dei comandi. Funziona anche nel prompt dei comandi di WinPython. Non so se sia d'aiuto, ma il percorso per Ipython è: C: \ Users \ Sal \ WinPython-32bit-3.3.2.3 \ python-3.3.2 \ Scripts/

Tuttavia, non funziona ancora lavoro. L'errore fornito è: AttributeError: l'oggetto 'str' non ha attributo 'saving' Questo errore si verifica naturalmente al comando .save. Ho anche provato ad aggiungere cosa c'è sotto. Non fa niente in più writer = 'ffmpeg'

Sto usando Windows 7, WinPython3.3.

La ringrazio molto

+2

Invia la parte pertinente del codice in cui si verifica il tuo errore – SpliFF

+0

Quale versione di mpl stai usando? Il supporto del produttore di animazioni è (relativamente) nuovo. – tacaswell

+0

@ Kreger51 Sei riuscito a salvare l'animazione? Ho lo stesso problema !! Non so perché non riesco a generare un file avi usando il comando 'anim.save ('mymovie.mp4', writer = mywriter)' e ricevo invece un messaggio di errore! grazie –

risposta

18

mi sono imbattuto lo stesso errore come ho iniziato a lavorare con le animazioni che utilizzano lo stesso esempio esatto per cominciare. Prima di tutto,

Sto usando Windows 7, Python 2.7.6, 1.3.1 matplotlib

Risposta breve: tenta di impostare il FFMpegWriter voi stessi

mywriter = animation.FFMpegWriter() 
anim.save('mymovie.mp4',writer=mywriter) 

Risposta lunga: Io sono abbastanza sicuro che ci sia un bug in matplotblib.animation.save c'è la seguente riga

if is_string_like(writer): 

per catturare ° Il caso in cui lo scrittore definito dall'utente non è in realtà una funzione di scrittura ma solo il suo nome. E poi instanciates un'istanza di quello scrittore se è disponibile

if writer in writers.avail: 
    writer = writers[writer](fps, codec, bitrate, 
           extra_args=extra_args, 
           metadata=metadata 

Tuttavia, e qui sta il bug, se lo scrittore definita dall'utente non è in writers.avail solo utilizza

writer = writers.list()[0] 

che si restituisce una stringa con il nome del writer da utilizzare. Tuttavia, questa stringa non è usata da nessuna parte per istanziare effettivamente un oggetto writer!

+1

La tua risposta breve ha funzionato per me. Un commento secondario: per essere coerente con [l'esempio citato nella domanda originale] (http://jakevdp.github.io/blog/2012/08/18/matplotlib-animation-tutorial/), dovrebbe essere l'animazione. FFMpegWriter() 'invece di' animator.FFMpegWriter() ' – jorgeh

+0

@Sascha Potresti specificare quale metodo è corretto? Ho provato quello corto (le due righe sopra) in un programma per salvare un'animazione creata in Python ma non ci sono riuscito!Grazie –

+0

@ Strömungsmechanik Se ffmpeg è installato correttamente, la risposta breve dovrebbe funzionare. Tuttavia, leggendo i tuoi altri post sul tuo problema di animazione, non sembra che tu abbia il problema discusso qui. Hai provato l'esempio di tutorial sopra? – Sascha