2019プログラミング講座15:ビデオのコントロール

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:
上記の映像のコントロール方法を応用して作品を制作すること。
自分で撮影した映像素材を使うこと。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です