2014-05-21 89 views
0

我已經使用自制軟件安裝了ffmpeg。用matplotlib保存動畫?

但是我現在面臨的問題是運行腳本時不保存動畫。 我已經包含下面我的劇本和我的.bash_profile

import matplotlib 
matplotlib.use('TKAgg') 
import numpy as np 
from matplotlib import pyplot as plt 
from matplotlib import animation 

# First set up the figure, the axis, and the plot element we want to animate 
fig = plt.figure() 
ax = plt.axes(xlim=(0, 2), ylim=(-2, 2)) 
line, = ax.plot([], [], lw=2) 

# initialization function: plot the background of each frame 
def init(): 
    line.set_data([], []) 
    return line, 

# animation function. This is called sequentially 
def animate(i): 
    x = np.linspace(0, 2, 1000) 
    y = np.sin(2 * np.pi * (x - 0.01 * i)) 
    line.set_data(x, y) 
return line, 

# call the animator. blit=True means only re-draw the parts that have changed. 
anim = animation.FuncAnimation(fig, animate, init_func=init, 
          frames=200, interval=20, blit=True) 

# save the animation as an mp4. This requires ffmpeg or mencoder to be 
# installed. The extra_args ensure that the x264 codec is used, so that 
# the video can be embedded in html5. You may need to adjust this for 
# your system: for more information, see 
# http://matplotlib.sourceforge.net/api/animation_api.html 
anim.save('basic_animation.mp4', fps=30) 

的.bash_profile

export PATH=$PATH:/$HOME/../../usr/local/Celler/ffmpreg/2.2.2/bin 
export FFMPEG_BIN=/$HOME/../../usr/local/Cellar/ffmpeg/2.2.2/bin/ 
+0

沒有錯誤?你確定你在正確的目錄中尋找輸出嗎? – tacaswell

+0

會適用於我的路徑或我的PythonPath?我的路徑設置正確。 –

+1

它將保存到運行代碼的python實例的cwd中 – tacaswell

回答

0

我能夠通過使用IPython的筆記本與蟒蛇環境得到正確輸出的動畫。

有一點工作需要讓動畫顯示在ipython筆記本中。那就是:

from matplotlib import animation 
from tempfile import NamedTemporaryFile 

VIDEO_TAG = """<video controls> 
<source src="data:video/x-webm;base64,{0}" type="video/webm"> 
Your browser does not support the video tag. 
</video>""" 

def anim_to_html(anim): 
if not hasattr(anim, '_encoded_video'): 
    with NamedTemporaryFile(suffix='.webm') as f: 
     anim.save(f.name, fps=6, extra_args=['-vcodec', 'libvpx']) 
     video = open(f.name, "rb").read() 
    anim._encoded_video = video.encode("base64") 

return VIDEO_TAG.format(anim._encoded_video) 

from IPython.display import HTML 

def display_animation(anim): 
    plt.close(anim._fig) 
    return HTML(anim_to_html(anim)) 

一旦上面的代碼已經到位,下面的動畫是正確輸出到IPython的筆記本:

# First set up the figure, the axis, and the plot element we want to animate 
fig = plt.figure() 
ax = plt.axes(xlim=(0, 2), ylim=(-2, 2)) 
line, = ax.plot([], [], lw=2) 

# initialization function: plot the background of each frame 
def init(): 
    line.set_data([], []) 
    return line, 

# animation function. This is called sequentially 
def animate(i): 
    x = np.linspace(0, 2, 1000) 
    y = np.sin(2 * np.pi * (x - 0.01 * i)) 
    line.set_data(x, y) 
    return line, 

# call the animator. blit=True means only re-draw the parts that have changed. 
anim = animation.FuncAnimation(fig, animate, init_func=init, 
          frames=200, interval=20, blit=True) 

anim.save('basic_animation.mp4', fps=30, extra_args=['-vcodec', 'libx264']) 

display_animation(anim) 

出於某種原因,當我點擊右鍵並保存我無法以可讀的格式觀看電影...如果有人知道或找出解決方案,請讓我知道!