はじめに
このチュートリアルでは、Matplotlib を使って動画から個々のフレームをキャプチャし、ファイルに書き込む方法を学びます。この方法はアニメーションの作成に役立ち、イベントループの統合なしで行うことができます。
VM のヒント
VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebook を使って練習しましょう。
時々、Jupyter Notebook が読み込み終了するまで数秒待つ必要があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。
学習中に問題がある場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。
必要なライブラリをインポートする
まず、アニメーションを生成するために必要なライブラリをインポートします。乱数の生成にはnumpy、グラフ描画にはmatplotlib、フレームをファイルに書き込むためにはFFMpegWriterを使用します。
import numpy as np
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
from matplotlib.animation import FFMpegWriter
ライターを設定する
フレームをファイルに書き込むために使用するライターを設定する必要があります。1 秒当たりのフレーム数(fps)を設定し、タイトル、作者、コメントなどのメタデータを追加します。
metadata = dict(title='Movie Test', artist='Matplotlib',
comment='Movie support!')
writer = FFMpegWriter(fps=15, metadata=metadata)
グラフを設定する
グラフを作成し、プロットの x 軸と y 軸の範囲を設定します。
fig = plt.figure()
plt.xlim(-5, 5)
plt.ylim(-5, 5)
プロットを設定する
折れ線グラフを作成し、初期データを空の配列に設定します。
l, = plt.plot([], [], 'k-o')
フレームを取得してファイルに書き込む
100 回の反復処理を行い、x 座標と y 座標に乱数を生成します。折れ線グラフのデータを更新し、ライターを使ってフレームを取得します。最後に、フレームをファイルに保存します。
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()
まとめ
このチュートリアルでは、Matplotlib を使って動画からフレームを取得し、ファイルに書き込む方法を紹介しました。ライターの設定から反復処理を行い、プロット用の乱数を生成するまでの必要な手順を説明しました。この方法は、イベントループの統合なしでアニメーションを生成する際に役立ちます。