Python
 Computer >> コンピューター >  >> プログラミング >> Python

matplotlib.animationでffmpegを正しく有効化する方法【mp4保存まで解説】

matplotlib.animation で ffmpeg を有効にする方法

matplotlib.animation で作成したアニメーションを mp4 形式で保存するには、ffmpeg を適切に有効化しておく必要があります。本記事では、必要な事前準備から実際のサンプルコード、実行結果までをわかりやすく解説します。

事前準備:ffmpeg のインストール

まず、システムに ffmpeg がインストールされていることを確認してください。未インストールの場合は、OS に応じて以下のコマンドで導入できます。

# Ubuntu / Debian
sudo apt-get install ffmpeg

# macOS(Homebrew)
brew install ffmpeg

# Windows
winget install ffmpeg

PATH が通っていない環境では、コード内で ffmpeg のフルパスを明示的に指定することも可能です。

plt.rcParams['animation.ffmpeg_path'] = '/usr/bin/ffmpeg'  # 環境に合わせて変更

実装手順

  • 図のサイズを設定し、サブプロット間および周囲のパディングを調整します。
  • ffmpeg の実行パスを rcParams で指定します。
  • figure() メソッドを使って、新しい図を作成(または既存の図をアクティブ化)します。
  • add_subplot() で図に Axes(ax)を追加します。
  • make_axes_locatable() を使い、既存の Axes を基準にカラーバー用の領域を確保します。
  • np.random.rand() で表示用のランダムデータを生成し、imshow() メソッドで 2D ラスタ画像として描画します。
  • ScalarMappable インスタンス(cb)に対して fig.colorbar() でカラーバーを作成します。
  • 現在のフレーム番号をタイトルとして設定します。
  • 切り替え用のカラーマップのリストを作成します。
  • animate 関数を繰り返し呼び出す FuncAnimation でアニメーションを構築します。関数内では新しいランダムデータを生成し、imshow() で再描画します。
  • パイプベースの FFMpegWriter のインスタンスを取得します。
  • ani.save() で現在のアニメーションを mp4 ファイルとして保存します。

サンプルコード

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from mpl_toolkits.axes_grid1 import make_axes_locatable

plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
plt.rcParams['animation.ffmpeg_path'] = 'ffmpeg'

fig = plt.figure()
ax = fig.add_subplot(111)
div = make_axes_locatable(ax)
cax = div.append_axes('right', '5%', '5%')
data = np.random.rand(5, 5)
im = ax.imshow(data)
cb = fig.colorbar(im, cax=cax)
tx = ax.set_title('Frame 0')

cmap = ["copper", 'RdBu_r', 'Oranges', 'cividis', 'hot', 'plasma']

def animate(i):
    cax.cla()
    data = np.random.rand(5, 5)
    im = ax.imshow(data, cmap=cmap[i%len(cmap)])
    fig.colorbar(im, cax=cax)
    tx.set_text('Frame {0}'.format(i))

ani = animation.FuncAnimation(fig, animate, frames=10)
FFwriter = animation.FFMpegWriter()
ani.save('plot.mp4', writer=FFwriter)

コードのポイント

animate 関数内では cax.cla() を呼び出してカラーバーを毎フレーム初期化しています。これにより、カラーマップが変わってもスケールが正しく更新されます。また、cmap=cmap[i%len(cmap)] とすることで、フレーム番号に応じてカラーマップを順番に切り替えています。

実行結果

コードを実行すると、「plot.mp4」という名前の mp4 ファイルが生成され、プロジェクトディレクトリに保存されます。動画を再生すると、フレームごとにカラーマップが変化しながらランダムデータが更新されるアニメーションを確認できます。

  1. Matplotlibで3Dバー(3D棒グラフ)に凡例を追加する方法

    Matplotlibで3D棒グラフ(3Dバー)に凡例を追加したい場合、bar3d()メソッドでバーを描画し、legend()メソッドを使って凡例を配置します。この記事では、緑と赤の2種類の3Dバーを描画し、それぞれに凡例ラベルを付ける具体的な手順をサンプルコード付きで解説します。 実装の手順 図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。 figure()メソッドで新しい図を作成します。 add_subplot()で projection=3d を指定し、3D描画用のAxesを追加します。 numpyを使って x3、y3、z3、dx、dy、dz の各データリス

  2. FlaskでMatplotlibのグラフを表示する方法【サンプルコード付き】

    Webアプリケーション上でグラフを動的に表示したい場合、FlaskとMatplotlibを組み合わせるのが効果的です。この記事では、Flaskアプリケーション内でMatplotlibのプロットをPNG画像としてブラウザに返す方法を、具体的な手順とサンプルコードとともにわかりやすく解説します。 実装の流れ FlaskでMatplotlibのグラフを表示するまでの基本的な手順は以下の通りです。 小さなFlaskアプリケーションを作成する カレントディレクトリに移動し、環境変数を設定してアプリを起動する$ export FLASK_APP=file.py$ flask run ブラウザで http