2023/09/17

face_recognition インストールと利用

 face_recognition

2023/09/17
2024/09/23 (WSL)


CUIで顔の検出とか顔の認識してくれる便利な奴.
顔認識なんてそのうち何にでも標準で載るんだろうけれど,自分で利用しようとするとちょっとまだ敷居が高い.
そんな微妙な面倒さを解消するためのメモなのさ.
Windows (Windows11) PCユーザを想定してます.
ちなみにちゃんと使えば誰の顔かまで教えてくれるようにできるのだが,そちらは興味ないので説明しない.

Google Colabでのインストール

一番手っ取り早く体験できるのは Google Colaboratory での導入.
すごーく簡単だが,1つだけ条件がある.
GPU付のランタイムを利用すること(GPUでもTPUでもいいがCPUだけでは動かない).

インストールは僅か1行でOK(2023/09/15現在).
code cellで下記を書いて実行したら準備完了.

!pip3 install face_recognition

あとはpythonで使うなら

import face_recognition

でOKだし,bashから使うなら

%%bash
face_detection --help

でOK.
とはいえ,GPU付ランタイムなので,長時間利用すると制限がついたりする.
お金があるなら課金で解決.

WSLでのインストール

2台のWindows PCでやってみてどっちでも動いたのでこの手順で大丈夫だろう.
ちなみに片方は Ubuntu 20.04.6 LTS,もう片方は Ubuntu 22.04.3 LTS.
(Ubuntuなら cat /etc/os-releaseでバージョン見れるよ!)
参考にしたのはこちらの資料で,それをさらにダイエットした.)

2024/09/23 Windows11/powershell/wslで追記メモ
wsl --install -d Ubuntu (実際にはUbuntu-22.04.5 LTS) なら下記の通りでOK.
wsl --install -d Ubuntu-24.04 だとうまくいかないので注意.

実測でGoogle Colabとほぼ同じ速さっぽい(face_detection利用時).
これGPU(CUDA)使ってるのかな.みりゃわかるはずだが見るの忘れてた.

Powershell好きなのでPowershellから.
あるPCだと:
PS C:\Users\tubep> wsl -l -v
  NAME      STATE           VERSION
* Ubuntu    Running         2
別のPCだと:
PS C:\Users\tubep> wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-22.04    Running         1

このまま(一般ユーザで構わないので) wsl を起動.
まずはUbuntuの状態を最新にもってく.

sudo apt -y update
sudo apt -yV upgrade

それから必要なツール群をインストール.
なんかホントに全部要るのか?という気もするが,この程度なら全部入れてもいいか.

sudo apt -y install git cmake cmake-curses-gui cmake-gui curl bzip2
sudo apt -y install build-essential gcc g++ make libtool texinfo
sudo apt -y install dpkg-dev pkg-config

念のために再度 update .(普通ここではなんにも起きないんだけれど心配症なの.)

sudo apt -y update

このあと,あちこちの資料では頑張ってdlibをいろんな作業を苦労して導入しろ,みたいなこと書いてあるけど,2023/09/15現在ではpip3が賢いので実は簡単に済む.
ということで先に pip3 召喚.

sudo apt install python3-pip

導入したばかりのpip3を使って face_recognition 召喚.
pip3が賢いので,必要なdlib周りを依存解析して自動で連れて来てくれる.

sudo pip3 install face_recognition

python3モジュール入れただけはずなのに,face_detectionとface_recongitionもインストールされるのはご愛敬.(中身はただのpython3スクリプトだからねぇ)

face_detection --help

Face_detectionの矩形指定が惨い

三人写ってるような画像(sample768x768.png)を与えると,
sample768x768.png
















face_detection sample768x768.png

出力は次のようになる.

sample768x768.png,162,632,286,507
sample768x768.png,162,286,286,162
sample768x768.png,135,434,238,330

ファイル名はいいとして,そのあとの矩形情報が, top, right, bottom, left という謎順になっている.
画像左上が原点で,右にX軸(第一要素)正,下にY軸(第二要素)正なところは世間一般と同じ仕様.
python内部の画像配列の構造をそのまま使ったのでこうなったのだろう.
だけど,ImageMagickさんとかffmpegさんとか辺りの常識とはかけ離れてるので注意.
気持ち的にはせめて left, top, right, bottom だよねぇ.

つまり最後を先頭に持ってくればかろうじで理解可能
さらにleftで昇順にすると掴みやすいかも.

左上(left, top), 右下(right, bottom)
162,162, 286,286,
330,135, 434,238,
507,162, 632,286,

さらに,

width = right - left = 2番 - 4番
height = bottom - top = 3版 - 1番

という計算をやってやっと,よくある -geometry 表記の (width)x(height)+(top)+(left) とかにもっていける.

ほんとなんとかならんのかこれ.

WSL高速化?

CUDAをWSLから叩いているかどうかよくわからないので一応適当にやってみる.
※MMDとかffmpegとかですでにCUDAを利用しているという前提.

