スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Processingで動画を再生したりなんやかんやする

【2017/01/27追記】このコードは現在うまく動作しないようです。ちなみにこの当時の環境はWindows7+Processing2.2.1でした。原因は調査中です。

今日はProcessingという言語を使って動画を再生してみたいと思います。

インストールやなんかは調べれば出てくると思います。
今回はインストールがすでに終わってる状態から始めていきます。

Processingは書いたらすぐコンパイルができるのがよいところです。
ちょっと書いてみましょう。



起動するとこんなエディタが現れます。
ここにコードを書いていきます。

println("Hello World!");
println("I'm Mokichi!!");


実行します。左上の右向きの三角マークを押しましょう。



下部のコンソールに文章が表示されました。



と同時にこんなもんが現れました。
Processingはどちらかといえばグラフィック?表示とかそんな方面に強いです。
視覚的にわかりやすいものを作りやすい環境なのです。
こいつはそんな視覚的なものを配置していくためのフィールドです。

そこでさっきのプログラムをこんな風に書き換えてみます。


text("Hello World!\nI'm mokichi!!", 15, 50);




さっきのちっさいウィンドウの中に文字が現れました。
こんな風にProcessingは簡単にフィールドに文字や画像を配置することができます。

さて、そろそろ本題の動画再生の方に入りたいと思います。

Processingで動画を扱うには、動画専門のライブラリが必要です。

import processing.video.*;


これで動画が扱えるようになります。

動画を再生するためにこんなプログラムを書いてみました。
こちらを参考にしています。


import processing.video.*;

Movie lectureMovie;

void setup(){
size(900,450);
lectureMovie = new Movie(this, "tiger.mp4");
lectureMovie.loop();
}
void draw(){
image(lectureMovie,0,0,900,450);
}


まず、lectureMovieという名前のMovie型の変数を用意します。

次にsetup()の中で、
size()でフィールド全体の横の長さ、縦の長さを指定、
lectureMovieにおなじみtiger.mp4というファイル名の動画を読み込み、
lectureMovieをloop()で連続再生モードに設定します。

そしてdraw()の中で、lectureMovieをフィールドに表示させます。

ここでひとつ注意点があります。
作ったプログラムを保存すると、デフォルト設定のままでは
ライブラリ-ドキュメントの中のProcessingフォルダの中に、プログラム名と同じ名前のフォルダが作成され、その中に保存されています。
今回はplay1という名前で保存しています。
プログラムが使用するデータは、このplay1の中に自分で「data」という名前のフォルダを作りそこに入れておく必要があります。



イメージはこんな感じです。

それでは実行してみましょう。



はい、動画が再生されました。

が、このままでは虎が歩いてはこっちを見て歩いてはこっちを見て…ってのが延々と繰り返されるだけですね。これではちょっとつまらない。
そこで、動画を一時停止したりできるようにしたいと思います。




import processing.video.*;

Movie lectureMovie;
boolean isPaused;

void setup(){
size(900,450);
lectureMovie = new Movie(this, "tiger.mp4");
lectureMovie.loop();
isPaused = false;
}
void draw(){
image(lectureMovie,0,0,900,450);
}

void movieEvent(Movie m){
m.read();
}
void mousePressed(){
if(isPaused == false){
lectureMovie.pause();
isPaused = true;
}
else if(isPaused == true){
lectureMovie.play();
isPaused = false;
}
}


先ほどのコードに少し手を加えました。
まず、isPausedというboolean型の変数を導入しました。
booleanってのはture/falseの2種類の値しか持ちません。つまり、イエスかノーかどちらかという制御に向いているということです。
ここでは、「一時停止している状態」をture、「動画が再生されている状態」をfalseとしたいと思います。

再生開始時は動画は再生されている状態になりますから、isPausedはfalseになります。

movieEvent()というのは、動画を制御するための関数です(おそらく…まだ勉強中です)。

mousePressed()は、マウスが押されたときに動作します。
ここで、動画が再生中なら一時停止、一時停止中なら再生開始という処理を指定します。

それでは、実行してみましょう。
静止画だとわかりませんが、マウスのクリックで動画が一時停止したり動き出したりするはずです。
これらを組み合わせていくことで、動画をいろいろ制御しながら再生することができます。

それでは、今日はこの辺りで。
関連記事

コメント

音しか出ない

いきなりすみません。
コードを参考にさせて頂いたのですが、ウィンドウが出ても音のみ流れる現象が起こります。
なにが原因か分かりますか…?

Re: 音しか出ない

こんにちは。
閲覧ありがとうございます。
すみませんが、今現在環境が変わってしまいProcessingを実行することができないので憶測になりますが、
あまりに長い、または画質のいい動画を再生しようとするとかなりメモリを食って処理が重くなります。
なので、一度軽い動画ファイルで試してみてはいかがでしょうか。
私が考えられる原因はこれくらいなのですが……。
お返事が遅くなってすみません。

> いきなりすみません。
> コードを参考にさせて頂いたのですが、ウィンドウが出ても音のみ流れる現象が起こります。
> なにが原因か分かりますか…?

映像が流れない

初めまして、突然申し訳ありません。
movieを流すコードを参考にさせていただいています。しかし、エラーとならないのに動画が流れません。10秒の40MBの動画を流そうとしています。どのような原因が考えられるでしょうか?

Re: 映像が流れない

こんばんは。初めまして。
コメントありがとうございます。返信が遅くなってしまいすみません。

こちらでもprocessingをインストールして実際にコードを動かしてみたところ、
同じようにエラーなしで動画が再生されない現象が発生しました。
もしかしたら、processingのバージョンとwindowsのOSの違いかもしれません。
このコードを書いたときの環境は、win7とprocessing2.2.1でした。
現在(動作しない)の環境は、win10とprocessing2.2.1及びwin10とprocessing3.2.3です。
また、手元のwin7のPCでprocessing2.1で動かしたところ、動画が再生されました。
参考になるかはわかりませんが一応……。

もう見てらっしゃらないかもしれませんが、もしよろしければそちらの環境(OS、processingのバージョン)を教えていただけないでしょうか。
私もちゃんと動作するコードを調べてみたいので……。

承認待ちコメント

このコメントは管理者の承認待ちです
非公開コメント
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。