« スクリプトで読み込んだ画像に手を加えて保存する | トップページ | スクリプトでモーダルダイアログ »

スクリプトで動画ファイルの作成

動画ファイルをフレーム指定でBaseBitmapに読み込むのはLoad()メンバ関数で可能なわけですね。では、動画としての保存はどうなんだろう。
MovieSaver()クラスで可能なようですな。メンバ関数はOpen()、AppendFrame()、Close()の3つだけ。「開いて追加して閉じる」だね。じゃあやってみよう。

/*
動画ファイルの作成
08.06.02
*/


var path = new(Filename);//ファイル用パス

if(!path->FileSelect("動画ファイルの作成" , TRUE))return;//ファイルダイアログ
path->SetSuffix("mov");//QT拡張子

var bm = new(BaseBitmap , 320 , 240);//320×240の画像
var ct = new(BaseContainer);//コーデック等の為のコンテナ
var ms = new(MovieSaver);//動画保存用クラス
var i;

//ct->SetData();コーデックなどの設定をするならコンテナにデータを入れる

//ファイルパス:path、基本フレーム:bm、フレームレート:30、ファイルタイプ:QT Custom、データ:ct、αチャンネル:なし(FALSE)
ms->Open(path , bm , 30 , FILTER_MOVIE_USER , ct , FALSE);

bm->SetPen(vector(1.0));//色の設定

//30フレーム(1秒)分の保存
for(i = 0 ; i < 30 ; i++){
  bm->DrawRect(0 , 0 , i * 319/29.0, 239);//左から画面が白くなる
  ms->AppendFrame(bm);//フレームの追加
}

ms->Close();//閉じる

このスクリプトを実行すると1秒間で左から右へ白でワイプされます。
MovieSaverクラスのメンバ関数Open()の1番目の引数はファイルパス。2番目は基本フレームで、サイズ、カラー深度等の基準になります。3番目はフレームレート。4番目はファイルタイプ。

FILTER_AVI_SMALL AVI小
FILTER_AVI_BIG AVI大
FILTER_AVI_USER AVIカスタム
FILTER_MOVIE_SMALL QT小
FILTER_MOVIE_BIG QT大
FILTER_MOVIE_USER QTカスタム

5番目は圧縮コーデックなどのデータ。コンテナのデータIDはマニュアルに載っているけど、設定するデータは載っていないのかぁ。どう設定するんだろう。6番目はαチャンネルの有無。このメンバ関数を実行するとファイルが作成されます。

動画像は1フレームづつAppendFrame()メンバ関数で追加します。全てを追加後Close()メンバ関数でファイルを閉じます。

そろそろスクリプトでダイアログを使いたいなぁ。

|

« スクリプトで読み込んだ画像に手を加えて保存する | トップページ | スクリプトでモーダルダイアログ »

コメント

この記事へのコメントは終了しました。