Hatena::Groupnicovideo

にわかな奴の砂場

    使えそうなものがあれば適当にどうぞ。(自己責任的な意味で) 過去ログ

2007-09-21初っ端から

[][] コミュの背景飛ばし 04:43  コミュの背景飛ばし - にわかな奴の砂場 を含むブックマーク はてなブックマーク -  コミュの背景飛ばし - にわかな奴の砂場

「歌入りとカラオケの差分取ってボーカル抜きできるんなら同じような理屈でキャラ動画と背景があればキャラだけ抜けるんじゃね?」

……と思って早数日。(;´Д`)

色滲みの無い高解像度のソースだと綺麗に抜けるのかな? とりあえず上げてみるテスト。万が一試行する際はファイルパスやパラメータ変更をお忘れなく。

免責

本文の記述を元に行われた全ての作業より発生した不具合について、筆者は全ての責任を負わないものとします。

(棒読み)

はじめに

手動レタッチなしでどこまでキャラだけ取り出せるかの実験です。

AviSynthについては以下を参考に。と言うかお世話になりっぱなしです。

キャラ動画を線画化

キャラ動画(オリジナル)

・layer.avs

#!AviSynth
s=AviSource("source.avi").KillAudio()
# Lanczos4Resizeで倍拡大。ソースに無駄部分が多かったのでTrimで適当に削り
layer=s.Trim(440, 1225).Lanczos4Resize(1408, 800)
return layer

これをVirtualDubModに食わせてSmartSmootherHQ*1を掛ける。「Check Greyscale」と「Visualize Blur」をチェック(重要)。他パラはプレビューを観ながら決める。この場合「Diameter」が主線の硬さで「Threshold」が主線の閾値になります。変な使い方してるのでこんな風に憶えてはいけません(;´Д`)

で、これを「layer.avi」とかして保存するわけですが、このSSHQと言う奴は各所で書かれてる通り半端じゃなく重いです。某抜き抜き先生ならこの間に数十枚抜けるんじゃなかろうかなあと思える程に。

処理後はこんな感じ。とりあえずDiameter=5,Threshold=40くらい。

キャラ動画(線画)

背景のコマを線画化

背景(オリジナル)

・bg.avs

#!AviSynth
s=AviSource("source.avi").KillAudio()
# 背景を1フレーム抽出
bg=s.Trim(442, 442).Lanczos4Resize(1408, 800).Loop(1)
return bg

これをVirtualDubModに食わせてSmartSmootherHQを掛ける。パラはキャラ動画のと同様で。

これを「bg.avi」とかして保存。1コマなのですぐ終わります。

処理後はこんな感じ。

背景(線画)

線画化したキャラ動画と背景を合成

diff.avs

#!AviSynth
# bgは1コマしか無いのでループさせる(書き忘れてたorz)
bg=AviSource("bg.avi").KillAudio().Loop(1000)
layer=AviSource("layer.avi").KillAudio()
Overlay(bg, layer, mode="Difference")
ConvertToYUY2().ColorYUV(off_y=-127)
Invert()

まあ要するにOverlay()のDifferenceモードで合成して、排他的論理和的なものを出してると、そういう事です。Subtractモードとか、或いはOverlay()じゃなくてSubtract()を使っても面白いかも。

で、めでたくキャラの線画らしきものが抜けます。動画サンプル→

キャラ背景飛ばし

キャラの内側が線でうるさくなってますが、まあアルファチャンネル作成用なので特に気にしない方向で。

使えるのこれ?

  • 背景だけのフレームがあるのが前提。無いとできない
  • 結局アルファチャンネルは手で抜かないといけない
  • 主線の切れ目を補修しないといけない
  • とにかくSSHQが重い

という問題に目をつむれば使えるかも? 処理時間*2の割には結構微妙かも。

その他

ステージ差分でキャラ部だけ消せるんじゃね? とか……まあ無理?(爆

*1An Overview of Codecs and Video Processing Software。正しい用法はwavelet NR

*2:実処理時間は自環境で2時間くらい