animation.save ne fonctionne pas
Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

animation.save ne fonctionne pas



  1. #1
    Brinicle

    animation.save ne fonctionne pas


    ------

    Bonjour,

    Je cherche à sauvegarder une animation produite par le code suivant :

    Code:
    def aff(self,frame,attr,vmin=None,vmax=None,born=True):
            val = getattr(self,attr)
            if born:
                plt.imshow(val[frame],extent=(0,self.L,self.L,0),cmap="seismic",vmin=vmin,vmax=vmax)
            else:
                plt.imshow(val[frame],extent=(0,self.L,self.L,0),cmap="seismic")
            plt.colorbar()
    
    def animation(self,attr,fps=5,born=True,begin=0):
            def func(frame):
                plt.clf()
                self.aff(frame,attr,vmin,vmax,born)
            
            val = getattr(self,attr)
            if born:
                vmin = np.min(val)
                vmax = np.max(val)
            fig = plt.figure()
            return anim.FuncAnimation(fig,func,np.arange(begin,val.shape[0]),interval=1/fps*1000)
    Pour cela j'utilise (ani est le nom de la'nimation) :
    Code:
    ani.save('vortex2.mp4')
    J'ai aussi testé :
    Code:
    ani.save('vortex2.gif', writer=PillowWriter())
    Dans les deux cas, cela tourne pendant un long moment avant d'afficher uniquement la dernière image.
    Un fichier vidéo est quand même créé mais il ne comprend qu'une image pendant toute la durée de la vidéo (ce n'est ni la première ni la dernière !).

    Je ne comprends pas pourquoi cela ne marche pas, j'ai testé le programme ici, et ça marche.

    Il faut noter que l'animation en elle même (sans sauvegarde) fonctionne.

    -----
    Dernière modification par Brinicle ; 05/12/2021 à 12h29.

  2. #2
    Ernum

    Re : animation.save ne fonctionne pas

    Salut,

    il y a un caractère spécial qui se balade dans ton code:

    ®

    Pillow ne génère pas de mp4, mais gif ou webp comme format si j'ai bien compris le lien fourni.

    ps: je n'ai pas encore étudié le code

  3. #3
    Brinicle

    Re : animation.save ne fonctionne pas

    Je ne vois pas ce caractère spécial.

    L'option 1 : ani.save('vortex2.mp4')
    N'utilise pas pillow mais nécessite d'installer ffmpeg.

    L'option 2 : ani.save('vortex2.gif', writer=PillowWriter())
    Utilise pillow et l'extension est bien .gif

  4. #4
    Ernum

    Re : animation.save ne fonctionne pas

    Citation Envoyé par Brinicle Voir le message
    Je ne vois pas ce caractère spécial.



    Ici, tu trouvera de nombreux exemples ayant servi à illustrer une vidéo de David Louapre utilisant python et ffmpeg (attention à bien renseigner le chemin du logiciel).
    Images attachées Images attachées  

  5. A voir en vidéo sur Futura
  6. #5
    Brinicle

    Re : animation.save ne fonctionne pas

    C'est visiblement un problème chez vous car je n'ai pas du tout cela :

    Nom : Capture d’écran 2021-12-05 210337.png
Affichages : 166
Taille : 16,3 Ko

    C'est une capture d'écran du forum.
    Dernière modification par Brinicle ; 05/12/2021 à 20h06.

  7. #6
    Ernum

    Re : animation.save ne fonctionne pas

    Citation Envoyé par Brinicle Voir le message
    C'est visiblement un problème chez vous car je n'ai pas du tout cela :
    C'est une capture d'écran du forum.
    Moi aussi, c'est une capture d'écran du forum, c'est probablement une histoire d'encodage, ça vient peut-être de mon navigateur, avec w3m (navigateur en mode terminal configuré en UTF-8), ça s'affiche comme chez toi.

  8. #7
    Ernum

    Re : animation.save ne fonctionne pas

    Tu pourrais donner le reste du code, np c'est pour numpy, plt pour matplotlib.pyplot?

  9. #8
    Brinicle

    Re : animation.save ne fonctionne pas

    En fait j'ai trouvé la solution...

    C'est cette partie de la documentation de matplotlib sur FuncAnimation qui m'a mit sur la piste :

    You must store the created Animation in a variable that lives as long as the animation should run. Otherwise, the Animation object will be garbage-collected and the animation stops.
    En fait, j’exécutais dans un shell ("fluid" est le nom de l'objet) :
    Code:
    ani=fluid.animation('omega',fps=10)
    Puis je fermais la fenêtre et exécutais :
    Code:
    ani.save('vortex2.mp4')
    Le problème c'est que si on fait ça, l'animation est en quelque sorte "usagée" après la fermeture.

    Il faut exécuter les deux lignes ensembles :
    Code:
    ani=fluid.animation('omega',fps=10)
    ani.save('vortex2.mp4')
    Et là ça marche !

Discussions similaires

  1. Save pour smartphone ?
    Par Fistos dans le forum Logiciel - Software - Open Source
    Réponses: 12
    Dernier message: 07/05/2015, 07h10
  2. il est ou le bouton save de facebook . ?? !
    Par DAUDET78 dans le forum Internet - Réseau - Sécurité générale
    Réponses: 0
    Dernier message: 29/07/2014, 17h09
  3. Save flash - Helppp
    Par invite64d91539 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 24/12/2011, 10h20
  4. pb avec rebit save me
    Par steven29 dans le forum Logiciel - Software - Open Source
    Réponses: 5
    Dernier message: 29/03/2011, 13h25