Extração de Frames de Filmes com Matplotlib

Beginner

This tutorial is from open-source community. Access the source code

Introdução

Este tutorial irá guiá-lo através do processo de utilização do Matplotlib para capturar frames individuais de um filme e escrevê-los em um arquivo. Este método é útil para gerar animações e pode ser feito sem a integração de um loop de eventos.

Dicas para a VM (Máquina Virtual)

Após a inicialização da VM, clique no canto superior esquerdo para mudar para a aba Notebook e acessar o Jupyter Notebook para praticar.

Às vezes, pode ser necessário aguardar alguns segundos para que o Jupyter Notebook termine de carregar. A validação das operações não pode ser automatizada devido a limitações no Jupyter Notebook.

Se você enfrentar problemas durante o aprendizado, sinta-se à vontade para perguntar ao Labby. Forneça feedback após a sessão, e resolveremos o problema prontamente para você.

Importar as bibliotecas necessárias

Primeiramente, precisamos importar as bibliotecas necessárias para gerar a animação. Usaremos numpy para gerar números aleatórios, matplotlib para plotar e FFMpegWriter para escrever os frames em um arquivo.

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

Configurar o escritor (writer)

Precisamos configurar o escritor (writer) que será usado para escrever os frames em um arquivo. Definimos os frames por segundo (fps) e adicionamos metadados como o título, artista e comentário.

metadata = dict(title='Movie Test', artist='Matplotlib',
                comment='Movie support!')
writer = FFMpegWriter(fps=15, metadata=metadata)

Configurar a figura

Criamos uma figura e definimos os limites x e y para o gráfico.

fig = plt.figure()
plt.xlim(-5, 5)
plt.ylim(-5, 5)

Configurar o gráfico

Criamos um gráfico de linha e definimos os dados iniciais como um array vazio.

l, = plt.plot([], [], 'k-o')

Capturar frames e escrever para o arquivo

Iteramos por 100 iterações e geramos números aleatórios para as coordenadas x e y. Atualizamos os dados para o gráfico de linha e capturamos o frame usando o writer. Finalmente, salvamos os frames em um arquivo.

x0, y0 = 0, 0

with writer.saving(fig, "writer_test.mp4", 100):
    for i in range(100):
        x0 += 0.1 * np.random.randn()
        y0 += 0.1 * np.random.randn()
        l.set_data(x0, y0)
        writer.grab_frame()

Resumo

Este tutorial mostrou como usar o Matplotlib para capturar frames de um filme e escrevê-los em um arquivo. Cobrimos os passos necessários, desde a configuração do writer até a iteração e a geração de números aleatórios para o gráfico. Este método é útil para gerar animações sem a integração de um event loop.