sudo apt -y update
sudo apt -y install python3-dev python3-pip python3-setuptools
pip3 install torch torchvision torchaudio

要するにpip3さんにpytorchの召喚のお願いをすると,そりゃCUDA使うよねぇ,ということで nvidia_* とかいうそれっぽいのを大量に呼びつけてきてくれるようだ.
そしてそれらは,おそらくpytorchに限らずすべてのpython3コード実行に反映されるように配置されるのだろう‥すべて勝手な予想だが.

全部終わってからface_detectionを実行したら トータルで 1.28 秒ぐらいになった.半分ぐらいになったような気がする.(タスクマネージャーではcudaの負荷反応がでてないので,気のせいなのか,時間が短すぎるだけなのか‥)

その後,数百枚で連続して顔検出させてもCUDAグラフが反応しないので,CPUだけでやってるのかも.













 













2021/09/03

ニコニコ動画の投稿数制限解除

 2021/08/13ぐらいから、ニコニコ動画で長らく続いていた一般アカウントに対する投稿数制限ルールが変更されました。

  • Level 7までは動画50本まで。
  • Level 8-12は動画70本まで。
  • Level13-17は動画90本まで。
  • Level18以上なら本数無制限。

2021/09/03時点でのうp主のアカウント状況。

  • tubep / 33 (795/4600) ... 142本
  • tubep101 / 26 (2200/3000) ... 174本
  • tubep102 / 15 (500/900) ... 50本
  • tubep103 / 13 (650/700) ... 50本
  • tubep104 / 16 (545/1000) ... 50本
  • tubep105 / 15 (95/900) ... 50本
  • tubep106 / 8 (15/300) ... 11本
ということで、初代tubepと二代目tubep101は無制限です。
1つにまとまってるほうが管理は簡単なので、どうしようかなぁと。
tubepに戻るかなぁ。でもこのルールもまた将来変更になるかもしれないしなぁ。
特に初期の投稿はFullHDとかになってないので、本当なら投稿無制限になったことだし、投稿し直したいところですがさすがにそれをするだけの元気はない。

気にしたこと全然なかったのですが、TubeP103時代の動画はプレ垢ユーザに人気ないのでしょうかw謎です。
それにしても、ニコニコ動画だけで500本以上投稿していたんですね。
YouTubeにもiwara.tvにもあるので(もちろん重複はありますが)、我ながらクラクラっと眩暈がします。見るだけで丸々2~3日かかるぐらい。



2021/03/21

Windows batchで一部分的だけ一時的にコメントアウトする方法

 Windows batchで一部分的だけ一時的に
コメントアウトする方法

2021/03/21 TubeP

あ…ありのまま、今、起こった事を話すぜ!ほんとどなたかすっきりした解説をしてください。

Windows batchファイルはうp主的に難易度高いので、試行錯誤を繰り返してます。その時にお世話になったのが、一部分だけ一時的にコメントアウトする方法です。


方法


BATCHファイルの一時的にコメントアウトしたい部分(実行させたくない部分)の前の行として、

(

というカッコ一文字だけの行を追記します。同じくコメントアウトしたい部分の次の行に

)|echo "スクリプト中の ( から ) までを跳ばしました." 

を挿入します。echoの後ろの文字列はなんでも構いません。
あと、挟まれた部分にどこでもいいから1回でも rem 文を入れておきます。

この技法(トリック?)を使うとコメントアウト部分を削除しなくて済むので、特にデバッグ時には便利(某言語でのifdef文の感覚ですね)。
ただし可読性は猛烈に悪いので、デバッグ中など本当に一時的な作業にしかお勧めできませんねぇ。

これについてはにわかには信じがたいと思うので、以下に動作確認用のコードをつけておきます。windows10 Version 1909で検証してます。


【00: 通常のコードブロック利用】

丸カッコで括った範囲はコードブロックと呼ばれるようです。括っただけですから、実行されるのは当然です。

@echo off

echo Commands will be executed.
echo %DATE%
echo %TIME%

rem 
(
  echo Executing the line. >  result-00executed.txt
  echo %TIME%              >> result-00executed.txt
  echo OK, it is good.     >> result-00executed.txt
)
echo End of the %0 .
cmd /k

実行すると、同じフォルダ内にresult-00executed.txtが生成され、echo3行分の出力がされているはずです。

Executing the line. 
14:01:04.37              
OK, it is good. 
 
 


【01: rem文の追加】

対象のコードブロックにrem文を追加します。rem文は単なるメモですから、さきほどと同様、rem文に続くechoは 3行とも実行されるのが当然です。

@echo off

echo Commands will be executed.
echo %DATE%
echo %TIME%

rem 
(
  rem These are the target lines.
  echo Executing the line. >  result-01justrem.txt
  echo %TIME%              >> result-01justrem.txt
  echo It is still good.   >> result-01justrem.txt
)
echo End of the %0 .

