Processingでは外部データとして、画像や音声に加えて映像を扱うことが可能です。今回は映像を扱う手法を学びます。Processingで映像を扱うためには、videoライブラリを使用します。
では、最初に映像データを用意しましょう。今回はmp4形式の映像データを用意します。Processingの「スケッチメニュー」から、「ファイルを追加」へと進み、用意した映像データを選択し「開く」ボタンを押してスケッチフォルダー内のdataフォルダーに格納します。準備ができたら、以下のコードを記述しましょう。
映像のループ再生
import processing.video.*; //videoライブラリの読み込み
Movie mov; //Movie変数を宣言しmovと名付ける
void setup() {
size(800, 600); //映像の縦横比に合わせたウィンドウサイズが望ましい
background(0);
mov = new Movie(this, "XXXX.mov"); //変数movに映像データを格納する XXXXは映像データの名称に合わせる
mov.loop(); //映像をループさせる
}
void movieEvent(Movie m) {
m.read(); //映像を読み取る
}
void draw() {
image(mov, 0, 0, width, height); //映像を画面に表示する
}
映像の再生速度のコントロール
次に読み込んだ映像の再生速度をコントロールするコードを記述します。
import processing.video.*; //videoライブラリの読み込み
Movie mov; //Movie変数を宣言しmovと名付ける
void setup() {
size(800, 600);
background(0);
mov = new Movie(this, "octopus.mov"); //変数movに映像データを格納する XXXXは映像データの名称に合わせる
mov.loop(); //映像をループさせる
}
void movieEvent(Movie m) {
m.read(); //映像を読み取る
}
void draw() {
image(mov, 0, 0, width, height); //映像を画面に表示する
//map関数を使ってmouseのx座標の値0〜widthを0.1〜2までの値に変換する
float newSpeed = map(mouseX, 0, width, 0.1, 2);
mov.speed(newSpeed); //変換された0.1〜2までの値を映像の再生速度に置き換える
}
映像のフレームをコントロール
映像のフレームの進行をマウスのX座標に関連づけるコードを記述してみましょう。
import processing.video.*;
Movie mov;
void setup() {
size(800, 600);
background(0);
mov = new Movie(this, "octopus.mov");
// 初期値として映像をポーズ(停止)させておきます。
mov.play();
mov.jump(0);
mov.pause();
}
void draw() {
if (mov.available()) {
mov.read();
float f = map(mouseX, 0, width, 0, 1); //マウスのx座標を0〜1の値に置き換え変数fに代入
float t = mov.duration() * f; //変数tにムービーの長さ(秒単位の位置)に0~1までの数値をかけて代入
mov.play();
mov.jump(t); //ムービーの再生箇所をtの位置にジャンプ
mov.pause();
}
image(mov, 0, 0, width, height);
}
2つの映像データを表示する
2つの映像データを実行ウィンドウに配置して再生します。
import processing.video.*;
Movie mov1,mov2; //変数を2つ用意する
void setup() {
size(800, 400);
background(0);
mov1 = new Movie(this, "XXXX.mov");
mov2 = new Movie(this, "YYYY.mov");
mov1.play();
mov1.pause();
mov2.play();
mov2.pause();
}
void draw() {
if (mov1.available()) {
mov1.read();
mov1.play();
mov1.loop();
}
if (mov2.available()) {
mov2.read();
mov2.play();
mov2.loop();
}
image(mov1, 0, 100, 400, 200);
image(mov2, 400, 100, 400, 200);
}
2つの映像データの再生をマウスでコントロール
2つの映像データを実行ウィンドウに配置してマウスのx座標で再生と停止を制御します。
import processing.video.*;
Movie mov1,mov2;
void setup() {
size(800, 400);
background(0);
mov1 = new Movie(this, "octopus.mov");
mov2 = new Movie(this, "tuna.mov");
mov1.play();
mov1.pause();
mov2.play();
mov2.pause();
}
void draw() {
if (mov1.available()) {
mov1.read();
mov1.play();
mov1.loop();
}
if (mov2.available()) {
mov2.read();
mov2.play();
mov2.loop();
}
//マウスのx座標をウィンドウの中心から右か左かを判定して映像を再生
if(mouseX<width/2){
image(mov1, 0, 100, 400, 200);
}else{
image(mov2, 400, 100, 400, 200);
}
}
総合課題3: 上記の映像のコントロール方法を応用して作品を制作すること。 自分で撮影した映像素材を使うこと。
