Matplotlib - Почему мое сохраненное анимационное видео пустое? - PullRequest
1 голос
/ 28 января 2020

Это должно быть довольно просто, но я просто не знаю.

Новичок ie до Python и FFmpeg. Просто пытаюсь сохранить тестовое видео из ArtistAnimation, но получаю пустое видео.

Прежде чем я попытался создать видео, я могу увидеть анимацию с помощью plt.show () (без "matplotlib.use (" Agg ")"). Я уже установил FFmpeg в Anaconda.

Чтобы убедиться, что мой FFmpeg работает, я использовал код из примера matplotlib и создал видео, которое выглядит превосходно. (Полагаю, это означает, что мой FFmpeg теперь будет работать нормально?)

Тогда я изменил только рисунок на свою версию. Сравнив фигуру, я не увидел ничего плохого, очевидно. Но в сохраненном видео моей версии оно пустое.

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


fig = plt.figure()
ims = []
for i in range(10):
    ax1 = plt.subplot2grid((2, 2), (0, 0), colspan=2, rowspan=2)
    data = np.random.normal(0, 1, i+1)
    pd.DataFrame(data).plot(kind='bar', ax=ax1)
    ims.append([ax1])



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

anim = ani.ArtistAnimation(fig, ims, interval=500, repeat_delay=3000, blit=True)
anim.save('textmovie.mp4', writer=writer)
plt.show()

1 Ответ

1 голос
/ 29 января 2020

Я нашел решение, используя целлулоид .

Может быть способ создать анимацию с использованием ims.append, но я не смог ее найти.

Чтобы решение работало, вам нужно поместить ax1 = plt.subplot2grid((2, 2), (0, 0), colspan=2, rowspan=2) перед l oop.

Вот код:

import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
import matplotlib.animation as ani
import numpy as np
import pandas as pd
from celluloid import Camera

fig = plt.figure()
camera = Camera(fig) #  https://pypi.org/project/celluloid/
ax1 = plt.subplot2grid((2, 2), (0, 0), colspan=2, rowspan=2)
for i in range(10):
    data = np.random.normal(0, 1, i+1)
    pd.DataFrame(data).plot(kind='bar', ax=ax1)
    camera.snap()

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

# anim = ani.ArtistAnimation(fig, ims, interval=500, repeat_delay=3000, blit=True)
anim = camera.animate(interval=500, repeat_delay=3000, blit=True)
anim.save('textmovie.mp4', writer=writer)

Результат:
camera animate

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...