Pythonから個々のフレームをファイルに保存せずにムービーを生成する
質問
matplotlibのpythonスクリプトで生成したフレームから、h264またはdivxのムービーを作りたいと思っています。このムービーには約100kフレームがあります。
Web上の例[例1]では、私は各フレームをpngとして保存し、これらのファイル上でmencoderまたはffmpegを実行する方法のみを見ました。私の場合、各フレームを保存するのは非現実的です。matplotlibから生成されたプロットを取り、それを直接ffmpegにパイプし、中間ファイルを生成しない方法はありますか?
ffmpegのC-apiでプログラミングすることは、私にとって難しすぎます[eg. 2]。また、そうしないとムービーファイルが大きすぎて後続のステップに進めないため、x264 などの圧縮率の良いエンコーディングが必要です。だから、mencoder/ffmpeg/x264にこだわるのは素晴らしいことだと思います。
pipes [3]でできることはありますか?
[1] http://matplotlib.sourceforge.net/examples/animation/movie_demo.html
[2] x264 C API を使用して一連の画像を H264 にエンコードするにはどうすればよいですか?
[3] http://www.ffmpeg.org/ffmpeg-doc.html#SEC41
どのように解決するのですか?
この機能は、現在 (少なくとも 1.2.0 の時点、たぶん 1.1) matplotlib に組み込まれた
MovieWriter
クラスとそのサブクラスである
animation
モジュールのサブクラスを作成します。また
ffmpeg
をあらかじめインストールしておく必要があります。
import matplotlib.animation as animation
import numpy as np
from pylab import *
dpi = 100
def ani_frame():
fig = plt.figure()
ax = fig.add_subplot(111)
ax.set_aspect('equal')
ax.get_xaxis().set_visible(False)
ax.get_yaxis().set_visible(False)
im = ax.imshow(rand(300,300),cmap='gray',interpolation='nearest')
im.set_clim([0,1])
fig.set_size_inches([5,5])
tight_layout()
def update_img(n):
tmp = rand(300,300)
im.set_data(tmp)
return im
#legend(loc=0)
ani = animation.FuncAnimation(fig,update_img,300,interval=30)
writer = animation.writers['ffmpeg'](fps=30)
ani.save('demo.mp4',writer=writer,dpi=dpi)
return ani
関連
-
[解決済み] Pythonの辞書からキーを削除するにはどうしたらいいですか?
-
[解決済み] なぜC++はPythonよりもstdinからの行の読み込みが遅いのですか?
-
[解決済み] Pythonでファイル名から拡張子を抽出する
-
[解決済み] Pythonでパスから拡張子なしでファイル名を取得する方法は?
-
[解決済み] Pythonが解釈される場合、.pycファイルとは何ですか?
-
[解決済み] 他のPythonファイルをインポートするには?
-
[解決済み】Pythonでディレクトリ内の拡張子.txtのファイルをすべて検索する
-
[解決済み] 小数点以下1桁を取得する[重複]。
-
[解決済み] なぜ(0-6)は-6=偽なのか?重複
-
[解決済み] subprocess.run()の出力を抑制またはキャプチャするには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] matplotlibからフレームを取り除く方法 (pyplot.figure vs matplotlib.figure ) (frameon=False matplotlibで問題発生)
-
[解決済み] Pandasのデータフレームでタプルの列を分割するにはどうしたらいいですか?
-
[解決済み] Pythonです。未束縛のメソッドを束縛する?
-
[解決済み] なぜ(0-6)は-6=偽なのか?重複
-
[解決済み] python-requests モジュールからのすべてのリクエストをログに記録します。
-
[解決済み] Django 1.7で初期マイグレーションからマイグレートバックする方法は?
-
[解決済み] tensorflowのCPUのみのインストールでダイナミックライブラリ 'cudart64_101.dll' を読み込めなかった
-
[解決済み] Python Logging でログメッセージが2回表示される件
-
[解決済み] Flaskで非同期タスクを作る
-
[解決済み] Alembicアップグレードスクリプトでインサートやアップデートを実行するにはどうすればよいですか?