/ / / Python Matplotlib FuncAnimation + Αποθήκευση - python, animation, matplotlib, ffmpeg

Python Matplotlib FuncAnimation + Αποθήκευση - python, animation, matplotlib, ffmpeg

Είμαι νέος στο python και προσπαθώ να κάνω κινούμενα σχέδια και να τα αποθηκεύσω σε κάποια μορφή βίντεο χρησιμοποιώντας το matplotlibs FuncAnimation.Αν τρέχω τον ακόλουθο κώδικα:

import numpy as np
import matplotlib.animation as ani
import matplotlib.pyplot as plt

azimuths = np.radians(np.linspace(0, 360, 360))
zeniths = np.arange(0, 8, 0.2)
rho, psi = np.meshgrid(zeniths, azimuths)


fig = plt.figure()
ax = fig.add_subplot(1, 1, 1, polar=True)
ax.set_yticks([])
plt.grid()


def frame(i):
values_i = prob_density(rho ** 2, psi, i)
ax.contourf(psi, rho, values_i)

animation = ani.FuncAnimation(fig, frame, np.linspace(0, 1000, 10))
animation.save("video.mp4", writer="ffmpeg")

Υπάρχει ένα σφάλμα που λέει:

ValueError: outfile must be *.htm or *.html

Καθώς αυτό φαίνεται να έχει να κάνει με τα αρχεία ffmpeg - αυτά βρίσκονται στο

/anaconda3/bin/ffmpeg

Είμαι εδώ και αρκετό καιρό τώρα, αλλά δεν μπορώ να φανταστώ μια λύση αν και φαίνεται να είναι κοινό ζήτημα. Ευχαριστώ για τυχόν προτάσεις.

Απαντήσεις:

1 για την απάντηση αριθ. 1

Δεν έχω εργαστεί ποτέ με το FuncAnimation bevore, αλλά το matplotlib-παράδειγμα , πρέπει πρώτα να αρχίσετε το ffmpeg. Σαν αυτό:

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


def update_line(num, data, line):
line.set_data(data[..., :num])
return line,

# Set up formatting for the movie files
Writer = animation.writers["ffmpeg"]
writer = Writer(fps=15, metadata=dict(artist="Me"), bitrate=1800)


fig1 = plt.figure()

data = np.random.rand(2, 25)
l, = plt.plot([], [], "r-")
plt.xlim(0, 1)
plt.ylim(0, 1)
plt.xlabel("x")
plt.title("test")
line_ani = animation.FuncAnimation(fig1, update_line, 25, fargs=(data, l),
interval=50, blit=True)
line_ani.save("lines.mp4", writer=writer)

Ίσως να το δοκιμάσετε.


Σχετικές ερωτήσεις


Σχόλια (0)

Πρόσθεσε ένα σχόλιο