2007-10-17
■ [実験][AviSynth] ダンスの背景飛ばし……?

はじめに
・その他
ステージ差分でキャラ部だけ消せるんじゃね? とか……まあ無理?(爆
の実証実験です。レタッチ一切無し、使用ソフトはVirtualDubMod+AviSynth、テロップ入れはVS9。
結果
「ニコニコ動画 - アイドルマスター ダンスキャラ抜き実験」を参照下さい。
コマによっては結構良い抜け方をしてるけど、全体的にはキャラ周辺部レタッチ必須と言う感じ。あんまり役に立ちそうに無いかなあ。あと瞬きのタイミングがランダムっぽくて、時々目が抜けてたりしてます。
色滲みの無いHDソースで60fpsとかだと違うのかもしれないけれど……誰かやってみませんか?(爆
とりあえず一番綺麗に抜けたであろう原寸大サンプルも貼っておく。一番綺麗なのでこの程度だから騙されないように御注意(;´Д`)

AVSソース
#!AviSynth
# 元動画の解像度は704x400
# 元動画Aをロード
s1=AviSource("H:\tmp\gomyway_1.avi").KillAudio()
# Aとは別背景だが、同一カメラアングルで動作フレームが一致する
# 元動画Bをロード。Aと開始フレームを合わせる
s2=AviSource("H:\tmp\gomyway_2.avi").KillAudio().Trim(12, 3889)
# 白背景を作成
white=BlankClip(length=1, width=704, height=400, pixel_type="RGB32", fps=29.97, color=$ffffff).Loop(4000)
# AとBの差分を表示するクリップを作成し、差分を強調する
# cf.http://avisynth.org/mediawiki/Overlay#Parameters
diff=Overlay(s1, s2, mode="Difference").ColorYUV(off_y=-127).ConvertToRGB32()
# 差分表示クリップからブラックをキーとしてマスク作成。適用レベルは適当
mask=ColorKeyMask(diff, $000000, 25)
# アルファチャンネルを反転しぼかしを掛ける(アンチエイリアスもどき)
mask=mask.ShowAlpha().Invert().Blur(1.3).GreyScale()
# 元動画Aに上で作成したアルファチャンネルを設定
layer=s1.ConvertToRGB32().ResetMask()
layer=Mask(layer, mask)
# アルファチャンネルを設定した元動画Aを適当な背景と合成する
# ここでは白背景と合成
Layer(white, layer, "add")
追記(2007/11/07)
コメートさんPが発展させて下さった模様。
こいつはスゲェー! HDソースとかで色々試してたけどトリオでセンターだけ取り出すと言う発想には至らなかったわ。本当にありがとうございました。
クロップについては適当な矩形マスク作ってAviSynthで合成してやりゃ代用できるかな……VS11と比べたら位置合わせの手間がめんどくさそうではあるけれど。
■ ニコニコ

RC2になってから[:title]記法でちゃんとタイトル取れないのがあるなあ……
コメントを書く