VideoライブラリはファイルやWebカメラからの動画を扱うことができるライブラリである。

次の例は動画ファイルを読み込んで、それを表示する。動画のパス z:/Videos/douga.mp4 は適宜設定すること。なお、スケッチを保存してできるフォルダの中にdataという名前のフォルダを作成し、そこに置いたファイルであれば、ファイル名だけでよい。 mov.loop()は動画を繰り返し再生する。その代わりにmov.play()とすると、動画は1回だけ再生される。mov.available()で動画の次のコマが利用可能な状況であることを取得する。取得可能であれば、mov.read()で読み込んで、image(mov...)で表示する。

import processing.video.*; Movie mov; void setup(){

 size(640, 360);  
 mov = new Movie(this,"z:/Videos/douga.mp4"); 
 mov.loop();  

} void draw(){

 if( mov.available() ){  
   background(0);  
   mov.read();  
   image( mov, 0, 0, width, height );  
 }  

}

上の例では、画面の大きさに合わせて動画を拡大・縮小して表示する。

Processingの現バージョンでは、size()に変数を指定できないので、前もって動画の大きさがわかればそれを設定する。

もし、プログラム上で画面の大きさを動画の大きさに合わせたければ、次のようにmov.width, mov.heightで動画の大きさを得て、surface.setSize()で画面の大きさを設定する。 import processing.video.*; Movie mov;

void setup(){

 size( 200, 200 ); 
 mov = new Movie(this,"z:/Videos/douga.mp4"); 
 mov.loop();  

 surface.setResizable( true ); 
 while( !mov.available() ){ 
   delay( 10 ); 
 } 
 mov.read(); 
 surface.setSize( mov.width, mov.height );  
 mov.jump( 0 ); 
 surface.setResizable( false ); 

} void draw(){

 if( mov.available() ){  
   background(0);  
   mov.read();  
   image( mov, 0, 0, width, height );  
 }  

}

Image(mov,...)で画像を表示する代わりに、画像処理を行うことで、動画を加工して表示させることができる。次の例は、モザイク表示をする。int block=20でモザイクの大きさを20ピクセルに設定している。mov.get(i, j)で動画のコマの点(i, j)の色を取得し、一辺blockの正方形をその色で塗りつぶす。for(i=0; i<width; i+=block)は、iを0からwidthまでblockだけ増加させていく繰り返しを表す。 特に設定しなければ、動画と画面の大きさが異なるので、x = int( map(i, 0, width, 0, mov.width) )で、画面の横の位置iを動画の横の位置xに変換している。

import processing.video.*; Movie mov; int block = 20;

 

void setup(){

 size( 400, 300 ); 
 mov = new Movie(this, "z:/Videos/douga.mp4");  
 mov.loop(); 

}

void draw(){

 int x, y; 
 if( mov.available() ){  
   background(0);  
   mov.read(); 
   noStroke(); 
   for( int i=0; i<width; i+=block ){ 
     for( int j=0; j<height; j+=block ){ 
       x = int( map(i, 0, width, 0, mov.width) );  
       y = int( map(j, 0, height, 0, mov.height) );  
       fill( mov.get(x, y) );  
       rect( i, j, block, block ); 
     } 
   } 
 }  

}

パソコンにカメラがついていれば、ファイルの代わりにカメラで撮影した動画を扱うことができる。 import processing.video.*; Capture cam;

void setup(){

 size(640, 360);  
 cam = new Capture(this); 
 cam.start();  
 surface.setResizable( true ); 
 surface.setSize( cam.width, cam.height );  
 surface.setResizable( false ); 

} void draw(){

 if( cam.available() ){  
   background(0);  
   cam.read();  
   image( cam, 0, 0, width, height );  
 }  

}

MovieをCaptureに、loopまたはplayをstartに置き換えればよい。


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS