Figures::Movie
動画ファイルを再生または出力するためのクラスです。現在は刺激をキャプチャして動画として保存するための機能のみが実装されています。
動画の保存方法
#include <psychlops.h> using namespace Psychlops; void psychlops_main() { Canvas cnvs(Canvas::window); int CANVAS_FRAMENUM = 0; Psychlops::Rectangle rect; rect.set(100,100).centering().shift(-100, 0); Figures::Movie movie; //! Movie型の変数を宣言する movie.source_area.set(300,300).centering(); //! キャプチャする領域(Rectangle)を設定する ///+ Drawing Loop ///////////////////////////////////////////////////////////////// while(!AppState::shouldBeClose) { if(Keyboard::esc.pushed()) AppState::shouldBeClose = true; cnvs.clear(); // rect.shift(3, 0).draw(Color::white); cnvs.flip(); CANVAS_FRAMENUM++; if(10<CANVAS_FRAMENUM && CANVAS_FRAMENUM<130) { // キャプチャする時間を制限する(これを忘れるとメモリが不足することがあります) movie.captureThisFrame(); //! 直前にflipしたフレームからキャプチャする。 } } ///- Drawing Loop ///////////////////////////////////////////////////////////////// movie.save("image.m4v", 60); //! キャプチャ動画の保存(拡張子はm4vを推奨。60fps。) movie.save("captured"); //! キャプチャ動画の保存(captured00000png, captured00001.png…という連番画像ファイルを生成) }
Movie型の変数を宣言する
Figures::Movie 変数名; という形でMovie型の変数を確保します。
キャプチャする領域を設定する
- 刺激描画ループに入る前にキャプチャする領域を設定します。
- Movie型の変数のsource_areaプロパティでキャプチャする領域を設定できます。source_areaプロパティはRectangle型です。
フレームごとにキャプチャする。
- キャプチャは直前にflipしたフレームから行われるので、flip命令の直後にcaptureThisFrame命令を入れると分かりやすくなります。
- また、キャプチャに時間やキー押しの有無などで制限を付けない場合、Movie型に無圧縮の動画データが蓄積し、メモリの容量を超えてしまうことがあるので、if文などで制限を付けてください。
キャプチャ動画の保存
- 刺激描画(キャプチャ)ループが終了した後、保存した画像列をファイルに保存します。
- save命令を使うとムービーを動画ファイルとして保存します。
- 第一引数は保存するファイル名、第二引数はFramePerSecondです。
- 拡張子にm4vを指定すると、Windows, MacOSXの両方で標準のメディアプレーヤ・PowerPointでの再生が可能なファイルを生成することが出来ます。
- 特許上の問題のため、WindowsでQuickTime用の.movファイルを作ることは出来ません。
- saveFramesAsImages命令を使うと連番のpng画像ファイルを生成します。
- 引数はファイル名のプリフィックスです。例えば"capture"と入力するとcapture00000.png, capture00001.png, capture00002.png…と連番でファイルが生成されます。
- save命令を使うとムービーを動画ファイルとして保存します。
- ファイル名やプリフィックスに/を入れ、"output/image.m4v" 等と書くことでパスを指定することができますが、指定したフォルダが存在しない場合は保存に失敗します。
キーワード:
参照:[リファレンスマニュアル]