Processingで立方体を作るPart2

Processingの記事を書いたちょうどその日、結構前から購読させていただいている trial and error さんでもProcessing記事が執筆されていました。せっかくなので、紹介も兼ねてPart2いってみよー!
http://techno-st.net/2008/12/12/processing-videomoviemaker.html

Processingで動画を撮る

この記事を読むまで知らなかったんですが、Processingでは動画も撮れるんですね!やっぱりProcessingすごいわー。上記記事にも書いてありますが、 MovieMaker という関数があって、これは

MovieMaker(parent, width, height, filename, fps, type, quality);

ここで、

  • parent:ほとんどの場合 this
  • width:横の大きさ
  • height:縦の大きさ
  • filename:作成するファイルの名前(最悪ここまでだけでもOK)
  • fps:リフレッシュレートの設定(Fresh per Secondだっけ、確か)
  • type:動画の種類。どうやら、H.263以外の形式だと上手くいかないらしい。
  • quality:動画の品質(WORST, LOW, MEDIUM, HIGH, BEST, LOSSLESS)

というふうに設定。あとは、addFrameしていくだけ。

import processing.opengl.*;
import processing.video.*;
MovieMaker mm;
void setup() {
  size(400,400,OPENGL);
  mm = new MovieMaker(this,400,400,"box.mov",30,MovieMaker.H263,MovieMaker.MEDIUM);
  smooth();
  frameRate(30);
}

void draw() {
  background(0);
  fill(255,0,0);
  translate(200,200);
  rotateX(map(mouseY,0,height,0,PI));
  rotateY(map(mouseX,0,width,0,PI));
  rotateX(frameCount * 0.01);
  rotateY(frameCount * 0.01);
  rotateZ(frameCount * 0.01);
  box(150);
  mm.addFrame();
}

void keyPressed() {
  if(key == ' ') {
    mm.finish();
    exit();
  }
}

下のkeyPressed関数はその名の通り、何かキーが押されたときに発動するイベント。ここで、key(押されたキー)が半角スペースだったらfinish関数が発動され、撮影を停止し、exitでプログラムを終了させます。

はじめてのようつべあっぷろーど

動画はやっぱり容量を食うので、どこかアップできるところに上げるのが一番・・・。と、考えていたら。あ、YouTubeがあるじゃんー・・・と思いつきアップロードしてみました。

アップロードはそこまで手間でもなく、TopからUpload,Video Fileを選択し、アップしたいビデオを選択して(今回、MyDocumentのProcessingのフォルダに動画が作成されているのでそこ)、Title,Description,Tag,Categoryを設定してしばらく待つだけ。とっても簡単でした。

いぢってみる

YouTubeで見ると、かなり画質が粗いのですが元ファイルをQuickTimePlayerで見てみても結構粗かったりします。まぁ、MEDIUMだし・・・というわけでLOSSLESSにしてみました。

  • 結果:大した変化なし

・・・うーむ。fpsを上げてみます。一気に倍の60fps

  • 結果:大した変化なし

結構マシンスペックに左右されるのかしら。お試しください