簡體   English   中英

動畫Gif動畫圖(Python)

[英]Animated graph to Animated Gif (Python)

我制作了一個簡單的n-body模擬器,並使用以下代碼繪制/動畫運動:

for i in range(N):
    [...]
    x = [ Rbod[j][0], Rbod[j][0]]
    y = [ Rbod[j][1], Rbod[j][1]]
    #print(R1, V1, A1, F12)
    if i%10 == 0:
        print(i)
        pylab.ion()
        pylab.scatter( x, y, c=(j/nbodies,j/nbodies,j/nbodies) )
        pylab.axis([-400, 400, -400, 400])
        pylab.draw()

現在我真的想將動畫保存為gif。 這可能嗎? 互聯網模糊地說,這不是關於如何用pylab做的。

4身體互動的例子: 在此輸入圖像描述

我通過使用ffmpeg解決了它,通過命令行運行轉換程序。 所以首先我保存所有單獨的圖片,然后將它們變成avi,將avi變成gif。

            print(i)
            #pylab.ion()
            pylab.scatter( x, y, c=(j/nbodies,j/nbodies,j/nbodies) )
            pylab.axis([-400, 400, -400, 400])
            #pylab.draw()
            pylab.savefig('picture'+str(i))

os.chdir('C://Users/Alex')
subprocess.call(['ffmpeg', '-i', 'picture%d0.png', 'output.avi'])
subprocess.call(['ffmpeg', '-i', 'output.avi', '-t', '5', 'out.gif'])

在matplotlib中查看關於動畫的本教程。 http://nbviewer.ipython.org/urls/raw.github.com/jakevdp/matplotlib_pydata2013/master/notebooks/05_Animations.ipynb

快速搜索顯示如何創建動畫為mp4,然后您可以使用第三方工具將其轉換為您想要的格式。

from matplotlib import animation

# call the animator.  
...
anim = animation.FuncAnimation(fig, animate, init_func=init,
                           frames=200, interval=20, blit=True)
...
anim.save('basic_animation.mp4', fps=30)

簡單但有效的解決方案是在循環中使用pylab.savefig(filename)並為每個幀保存一個文件,即pylab.draw()pylab.draw() 文件名應該反映循環索引,即frame0001.pngframe0002.png ,...然后使用FFmpeg( http://www.ffmpeg.org/ )將它們拼接在一起。 已經有一個問題和答案如何工作( 從一組jpeg圖像創建動畫gif )。 FFmpeg有很多選擇。 例如,您可以調整幀速率。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM