動くPNGTuber(MotionPNGTuber)プログラム操作方法と調整の手順
はじめに
「PNGTuber」は手軽だけど、もう少し動きが欲しい。「Live2D」はヌルヌル動くけど、制作や導入のハードルが高い。
そんな「アナタの心の隙間をお埋めします・・・」と言う事で、少しリッチな動きを表現できる「MotionPNGTuber」を作りました。このツールは、主にループ動画(MP4)に口パク(リップシンク)を合成するシステムです。
元動画から「口」だけを綺麗に消し去り、そこにマイク音量に合わせて動く口パーツのPNG画像を合成することで、髪の揺れや衣装のなびきを維持したまま、リアルタイムに喋らせることができます。
単純な簡単操作でアバターが作れるのでAITuberにもVTuberにも使えます!
この記事では、インストールが終わった方向けに、ソフトの操作方法と調整の手順を解説します(動画素材の準備方法は一番最後に紹介します)。
1. 口元のPNG素材の準備
まずは口パク(リップシンク)させたい動画素材(mp4)を用意しましょう。ループ動画が好ましいですが、どんな動画でも大丈夫です。
ポイント: キャラクターの顔が鮮明に見えているものを推奨。口元を動かして開閉しているものを使って下さい。また、髪の毛や服が揺れているループ動画を使うと、非常にリッチな見た目になります。
注意点: 顔(特に口元)が手や髪で隠れていないものを選んでください。あまりにも口の大きいキャラや、ほうれい線が目立つ&髭が生えているキャラには使えません。
動画が用意出来たら、assetsフォルダ内に任意の名前のフォルダを作って入れてください(説明ではassets04フォルダ、動画はloop.mp4にしました)。
次に以下のコマンドでGUIを起動します。
python mouth_sprite_extractor_gui.py起動すると操作パネルが表示されます。
手順①:ファイルの選択と解析
「選択ボタン」から先ほどの動画を選択し「解析ボタン」を押す。
すると、動画内の口を開いた部分が自動で解析されピックアップされます。
手順②:素材選び
ここでリップシンクに使いたい口の素材を選んでいきます。
ここで口の形状によって、1~5までの番号を割り当てていく形になります。
open.png これが1番に大きく口を開けた状態(「あ」など)
closed.png 口を閉じた状態
half.png 半開き(1と2の中間くらい)
e.png 1~3とは違う開き方の形(「え」など)
u.png 1~4とは違う開き方の形(「う」など)
重要なのは1~3までの口の形で、4と5は少し形状の違うものを選べばOK。
手順③:素材の成形
次に「切り取る範囲」で、上下左右の余白を口のギリギリまで詰めます。
パラメータを変えたら「プレビュー更新ボタン」を押して確認。
「フェザー幅」でぼかし具合も変えられます。馴染むよう調整して下さい。
調整が済んだら「出力ボタン」を押すと、動画と同じ階層に「mouthフォルダ」が作成され保存されます。これで口元のPNG素材の準備は完了です。
※こだわりたい人(感情差分)の口元素材の作り方は最後に説明します。
2. 本体ツールの起動と基本操作
以下のコマンドでGUIを起動します。
python mouth_track_gui.py起動すると操作パネルが表示されます。
手順①:ファイルの選択(先ほどの手順で用意したものを選択)
動画を選択: 用意したループ動画(MP4)を指定します。
mouthフォルダを選択: 口の画像(5枚)が入ったフォルダを指定します。
手順②:解析とキャリブレーション
画面上の 「① 解析→キャリブ」 ボタンを押します。
解析が終わると動画内の顔を検出し、新しいウィンドウが開きます。ここで「口の位置」を調整します。
マウスの左クリックして動かす: 口パーツの位置移動
マウスの右クリックして左右に動かす: 回転
キーボードの「r」キー: リセット(初期の位置に戻す)
キーボードのプラス「+」とマイナス「-」: 拡大・縮小
Spaceキー: 確定して保存(調整が終わったら必ず押してください!)
ポイント: 元動画の口の上にぴったりと重なるように調整してみてね!
手順③:口消し動画の生成
「② 口消し動画生成」 ボタンを押します。
ここで動画の全フレームから「元の口」だけを自然に消去し、口なしのベース動画を作成します。時間が掛かるので処理が終わるまで待ちましょう。
手順④:ライブ実行
「オーディオ入力デバイス」を環境に合わせたものに設定して「③ ライブ実行」 ボタンを押します。マイクを設定した方は喋ってみてください。動画のキャラクターがあなたの声に合わせて口パクを始めます。
これで瞳はウルウル&髪はサラサラと揺れた動画に口元だけがリアルタイムに動くね!
重要:デフォルト設定では口元が上手く合わない場合の調整方法
口元がブレる場合は「スムージング」を「高速(6.0)」に変更して試す。
口まわりに黒いニジミが出る場合「影なじませ」チェックを外してオフに。
口が消えずに出ている場合はpadの値をデフォルト「2.1」から大きくしてみて下さい。まず「2.3」とか。それでも消えない場合は「口消し強さ」をデフォルト「0.6」から少しずつ大きくして下さい。
※パラメータを変えたら再度「① 解析→キャリブ」から順を追ってやりなおしてください!
3. その他の機能(マニア向け)
感情認識による口形状の自動変化
声のトーンから「喜び」「怒り」「悲しみ」などを自動判定し口の形を自動で切り替える機能を搭載しています。
これを使うためには感情別の口素材を用意する必要があります。
リポジトリ内の「mouth_dir」というフォルダ内の構成を参考にしてください。キャラクター名のフォルダ内に感情フォルダを作り、そのフォルダに open.png, closed.png, half.png, e.png, u.png の5ファイルを配置。
このキャラクター名のフォルダを「mouthフォルダを選択」時に選びます。
MotionPNGTuber/
└── mouth_dir/ # 感情別口スプライト
└── Tomari/
├── Default/
├── Happy/
├── Angry/
├── Sad/
└── Excited/正直、この機能は手作業で口部分の切り抜きと位置合わせをしないと良い感じに機能しないので・・・コダワリ職人の方のみ試して頂きたい機能です。
おまけ:動画素材の準備方法
ここで、私なりの「ループ動画」を用意する方法を記載しておきます。
以下のデモを作った際の手順となります。
まず画像を用意。今回は「Nano Banana Pro」を使って出力しました。以下の画像が出力したものになります。
次に、口元の動いた画像素材が欲しいのでGrokのImagineで動画にして喋らせます。以下のような感じでプロンプトも適当な感じです。
良い感じのものが出来たら、右上あたりにある「Upscale video」をクリックして高解像度にしてからダウンロード。そして動画から使いたい画像を2枚ほど画像としてピックアップします(私は動画編集ソフトのFilmoraのスナップショット機能で保存しました)。
今回は以下のようなフレームを選びました。目を瞑っていたり口元や髪の毛が少し違うものを選ぶと良いと思います。
この2枚からAI動画生成のViduを使ってループ動画を作っていきます。
ちなみに私は月10ドルのプランに入ってます(この部分は課金は必要ね)。
「画像から動画」と言う項目から、1フレーム目に先ほどピックした「目を閉じている」画像、2フレーム目に「開けている」画像、3フレーム目は1フレーム目と同じ画像。各フレームの間隔は3秒にしました。これでスタートフレームとエンドフレームを同じにしているのでループ動画になります。
プロンプトは無しのものと「VTuberとして配信をしている」と言う指示を入れたもので2回ほど回しましたが、プロンプト無しが良かったのでダウンロードして保存しました。
あとはこの保存したループ動画を使い、この記事の「口元のPNG素材の準備」の項目から進めて行けば、動くPNGTuberを作れるはずです。
今回作ったもののように、従来のPNGTuberでは少し難しかった表現が出来るのではないでしょうか?
ちなみにリップシンクはリアルタイムなのでもちろんマイク入力でもパクパクと動きます。AITuber開発者さんも、VTuberさんもすぐにアバターを用意できると言う事です。
ループ動画の用意だけでアバターが作れる!アバター革命じゃ!
その時の思い付きとノリで作ったプログラムですが、何か面白い事に活用してもらえたら嬉しい限りです。
本日もお読みいただきありがとうございました~!
(「動くPNGTuber作ってみたー」とか、「プログラム改造してみたー」とか教えてもらえるととても喜びます!)
こちらの記事は今回のプログラムを作るまでのお話。
こちらは口の位置が固定された試作段階のお話。


コメント