2 votes

Fichier .mp4 vide créé après avoir réalisé une vidéo à partir de matplotlib en utilisant matplotlib.animation

J'ai trouvé ce petit code, et je suis capable d'enregistrer une vidéo (couleurs aléatoires changeant dans une grille) en l'utilisant :

import numpy as np
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from scipy import rand

Writer = animation.writers['ffmpeg']
writer = Writer(fps=15, metadata=dict(artist='xy'), bitrate=3600)

fig = plt.figure()
frames = []
for add in np.arange(15):
    base = rand(10, 10)
    frames.append((plt.pcolormesh(base, ),))

im_ani = animation.ArtistAnimation(fig, frames, interval=500, repeat_delay=3000,
                               blit=True)
im_ani.save('Vid.mp4', writer=writer)

J'ai essayé de l'insérer dans ma simulation, je n'obtiens aucune erreur, mais la vidéo est vide, l'image entière est blanche. Pouvez-vous m'aider à résoudre ce problème ? C'est le cas le plus simple où je l'ai obtenu :

class Dummy():

    def __init__(self):
        self.video=[]

    def addFrame(self):

        Frame=rand(10,10)
        print (Frame)
        self.video.append((plt.pcolormesh(Frame),))

    def saveVideo(self):

        Writer = animation.writers['ffmpeg']
        writer = Writer(fps=15, metadata=dict(artist='XY'), bitrate=3600)
        fig = plt.figure()

        im_ani = animation.ArtistAnimation(fig, self.video, interval=500, repeat_delay=3000,
                               blit=True)
        im_ani.save('myVid.mp4', writer=writer, dpi=dpi)

Vous pouvez l'essayer :

from scipy import rand

foo=Dummy()

for i in range(20):
   foo.addFrame()

foo.saveVideo()

1voto

DJV Points 870

Votre self.video.append((plt.pcolormesh(Frame),)) La ligne est bien. Vous avez juste changé l'ordre des déclarations.

import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np

class Dummy():
    def __init__(self, fname):
        self.fname = fname
        self.video = []
        self.fig, self.ax = plt.subplots()  # Create new figure here

    def addFrame(self):
        Frame = np.random.rand(10, 10)
        self.video.append((self.ax.pcolormesh(Frame), ))

    def saveVideo(self):
        Writer = animation.writers['ffmpeg']
        writer = Writer(fps=15, metadata=dict(artist='XY'), bitrate=3600)
        im_ani = animation.ArtistAnimation(self.fig, self.video, interval=500,
                                           repeat_delay=3000, blit=True)
        im_ani.save(self.fname, writer=writer)

foo1 = Dummy('foo1.mp4')
for i in range(20):
   foo1.addFrame()
foo1.saveVideo()

foo2 = Dummy('foo2.mp4')
for i in range(40):
   foo2.addFrame()
foo2.saveVideo()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X