ã¹ãªããã¹ãã£ã³åç»ãä½ã£ã¦ã¿ã
ãProcessingã使ã£ã¦ã¹ãªããã¹ãã£ã³åç»ãä½ã£ã¦ã¿ã¾ãããå
ã
ã¯ãツブゾロッタフィルムãããã®ã【動画】人間が液体のようにたぷんたぷんになる不思議な映像手法「スリット・スキャン」ãã¨ããè¨äºãè¦ã¦ããããé¢ç½ãããã£ã¦ã¿ãããªã¨æã£ãã®ããã£ããã§ãã
ãå
è¨äºã§ã¯ãAdobe AfterEffectsã使ã£ã¦ããã®ã§ããã大æµã®äººã¯ãããªã½ããæã£ã¦ããªãã¯ãã§ãããããªã¨ãã¯ããéããªããªãä½ãã°ãããããªããç²¾ç¥ã§ãProcessingã¨ããããã°ã©ãã³ã°è¨èªã使ã£ã¦ææ¦ãã¦ã¿ã¾ããã
ã¹ãªããã¹ãã£ã³ã£ã¦ä½ï¼
ãã¹ãªããã¹ãã£ã³ã¯ãæ ç»ã§ä½¿ãããç¹æ®ææ³ã§ããæ¹æ³ã«é¢ãã¦ã¯ã調ã¹ãã°è²ã
åºã¦ãã¾ãããå人çã«ã¯ããã¾ããã¿ãã£ã«ã ããã®å
è¨äºãä¸çªåãããããã£ãã§ããã¢ããã°ã§ããã¨åãé£ããç¹æ®ææ³ã«ãªãã®ã§ããããã¸ã¿ã«ã ã¨å®ã¯ç°¡åã«ã§ãã¦ãã¾ãã¾ãã
ãç°¡åã«èª¬æããã¨ãä¸å³ã®ããã«æ åãnåå²ãã¦ããã1ãã¬ã¼ã ãã¤åçããæéããããã¦ãã£ã¦ããã®ã§ãã
ããã£ãããã ãã§ãæ åãã¿ãã³ã¿ãã³ã«ãªã£ã¦ãã¾ãã®ã§ããã§ã¯æ©éå®ä¾ãè¦ã¦ã¿ã¾ãããã
å®ä¾ï¼åç»ï¼
ãçµæ§ãã·ããã·ãã§ããï¼
ã½ã¼ã¹ã³ã¼ã
ãProcessing使ãã¾ããProcessingãã¦ã³ãã¼ããã¦ä¸ããï¼ãã¼ã¸ã§ã³ã¯1.5.1ã使ã£ã¦ä¸ããï¼ãProcessingã®ä½¿ãæ¹ã¨ãã¯ãこちらãã¨ãè¦ã¦ä¸ããã
ãå¾ã¯ä»¥ä¸ã®ã½ã¼ã¹ã³ã¼ãã³ãããã¦å®è¡ãã¦ã好ããªåç»ãã¡ã¤ã«ãæå®ããã ãã§ããåç»ãä½ããã¦è¡ãã®ã§ãæ°ãæ¸ãã ã¨ããã§ã¹ãã¼ã¹ãã¼ãæ¼ãã°ã½ã¼ã¹ã³ã¼ããä¿åãããã©ã«ãã«ãslitscan.movãã¨ããåç»ãåºæ¥ä¸ããã¾ããåç»ã¯ä¸èçã§åºå®ãã¦æ®ã£ãåç»ã®æ¹ãåºæ¬çã«ã¯ããæãã«ãªãã¾ãã
ããã®å¤ãä½äºç®ã§SFæ ç»ãä½ã£ã¦ã¿ããæ¹ããåæ§ã®å¤ä¼ã¿ã®å®¿é¡ã«ã´ã£ããï¼ãèªç±ã«ä½¿ç¨ä¸ããã
import hypermedia.video.*; import processing.video.*; int fps = 60; OpenCV opencv; MovieMaker mm; // number of frame final int N_Frame = 180; // Frame count int FrameCont = 0; //Window Size final float pic_x = 1920; final float pic_y = 1080; PImage[] images = new PImage[N_Frame]; PImage[] slit_images = new PImage[N_Frame]; int slitwidth; void setup() { size((int)pic_x, (int)pic_y, P3D); println("select movie."); String moviePath = selectInput(); opencv = new OpenCV( this ); opencv.movie(moviePath, (int)pic_x, (int)pic_y); mm = new MovieMaker(this, (int)pic_x, (int)pic_y, "slitscan.mov", fps, MovieMaker.VIDEO, MovieMaker.LOSSLESS); frameRate(fps); opencv.read(); for(int i=0; i<N_Frame; i++){ images[i] = opencv.image(); } slitwidth = (int)(pic_y / (float)N_Frame); } void draw(){ opencv.read(); images[FrameCont] = opencv.image(); int tmpFrame; for(int i=0; i<N_Frame; i++){ tmpFrame = FrameCont + i + 1; if(tmpFrame > N_Frame-1){ tmpFrame = tmpFrame - N_Frame; } slit_images[i] = images[tmpFrame].get(0, i*slitwidth, (int)pic_x, slitwidth); } for(int i=0; i<N_Frame; i++){ image(slit_images[i], 0, i*slitwidth, (int)pic_x, slitwidth); } mm.addFrame(); FrameCont++; if(FrameCont > N_Frame-1){ FrameCont = 0; } } void keyPressed() { if (key == ' ') { mm.finish(); println("save movie."); exit(); } }