動画を一枚の画像に敷き詰め、グリッチしてまた動画に戻す

僕は.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にしたりして色々ためしてみるといいかもしれませんね、photoshopgimpなどのフィルタをかけてみるのもいいかもしれません、以上。