2016-09-24 6 views
2

Я нашел этот небольшой код, и я могу сохранить видео (случайные цвета изменения в сетке), используя его:Пустой файл .mp4 создан после создания видео с помощью Matplotlib matplotlib.animation

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) 

I попытался вставить его в мою симуляцию, я не получаю никаких ошибок, но видео пусто, вся фотография белая. Можете ли вы мне помочь? Это самый простой случай, когда я получил его:

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) 

Вы можете попробовать это:

from scipy import rand 

foo=Dummy() 

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

foo.saveVideo() 
+0

Я подозрительно, что 'self.video.append ((plt.pcolormesh (Frame),))' строка неверна. Я не понимаю разделитель **, ** и круглую скобку ». если их устранить, ошибки, и в этом примере это тоже так. – user3598726

ответ

1

Ваш self.video.append((plt.pcolormesh(Frame),)) линия в порядке. Вы просто изменили порядок высказываний.

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() 
+0

Спасибо! Сейчас это работает. Ты обалденный. – user3598726

+0

Могу ли я спросить, как я могу сделать больше видео? Я дублировал строки, создал self.fig2, self.video2, я заполнил self.video2, но сохраненные видео не в порядке. Один из них только белый, другой - статическое изображение. – user3598726

+0

отредактировал немного – DJV