動画を一枚の画像に敷き詰め、グリッチしてまた動画に戻す
僕は.modや.sidなどの音楽ファイルをバイナリを壊してグリッチ音を作ったりするのですが、映像などには全く明るくないので以下の内容はすでに何方かがやっていたりする話なのかもしれない。
さて以下の文章を読みました。
要約 : Apple iPhone5のページのJPEGとJSとcanvasタグによるビデオの実装がやばいという話
上の内容からちょっとした疑問がわきまして、動画を一枚の画像に敷き詰め、その「敷き詰め画像」をグリッチしてまた動画に戻したらどうなるか?。
1.まず動画(http://archive.org/details/BflOggGX1963)を準備します。お猿さんがシェイクスピアを叩いています。
2.ffmpegなどで動画から画像の連番を書き出します。30秒ほど抜き出しましょう、全部で900枚です。
3.「敷き詰め画像」を作ります。コードはpythonです。
import Image import math v_width = 400 v_height = 308 f_sum = 900 f_xy = int( math.sqrt( f_sum ) ) i_width = v_width * f_xy i_height = v_height * f_xy img = Image.new("RGB", (i_width, i_height)) x=0 y=0 for i in range(f_sum): im = Image.open("%(#)04d" % {"#":i} + ".jpg") img.paste(im, (v_width * x, v_height * y)) x = (x + 1) % f_xy if x is 0: y += 1 img.save("kansei.jpg")
こんな感じの画像(縮小版)ができます。実際はものすごくでかいのでショボイ画像ビュアーで開いたりするとハングします。
4.ここでyoupyのglitchmonkeyで使われている方法でグリッチします。
import base64 j_file = "kansei.jpg" file = open(j_file, "rb").read() e_base64 = base64.encodestring(file) g_text = e_base64.replace("Qe", "ud") d_base64 = base64.decodestring(g_text) open("glitch_kansei.jpg", "wb").write(d_base64)
敷き詰め画像は以下のグリッチ画像(縮小版)になる。
5.グリッチ画像を動画にするために連番画像を作ります。
import Image import math v_width = 400 v_height = 308 f_sum = 900 f_xy = int(math.sqrt( f_sum )) i_width = v_width * f_xy i_height = v_height * f_xy im = Image.open("glitch_kansei.jpg") x=0 y=0 for i in range(f_sum): t_im = im.crop((v_width * x, v_height * y, v_width * x + v_width, v_height *y + v_height)) t_im.save("%(#)04d" % {"#":i} + ".jpg") x = (x + 1) % f_xy if x is 0: y += 1
6.ffmpegなどで連番画像を動画にしてyoutubeにポストしました。
感想
う〜ん、、、。
.jpg以外、例えば.pngや.gifにしたりして色々ためしてみるといいかもしれませんね、photoshopやgimpなどのフィルタをかけてみるのもいいかもしれません、以上。