moviebarcode 風の画像を作成する AviSynth 関数
moviebarcode とは
moviebarcode というものがあります。
簡単に説明すると、moviebarcode とは、映画のすべてのフレームを左から順に並べて水平方向に圧縮してできた画像です。バーコードのように見えることから、「moviebarcode」と名付けられたものと思われます。
映画のコマを圧縮してバーコード化した「moviebarcode」 - GIGAZINE でも紹介されていますので、詳しくはそちらを参照してください。
MovieBarcode 関数 by um3k
さて、この moviebarcode を AviSynth で実現するための関数が先日公開されました。作者は、um3k 氏です。
Resize to 1 pixel wide? - Doom9's Forum
実際に使ってみました。
動作には、GScript が必要ですので、あらかじめ用意しておきます。
素材は、http://media.xiph.org/ldv/pub/test_sequences/601/ (Xiph.org :: Test Media )にあるテスト用動画の「576i25_stockholm_ter.yuv」です。YUV フォーマットで制作されたものなので、読み込みには RawSource を使用しました。
スクリプトサンプル
# プラグインの読み込み LoadPlugin("C:\foo\plugins\rawsource.dll") LoadPlugin("C:\foo\plugins\GScript.dll") Load_Stdcall_Plugin("C:\foo\plugins\yadif.dll") # C プラグイン # ソースの読み込み RawSource("C:\bar\576i25_stockholm_ter.yuv", pixel_type="I420") # インターレース解除 AssumeTFF() # トップフィールドファースト Yadif() # たまたま手元にあった Yadif を使用 # ソースが短いのでループ Loop(100) # バーコード化 width = last.framecount()/100 # 総フレーム数の 1/100 にしてみた height = last.height()/2 # 高さはソースの半分にしてみた MovieBarcode(width, height) return last # MovieBarcode 関数 by um3k function MovieBarcode(clip src, int w, int h) { GScript(""" src = src.ConvertToRGB24() comp = src.BlankClip(width=1, height=h) for(f=1,w,1) { fc = src.framecount cf = (fc / w) * f s = src.SelectEvery(fc, cf).BilinearResize(8, h).HorizontalReduceBy2().HorizontalReduceBy2().HorizontalReduceBy2() comp = StackHorizontal(comp, s) } return comp.Crop(1, 0, 0, 0).Trim(0,1) """) }
結果
最後に
短くて変化の乏しい動画だったので、あまりバーコードっぽくなりませんでした。
それとけっこう重いと思うので、とくにフレーム数の多いソースの場合は注意した方がいいかもしれません。
- MovieBarcode
- 各フレームを 1 ピクセル幅にリサイズし、すべてのフレームを水平方向に並べて、バーコードのような画像にする関数。
- 動作に必要なもの: GScript
- 作者: um3k
- cf. http://forum.doom9.org/showthread.php?t=159909
- cf. http://moviebarcode.tumblr.com/