cmd /k

実行すると、同じフォルダ内にresult-01justrem.txtが生成され、echo3行分の出力がされているはずです。

Executing the line. 
14:10:14.09              
It is still good.   
 

【02: echo へのパイプ】

対象のコードブロックの後ろにechoを接続します。見かけ上、コードブロックの標準出力をechoに送ることになります。後ろにつないだだけなので、それより前の挙動が変わることはないような気がします。それでも、なぜかコードブロック全体の実行がキャンセルされます。この例では、result-02pipeecho.txtは生成されずに終わります。

@echo off

echo Commands will be CANCELLED.
echo %DATE%
echo %TIME%

rem 
(
  rem These are the target lines.
  echo Executing the line. >  result-02pipeecho.txt
  echo %TIME%              >> result-02pipeecho.txt
  echo This is weird.      >> result-02pipeecho.txt
)|echo This is the trick.

echo End of the %0 .

cmd /k

挿入するrem文はコードブロックの先頭である必要はなく、最後でも途中でも有効です。rem文がなくなると、(当たり前ですが)01と同じ動作に戻って、result-02pipeecho.txtが生成されるようになります。



便利だけどこの謎技法、誰かのお役に立ちますかねぇ。
むしろ大勢の人の混乱を招くかもしれませんねぇ(笑い)。
こんなWindows環境で仕事されてる方が大勢おられるかと思うと、頭下がります。
今回はうp主は趣味の一環でbatch環境を触りましたが、いろいろおなかいっぱいでした。

windows バッチファイルあるある

 windows バッチファイルあるある 

2021/03/21 TubeP

MMD-VR180 HOWTO用にBowlRollで配っているファイルの1つ 325-305-VR180-bat.bat を書くときに学んだwindows batファイルあるあるネタです。うp主はWindowsの人ではないので、結構難儀しました。誰の役に立つのやら。


Tips 誤作動除け


作業時に間違えてbatchファイルをダブルクリックしたり、他のファイルをドロップしたりすると実行が始まって慌てることがあります。うp主は不注意なのでよくやっちゃいます。そういう方は、最初(とか面倒くさい処理が始まる前のところ)に、

echo Starting encoding, wait for 10 sec to start.
timeout /T 10

というのを挿入しておくと10秒待ってくれるので、その間に停止処理できるようになります。


Tips ウィンドウ表示の維持


batファイルを実行すると、通常は全て終わったら実行ウィンドウは片づけられちゃいます。そういうのが寂しい人向け。

cmd /k

を最後に入れておけば、表示が残ります。
上の10秒待ちと組み合わせるとこんな感じ。



Tips 行の接続


1行が長くなると読みくくなるので、折り返したくなりますよね?
そういうときは折り返す行の最後に"^"を置くそうです。
特にffmpegの引数は延々と書くことになるので、これ大事。


Tips 一部区間をまるまる飛ばす


今回の一番の魔法です。

(

というカッコ一文字だけの行と

)|echo "スクリプト中の ( から ) までを跳ばしました." 

という行でバッチファイルの一部を挟むと、その部分の実行をしなくなります。そんな馬鹿な、と思うかもしれません。私もそう思います。
でもね、挟まれた部分にどこでもいいから1回でも rem 文があると本当にスキップするのです。誰かすっきりした解説してください‥

この技法(トリック?)を使うと削除しなくて済むので、特にデバッグ時には便利。

echo文の後ろは自分で適宜書き換えましょう。
例えば、これを使って、VR135生成部分をコメントアウトしたりできます。
ただし可読性が猛烈に悪いので、一時的な作業にしかお勧めできませんねぇ。
これについてはにわかには信じがたいと思うので、別途実例をまとめてみました


Tips 変数


変数のセットにはSET命令、というところは容易に想像つきましたが、変数の参照時には変数名の前「後」に%を付けるというのがなかなか。特に後ろにつけるというのはうp主には新鮮過ぎました。じゃあ%0%じゃないのか、とか突っ込みたくなる。


Tips 変数操作


他のスクリプト言語でもそうですけど、変数に対する条件付代入って気合入りすぎてて謎です。解説する気ありませんが、下記の2行で、「バッチファイル自身のファイル名の先頭7文字」をMOVIENAME変数に代入しています。

set FNAME=%~n0
set MOVIENAME=%FNAME:~0,7%

% (パーセント) - DOS コマンド一覧


Tips 遅延環境変数


今回はカッコ "(" の中で変数代入をしない(ように実は書き直した)ので出てきませんが、遅延環境変数にもヤラレました。わかってしまえばどうということないんだけど、ほかのスクリプト言語からするとあり得ない仕様なのでびっくり。それぐらい古くからあるということなのでしょうかね。

【BAT】IF文やFOR文の括弧内で変更した変数の値を取得する方法
Use parentheses/brackets to group expressions in a Windows batch file.


記述例


以下が実際に MMD-VR180 HOWTO用に書いた 325-305-VR180-bat.bat です。MMD-VR180 HOWTOとして使う際には、実際には更新されている可能性があるので、利用時はこれをコピペするのではなく、BowlRollから最新版をDLしてください。

https://bowlroll.net/file/249559

2021/03/19

大腿ボーンの物理焼き込み対策

 大腿ボーンの物理焼き込み方法

2021/03/19 TubeP

MMD人体モデルの中には、足が独自のボーン構造しているのがあります。滑らかな足の形状を表現するために、物理が仕込まれている模様です。(例えば、かわいいおにぎり道場式モデルの脚などがこれに該当します)

このことが、VR180化のときの物理焼き込みに障害となります。物理を停止(メニューから物理演算演算しない)してしまうと、この独自構造で形を保っていた脚が破綻してしまうのです(泣)。


それで、MMD-VR180 HOWTOを書いたついでにいろいろ試してみると、これまでの対処策(恥ずかしいので秘密にしておきます)は基本間違っていたことに気づきました。

相変わらず正しい方法が見つけられない(そもそも原理的に存在するのかも不明?)のですが、映像化してバレない程度の対処策を今回見つけたのでメモしておきます。

1. 左足ボーンのキーフレームを0フレームから9999フレームまで範囲選択してコピー
2. 左大腿ボーンを選択
3. メニューから別フレームへペーストを実行


左足は骨折解消しているのがわかりますね。このままでは右足が折れたままなので、右足と右大腿についても同じことをします。これで骨折してない感じになるようです。いつもこうなるのかわからないのですが、おおむねいい感じです。

ちなみに、MMDで動画作るようになってそろそろ10年ですが、10年目にして初めて、「別フレームへペースト」コマンドを知りました。こんな便利なのもっと早く誰か教えてよ。今までは外部に持ち出して編集してたです。


参考


・さぼてんP様の第6期MMD初心者講座 勝手に出席ノート
・今回の対処で作れるようになったVR180動画(近日登場予定)
・MMD-VR180 HOWTO (bit.ly作りました) http://bit.ly/MMD-VR180-HOWTO


後記


これまでこういうブログとか書いてこなかったのですが、先人の知恵に感謝すべく、自分でも多少書いていくことにしました。でもなんかすぐ飽きそうな気もします。


場合によっては、単純に大腿ボーン(物理)の焼き込みを全部削除するだけでも解決できる場合もあるようです。再生するときは物理をさせないこと。こちらのほうが対処方法としては簡単ですね。 2022/03/21追記

2021/03/15

Windows10のDLNAサーバのフォルダ情報強制更新


DLNAサーバのフォルダ情報を強制更新する方法

2021/03/15 TubeP

うp主は Oculus Quest2(OQ2) でダウンロードしたVR180動画を見るときにDeoVR Video Player (DeoVR)を使っています。


DeoVRはDLNAサーバ接続機能を有していて、無線LAN越しにWindows10のPC(PC)内にあるVR180動画を視聴することができて大変便利です。

でも、DLNAサーバ接続をしている状態で、PCのほうのWindows Media Player(WMP)の監視下にあるフォルダに新しくファイルを置いても、OQ2のDeoVRのほうで表示がでてきません。放っておくと、もちろんいつかはなんかの拍子に出てくるのですが、こちとら今置いたのを今見たいのです。

それで、強制更新する方法を求めて、DLNAサーバ再起動したり、OQ2再起動したり、WMPの監視フォルダの設定を一旦外して付け直したりとか、WMPの設定ファイル(Usersの下)を消すとか、それはもう様々なことを挑戦してみたのですが、なかなか確実にこうすれば更新してもらえる、という方法(でかつ手軽なの)がつい最近までわかりませんでした。ネットでも探したんですけど、全然出てこない。探し方が悪いのか、DLNAが見捨てられた日陰技術なのか‥

