Я использую следующий код Python для создания анимации и хочу сохранить его как видео через FFmpeg (в PyCharm ):
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from matplotlib.animation import FFMpegWriter
def func():
for j in range(1, len(t)):
time = j * 0.01
print('time:{:2}'.format(time))
yield time
def animate(data):
time = data
ax2.plot(time, time, **{'marker':'o'})
ax2.set_title('t = {:.2}'.format(time))
return ax2
def init():
ax2.plot(0, 0)
return ax2
dt = 0.01
t = np.arange(0, 50, dt)
fig2 = plt.figure()
ax2 = fig2.add_subplot(111, autoscale_on=True)
ax2.grid()
ani = animation.FuncAnimation(fig2, animate, func, interval=dt*1000, blit=False, init_func=init, repeat=False)
plt.rcParams['animation.ffmpeg_path'] = 'C:\Program Files\\ffmpeg\\bin\\ffmpeg.exe'
writer = FFMpegWriter(fps=15, metadata=dict(artist='Me'), bitrate=1800)
ani.save("movie.mp4", writer=writer)
#plt.show()
Но когда time
достигает 1.0
, процесс остановлен, но он должен остановиться, когда time
достигает 50.0
. На следующем рисунке показано, когда процесс остановился. PyCharm Запустить консоль
Затем я проверяю movie.mp4
и нахожу, что видео заканчивается, когда time
достигает 1,0.
То есть только первые 100 кадры анимации были преобразованы в файл .mp4
, так что я был очень смущен, куда делись остальные кадры?
Я попытался запустить код через windows cmd, но получил тот же результат.
Затем я раскомментировал строку #plt.show()
и обнаружил, что процесс остановился, когда time
достигает 50,0, и анимация могла отображаться правильно, но все же только первые 100 кадров были преобразованы.
Сейчас я очень озадачен этой проблемой и не знаю, как ее решить. Ценим за вашу помощь .:)