動画生成モデルを使ってみる
動画生成モデルと言っても今は色々と出てきていて、そのタスクの種類によっても多種多様です。stable-video-diffusion に代表されるテキストプロンプトのみを初期ユーザー入力として動画を生成するものもあれば、sora2のように特定の動画に出現している人物を入れ替えるというものあったりとで、本当に多種多様です。 ボクは普段VFXの現場にいるので、*subject removal* は非常に興味のあるジャンルです。 ということで、目をつけたのは *VACE(Wan2.1)* です。
このモデルを用いて、画像から指定人物を消すということをやってみたいと思いました。
そして、このモデルgithubページを見て、何も考えずに、
「Inpaintingでマスクして、背景のリファレンス渡せば消えるでしょ?」
そう思ったのですが・・・
今回の目標
「人物を動画から消す」
動画から抜粋したイメージです。人物二人が振り返って何かから逃げているような素材になります。
静止画のInpaintingなら、今やPhotoshopでも一瞬です。しかし、動画(Video-to-Video)となると話は別。時間的な整合性を保ちつつ、欠損部分を埋めなければなりません。
欲張りすぎた「素直なアプローチ」
VACE(Wan2.1)の入力仕様を見て、我々は「最も丁寧で、最も情報量が多い方法」を選びました。今思えば、これが敗因でした。
行った設定(全部盛り):
- ターゲット: 二人の人物を同時に消そうとした。
- マスク形状: 矩形(バウンディングボックス)のような大雑把なものではなく、「人型に沿った精密なマスク」 を作成して渡した。
- マスク領域の色: マスクの下の元映像はそのまま。「グレー塗りつぶし」などの前処理はしなかった。
- リファレンス画像: 背景のみのクリーンな画像を、「元動画と同じ解像度・同じ画角(全画面)」 で渡した。
コード的にはこんな感じです(vace_wan_inference.py)。
python vace_wan_inference.py \
--src_video "origsour.mp4" \
--src_mask "human_shape_mask.mp4" \
--src_ref_images "background_clean_full.png" \
--prompt "empty background, high quality" \
...
「丁寧なマスク」に「完璧な背景画像」。これで失敗するはずがない。
しかし、出力された動画は ? でした。
マスクは渡してます。
referenceも渡してます。
失敗事例: 情報の衝突事故
色々調べた感じだと、gitのレポジトリには run_vace_pipeline.sh というファイルがあって、これを通すと、マスクエリアをグレー(0.5)で塗りつぶすことがわかりました。
なので、これを使ってみましょう。


1. 「誰やねん!」って思わず口から音を発した
二人の人物は消えませんでした。
誰かわからん人たちが踊ってる・・・

青いし・・・
とりあえず、グレーで塗りつぶすと入れ替えれることがわかった。これはモデルの前処理で[-1,1]で入力範囲を変更するのですが、この処理はsd-vaeとかでよくやる処理ではあるんですが、この処理後にこのグレーの部分は 0 になります。そうすることで、おそらくこの部分に正しく ノイズだけ が乗ることになります。
2. ドキュメントやコードはしっかり読みましょう
精密に作ったはずの人型マスクだったのに、別人を生み出すことになるとは全く思ってませんでした・・・
run_vace_preproccess.sh / README.md を読むと、
python vace/vace_preproccess.py \
--task inpainting \
--mode bbox \
--bbox 50,50,550,700 ...
のようなコマンド例があり、BBoxを直接指定してマスクを作るワークフローが定義されています。
つまり、人型ではなくbboxのマスクが推奨されていることがわかります。
とりあえず、準備します。
sam3はbboxも出力できるので、それを利用します。
このアドベントカレンダーのシリーズでも数回に分けてsam3には触れてます。
とりあえずこれで生成しなおします。
${\huge \textsf{消えた!}}$ ${\tiny \textsf{(手に持ってる銃はなんかまだ残ってる)}}$
銃はまだ少し残ってるものの、消えました。グレーのボックスエリアから漏れている部分ですね。
もうしばらく続きます。
VFX素材提供:ActionVFX(Free Assets)
VFX assets courtesy of ActionVFX