でも、ふふふ、うp主は結局独力で見つけましたよ。100%確実に更新してくれる方法。前提として、Windows10で普通にDLNAサーバが使えてる状況だとします。(DLNAのセットアップの仕方はネットにたくさん情報あるのでそちらをどうぞ。例えばこんな感じ?

【対策】
あるフォルダに新しくファイルを置いたあと、そのフォルダ名を変更する。
(フォルダ名を戻したければ、2秒後ぐらいに元のフォルダ名に戻す)

これだけです。別にフォルダ名を戻す必要はありません。
察するところ、WMPは管理下のコンテンツについて、更新の自動検知をフォルダ名でしか行っていないみたいです。(だからWMPにライブラリの再構築を命令しても新しいファイルの存在を無視したりしてくれる‥)

同じお悩みを抱えてる方の助けになれば幸いですー。


ここからは閑話。

YouTubeVRというアプリがOQ2にあって、たいていのVR180動画はつべ経由で見られる中、なんでわざわざDeoVRでファイル視聴したいかって?紳士同胞諸君ならわかりますよね。

うp主から提供しているおまけ系VR180とかもこれでゆっくり見れるかと思います。
(ちなみに Mirage SoloとかはmicroSDが挿せるのでDNLA使わなくても見れたり)

DLNAはその趣旨からいって、まわりに(同じ無線LANに参加してる人たちには)ダダ洩れするので、紳士系を見るときはくれぐれもご注意ください。周りにばれたらトラウマになるでしょうからね!

2021/03/10

MMD-VR180 HOWTO Chap.5 レンダリング

 MMD-VR180 HOWTO 【目次】


5. レンダリングとエンコーディング


レンダリングではWindows自動化ツール UWSC を用います。
10回MikuMikuDanceを起動することで10本のaviファイルを作成します。
エンコーディングは、レンダリングの最後に、UWSCからwindowsバッチファイルを実行することで実現します。この中で、ffmpegを複数回呼び出し、aviファイルをmp4に統合します。
最後に統合されたmp4にメタタグを書き込んで、VR180用のmp4を完成させます。

5.1. ターゲットpmmファイルの確定


前節で作成した325-304final.pmmをMikuMikuDanceで読み込みます。
カメラ編集モードにします。
・メニューから、物理演算⇒演算しない、になっていることを確認します。
・メニューから、MMEffect⇒エフェクト使用、になっていることを確認します。
・カメラ操作の登録が第0フレームにしかないことを再度確認します。
フレーム操作を第0フレームに合わせます。
・カメラ操作で、「パース」、視野角135°、ボーン追従「VR180視点f16」の「作業用視点」
となっていることを確認します。
・視点で、「追従」、「ボーン」になっていることを確認します。
・アクセサリ操作で、「EquirectangularX」でRzが90°になっていることを確認します。
上図の状態でpmmを保存します。これがターゲットpmmになります。
ここではこれを 325-305-VR180.pmm とします。
最後に、MikuMikuDanceをウィンドウ状態にして閉じてください。(フルスクリーン状態で閉じると、レンダリング開始後もMikuMikuDanceがフルスクリーンで起動して、デスクトップ全体の様子を見るのが難しくなります)
これ以降、ユーザが手動でMikuMikuDanceを起動することはありません。

以降の説明のため、ターゲットpmmファイルは下記のディレクトリに保存されているものとします。(場所さえわかるのならどこでも構いません)
X:\mmd\tubep\325-VR180\325-305-VR180.pmm
X:\mmd\tubep\325-VR180\325-305-VR180.emm

5.2. ワーキングディレクトリの準備


5.2.1. ワーキングディレクトリの作成


空き容量が1TBあるドライブで、ワーキングディレクトリを用意してください。
うp主の例では、CドライブがWindows関係、XドライブがHDDでMikuMikuDance関係、Yドライブが1TBのSSDでワーキングディレクトリ専用にしています。
ここでは、 Y:\tmp-work をワーキングディレクトリとします。
Y:\tmp-work

[memo1] レンダリングとエンコーディングにおいて、325-305の30秒動画の例でおおよそ80GBを使用していました。作業が終われば、必要なmp4だけ残せばよく、他は消して構いません。325-305の例では325-305_LRM-5760-injected.mp4 (100MB)が最終的な生成物になります。必要なディスクサイズは作成する動画の長さと画の細かさに依存しますが、500GBでは足りなくなることが経験上何度かありました。SSDである必要はありませんが、エンコーディングでは大サイズのファイルの読み込みと書き出しを大量に行うため、SSDのほうが処理時間が多少短くなるようです。

[memo2]  解像度を5Kにして5分を超えるような動画だと、1TBでも足りなくなるかもしれませんorz。作業を見守っていてディスクが溢れそうになったら、中間ファイル(特にzzで始まるaviファイル)でもう処理済みのものは途中でも消していって大丈夫です。 


5.2.2. 音楽ファイルの準備


ワーキングディレクトリに、ターゲットpmmで使っている音源wavファイルをコピーし、music.wavという名前にしておきます。これがエンコーディングの最後に音声トラックとして使用されます。
Y:\tmp-work\music.wav

5.2.3. マスクファイルの準備


ワーキングディレクトリに、うp主が配布しているエンコーディング時のブレンディング用マスクファイル一式(pngファイル8個)をコピーして置きます。必要なのはターゲットpmmで設定した表示解像度に対応する2個だけなのですが、この際、全部置いておきましょう。ファイル名は変えないでください。

5.4. UWSCのインストール


Windows操作自動化ツールUWSCをインストールして使えるようにしておきます。
http://www.uwsc.info/ (2021/3/9現在ダウン中)

起動して、以下のようなウィンドウが出せるようになればOKです。


5.5. ffmpegのインストール


ffmpegをインストールして使えるようにしておきます。
https://www.gyan.dev/ffmpeg/builds/ (公式から辿れるWindows版DLリンク)
とっつきにくいサイトですが、DLは2つ目のURLの中に置いてあります。
そのページの FFmpeg Windows Builds の Release というセクションで ffmpeg-release-essentials.zip を選んでDLしてください。

インストーラはなく、単に展開すればすぐ使えます。windowsのコマンドプロンプトで実行できることを確認しておいてください。以下のように実行できるならOKです。


展開先を覚えておく必要があります。ここでは、以下の場所に展開したとします。
X:\ffmpeg\bin\ffmpeg.exe
X:\ffmpeg\bin\ffprobe.exe

5.6. UWSCスクリプトの準備


うp主から提供する Tark-tbp12-bones.uws を用います。
中身はテキストなので、メモ帳等で内容確認することができます。
変更する必要はありません。

5.7. UWSC設定ファイルの準備


うp主から提供する 325-305-VR180-uws.ini をコピーしファイル名を書き換えて準備します。コピー先はどこでもいいのですが、ターゲットの325-305-VR180.pmmと同じところに、先頭の7文字を揃えて置いておくとわかりやすいと思います。例ではターゲットが"325-305"で始まっているので、次のようになるでしょう。
X:\mmd\tubep\325-VR180\325-305-VR180-uws.ini

325-305-VR180-uws.iniはTark様のsample\sample180.iniからの改変です。
中身はテキストなので、メモ帳にドロップすれば編集できます。
以下の部分はターゲットpmmが変わるたびに中身を書き換える必要があります。
POST_PROCESSのファイル名の先頭7文字とAVI_PREFIXの末尾7文字は一致している必要があります。
---------
PMM_FILE    ="X:\mmd\tubep\325-VR180\325-305-VR180.pmm"
POST_PROCESS="X:\mmd\tubep\325-VR180\325-305-VR180-bat.bat"
AVI_PREFIX  ="Y:\tmp-work\325-305"
---------
以下の部分は各自の環境に合わせて書き換える必要があります。 
ここではCODECとして UT codec を利用しています。
MikuMikuDanceを直接操作してaviを書き出すときに指定できるものの中(かつffmpegが出コードできるもの)から選んでください。UT codec導入済みなら変更する必要はないでしょう。
FRAME_RATEは、MikuMikuDanceを直接操作してaviを書き出すときに指定するfpsと同じものです。  通常は60のままでいいでしょう。
---------
MMD="X:\mmd\x64\MikuMikuDance_v932x64\MikuMikuDance.exe"
CODEC="UtVideo YUV420 BT.709 DMO"
FRAME_RATE=60
---------

[memo] エクスプローラの「パスのコピー」ボタンを使うと選択したファイルの絶対パスがコピーバッファに入るので作業が楽です。


[memo] ファイルの後半にある"nop"(no operationの略)行のコメントオンオフを上手に利用すると、もしレンダリングが途中で失敗したときに、成功した部分についてはスキップして失敗した部分のみ再レンダリングさせることができます。

5.8. レンダリング用バッチファイルの準備


うp主から提供する 325-305-VR180-bat.bat をコピーしファイル名を書き換えて準備します。コピー先はどこでもいいのですが、ターゲットの325-305-VR180.pmmと同じところに、先頭の7文字を揃えて置いておくとわかりやすいと思います。例ではターゲットが"325-305"で始まっているので、次のようになるでしょう。
X:\mmd\tubep\325-VR180\325-305-VR180-bat.bat

325-305-VR180-bat.batはTark様のsample\call_ffmpeg_180.batを参考に書き下ろしたものです。
中身はテキストなので、メモ帳にドロップすれば編集できます。
以下の部分はご自身の環境に合わせて書き換えてください。
---------
rem ffmpegとffprobeをインストール先に合わせる
set FFMBIN=X:\ffmpeg\bin\ffmpeg
set FFMPRB=X:\ffmpeg\bin\ffprobe
rem ワーキングフォルダに移動
Y:
cd Y:\tmp-work
---------

内部でファイル名の先頭7文字を自動抽出して映像ファイル名の確定に使っているので、ファイル名の先頭7文字は 5.7.節と5.8.節を通じて一貫するようにしてください。

このバッチファイルの内容は、UWSCで自動処理によるレンダリングが行われたあとの最後で実行されます。
ffmpegとffprobe用いて、エンコーディングを行います。

[memo] 何らかの事情で自動実行されなかった場合は、(レンダリングまで全て正常終了していてファイルが揃った状態ならば)本ファイルをダブルクリックしてエンコーディングのみ実行できます。

5.9. 実行


5.9.1. 実行開始


ここまでで全ての準備が整いました。
いよいよ実行です。
実行を開始すると、2時間から10時間程度はPCが使えなくなります。
途中でポップアップや通知などが出てくると処理が中断してしまう可能性があるので、そうならないようにしておいたほうがいいでしょう。様子がわかるようスクリーンセーバーもオフにしておきましょう。
(手を付けないままぶんぶん回り続けるPCを見ると、なんとなく「俺ってコンピュータ使いだよな」という気分がして微妙に楽しいのはうp主だけかしら‥)

1. UWSCを起動し以下のようなウィンドウを表示させます。
2. 上記5.6.節で用意したTark-tbp12-bones.uwsをドロップします。
3. 設定ファイルを聞いてくるので、自分で書き換えた325-305-VR180-uws.ini をドロップします。
4. UWSCがMikuMikuDanceを呼び出してレンダリング処理を始めるので、そっと見守り続けます。(1時間から6時間ぐらいかかります)
5. UWSCがMikuMikuDanceを10回呼び出した後、最後にバッチファイルを呼び出してエンコーディングを開始するので、終わるまでさらに待ちます。(1時間から4時間ぐらいかかります)この状態になったら、バッチファイル実行ウィンドウに触れない限り、PCのデスクトップ環境を触っても一応大丈夫です。(それでも、慣れないうちは触らないほうがいいと思います)

5.9.2. 実行状況の解説

この節では、生成される動画ファイルをそれぞれ解説します。自動化によって順次生成されてくるので、作業としては何もしません。見ているだけです。

レンダリングパートで、UWSCはMikuMikuDanceを10回呼び出して、aviファイルを10本作製します。作製順は 325-305-VR180-uws.ini に記載されている順です。L0 / R0 / L1 / R1 / L2 / R2 / L3 / R3 / L4 / R4 の順になります。Lが左目、Rが右目に相当します。
aviファイルは中間ファイルなので、画質を保つため、ロスレスなUT codecを用いています。そのため、どのaviファイルもサイズが巨大です。

エンコーディングパートでは、UWSCは 325-305-VR180-bat.bat を起動します。
黒地に文字がいっぱいなコマンドウィンドウが表示されて、中でffmpegを実行させている様子が見えるようになりだしたら、エンコーディングパートに移った証拠です。このコマンドウィンドウに文字を打ち込んだりしないようにしてください。(確か何かキーを打つと中断します。エンターキー打つと再開しますけど)

まず左目分をエンコーディングします。
L1とL2からzzL12-.aviを作成します。
L3とL4からzzL34-.aviを作成します。
zzL12-.aviとzzL34-.aviをブレンディングさせながらzzL1234-.aviを作成します。
L0とzzL1234-.aviをブレンディングさせながら325-305_Lm.aviを作成します。
この4つの作業のうち、前半二つは貼り合わせるだけなので比較的高速なのですが、後半二つはものすごく時間がかかります。(うp主の環境で速度比が1/15に届かないぐらい。つまり4分の動画ならそれぞれ60分かかります)
こうして得た325-305_Lm.aviが左目分の最終形態になります。
同様に右目分もエンコーディングします。
両目分を結合してmp4にします(LR-xxxx.mp4)。サイズが大きいことと、mp4圧縮をするため、この部分の処理も時間がかかります。そのあと、music.wavを合わせて主ターゲットの(LRM-xxxx.mp4)を完成させます。主ターゲットが5Kのときはそこから4K版を作ります。同様に、主ターゲットからiwara.tv用の4K/300MB版も作ります。
完成した様子が下図です。下ではアイコンを拾ってきたのでアスペクト比がおかしい表示になていますが、本当は2:1の横長動画です。
解像度は、ターゲットpmmで指定した値に従います。325-305-VR180.pmmの例では、5K (2880x2880) としていたので、325-305_LRM-5760.mp4が主ターゲット(上図左)です。これが後のYouTube向けになります。
うp主の所有するVRデバイス辺りだと5Kはちょっと再生が大変なので、自動的に4Kも同時に生成するようにしています(上図中央)。また、iwara.tvでは300MBまでというファイルサイズ制限があるので、4Kでさらに300MBというmicro版も生成するようにしています(上図右)。micro版は画質がむごいので、あくまで案内掲示用だと思ってください。

【余談】
なお、同時にVR135も生成しています。mp4ではありますが、使わないのなら消して構いません。
周辺部を統合していないので、周辺部が黒くなっています。ファイルサイズはVR180とVR135でほとんど違いがありません。
ファイルサイズ小さくないわ範囲は狭いわで、いいところがありませんね。ならなんで作ってるのか?ということですが、慣れてくると、
1. レンダリング時にL0とR0の生成が済んだ時点でUWSCを強制終了
2. エンコーディング用バッチファイルを手動実行(ダブルクリックするだけ)
でもVR135だけは生成されます。つまり短時間で速報版が作れます。レンダリングは2本だけになるので、所要時間は1/5になります。エンコーディングも行うのは両目分の統合のみなので、実行時間は1/4程度?で済みます。(速報版と言っても、結構普通に見れます。視聴時に首をあちこち回さないような人ならこれで十分) 
速報版を視聴してみて、期待通りなら、uws.ini内のnopが並んでいるところで、3(=L0)と4(=R0)を(コメントを外して)nop対象にして、UWSC実行を再度行うと、今度はL0とR0に手を付けずにL1からレンダリングが開始されます。
なお、VR135がずっと不要なら、batファイル内のVR135レンダリング部分を削除なりコメントアウトしてもいいかもしれません。

全てのmp4ファイルが無事に生成されているのを確認したら、サイズの大きい中間生成ファイルであるaviファイルは全て削除して構いません。

5.9.3. メタタグの埋め込み


Google VR180 Creator
ここではVR180 Creatorを利用します。
インストールして使えるようにしておいてください。
起動したら、「公開の準備」を選択して、主ターゲット(例では 325-305_LRM-5760.mp4 )をドロップします。

エクスポートすると、すぐにメタタグが埋め込まれた 325-305_KRM-5760-injected.mp4 が生成されます。ファイルサイズはほとんど変わりません。
これをYouTubeに投稿すれば、あとはYouTubeが勝手にVR180にしてくれます。
5KぐらいのVR180動画だと、YouTubeに投稿してからVRで視聴できるようになるまで運が悪いと1時間から半日ぐらいかかるときがあります(今はどうかわかりませんが、昔は公式に「待っててくれ」と書いてありましたw)。うp主はやりませんが、時間指定して封切とかしたい場合は、前の日ぐらいから準備しておいたほうがいいでしょうね。
このメタタグ埋め込みは、VR135でも同じ要領で可能です。

投稿まで辿り着くことができたら、是非ご連絡ください。
うp主、twitterとかSNS一切しないので、このblogの下のコメントか、つべのコメントか、iwaraのプライベートメッセージ辺りで‥。
喜んでお伺いしますw

5.10. 技術解説


Q. AviUtilとか使う方法も考えてよ!
A. 残念ながら対応予定はありません。うp主はAviUtilとかPremiereとか避けて通りたい人なのです。

Q. 延々と説明してた割には、結局先人の知恵の焼き直しじゃん。
A. その通りです。ポイントは技術ではなくて省力化wです。元2D動画のpmmファイルでカメラワークがカメラ中心位置≒注視点になっているようなのをいっぱいもってる人でそれをVR化したい人(=うp主)が手間最小でVR180をたくさん作れるようにしたかったのです。同じ境遇の紳士がどれぐらいいるのかしら。

Q.エンコーディング(でのブレンディング)はなんでこんな順番なの?
A. 5本のAVIファイルが以下のように重なっているので、境界をぼかしたマスク画像を使ってぼかし結合するようにしたのがポイントです。なおかつ、このときに中央のaviができるだけ使われるようにしてあります。これによって、視野角135°までは原理的に美しく、そこから周縁部の22.5°につながるところはブレンディングでそこそこテキトーに仕上がります。少なくとも境界線を見つけることは難しいでしょう。相当に色味が違うaviファイルでも結構ばれなくなります。
右側が12(左右)と34(上下)を結合するときのマスクです。黒いほうが一続きになっていることから、左右に一続きでつながっている34が優先的に採用されます。中央の縦の境界は次の0(中央)が上書きしてくるので、見えなくなります。結局四隅の斜め境界の辺りのみが接合面として残って、かつそれをブレンディングでぼかしてます。
もちろんAviUtilでもできるのでしょうけど、今回の手法の強みは、とにかく手を使っての作業が一切ないことです。特にレンダリングパートは、2回目以降は前回使ったバッチファイルをコピーしてファイル名を先頭7文字変更するだけなのでわずか数秒w

Q. 次はVR360だね!よろしく!
A. うーん、対応しないと思います。ゲームとかじゃないので、カメラワークも自由にできることになったし、わざわざ視聴者に後ろ振り返ってもらうような動画を作る意義はないと思います。やってみたい方はご自分でお願いします。

Q. こんなもん書いてる暇があったらもっと紳士動画作ってよ!
A. もっともなご意見ありがとうございます。うp主的にはこのHOWTOで他の紳士な方々が紳士VR量産してくださるようになれば、とても幸せです。ガチエロでもそうでなくてもいいです。いろいろ見たい。マジで。

Q. 中間ファイル(aviファイル)でかすぎ。なんとかならないの?
A. 実は、ベースになった手法では、中間ファイルを作らないようになっていました。ただ、うp主の環境ではいろいろと作業中断する羽目になることが多く、中間ファイルを作らない方式だと中断したら最初からやり直しになって心が折れそうでした。HDD(特に内蔵なら)でもそれほど遅くなるわけでもないですし、持ってなかったら買っちゃいましょう!(こちらについては需要が多そうなら改訂版考えます)

以上です。コメントや質問等は‥受け付ける保証はしませんが、とりあえずこのブログの(か、つべかニコ動あたりで)コメントにでもつけておいてください。

それでは、佳きMMDライフを。