2015-02-28 5 views
9

Utilizzo la funzione di animazione di Matplotlib per la produzione di figure animate. Ho notato un problema che è particolarmente evidente per le animazioni con un numero elevato di fotogrammi, ovvero che la qualità delle figure si deteriora molto rapidamente dando come risultato un output di immagini sfocate in pixel.Animazioni pixel in Matplotlib

Esempi:

linee griglia Messy Messy grid lines

uscita pixel pixilated output

Sono stato di rendering animazioni usando

import matplotlib 
matplotlib.use("Agg") 

anim = animation.FuncAnimation(fig, ..., blit=False) 
mywriter = animation.FFMpegWriter(fps=15) 
anim.save("path.mp4", writer=mywriter) 

Ho provato a usare blit = True/False ma non ho notato molta differenza.

Versione Matlota: 1.4.2. Sistema: Mac 10.10

+1

possibile duplicato del [film d'animazione matplotlib: la qualità del film diminuire con il tempo] (http://stackoverflow.com/questions/25203311/matplotlib-animation-movie-quality-of -movie-decrescente-di-tempo) – YXD

+0

Qual è il tuo codec predefinito in 'matplotlib.rcParams ['animation.codec']'? – aganders3

+0

@ MR E, molto probabilmente un duplicato. Ho trovato che 'anim.save ("path.mp4", writer = mywriter, codec = "libx264", bitrate = -1, extra_args = [' - pix_fmt ',' yuv420p '])' ha prodotto lo stesso risultato. – osnoz

risposta

5

Questo è ciò che ha funzionato per me.

È possibile modificare il bitrate durante la creazione dell'istanza scrittore

import matplotlib.animation as animation 

anim = animation.FuncAnimation(fig, ...) 

FFMpegWriter = animation.writers['ffmpeg'] 
metadata = dict(title='Movie Test', artist='Matplotlib', 
       comment='Movie support!') 

# Change the video bitrate as you like and add some metadata. 
writer = FFMpegWriter(fps=15, bitrate=1000, metadata=metadata) 

Quindi è possibile salvare il video.

anim.save("path.mp4", writer=mywriter) 

Speranza che aiuta

+1

Grazie gentilmente alla soluzione mrcl, sembrerebbe che la specificazione manuale del bitrate faccia il trucco. Per chiunque abbia a che fare con questo problema c'è una modalità automatica (bitrate = -1), l'uso del quale porta a simulazioni pixilate disordinate, se vuoi che un buon risultato specifichi manualmente il bitrate, ho trovato che bitrate = 5000 fa il lavoro per me ne vado un risultato piuttosto netto. – osnoz