UWSCで自動化 その2

前回よりももう少ししっかりとした内容になったので、2パターン記載する。
ほぼ操作手順が一定の繰り返しのパターンと、操作分岐が多いパターン。

まずは手順がほぼ決まってるループの場合。

手順が決まっている場合は、上記のように順番にマウス操作させる。
無限ループする場合はwhile-wend,回数決める場合はfor-nextを追加する。止まりやすい所では、sleep()でインターバルを取ると改善することもある。
なるべく後々まで流用したいので、今回は操作ごとにuwsファイルを分け、使い回しし易い(多分)ようにした。ファイルが多くなってしまったので、フォルダを分けて整理した。

各uwsファイルの一例。画像を認識するまでwhile-wendをループし続ける。認識したら所定位置をクリックする、といった内容。何秒後、何分後とか気にする必要がないので、手順が決まっている場合はこれを並べるだけで十分動作する。
そして、chkimgxのパラメータも追加した。画像ファイル後のパラメータは[ID,x1,y1,x2,y2,番号,判定閾値,着目する色]。
IDは思うように設定できなかったので、使っていない。
次の4つは検索範囲。設定すると認識精度も捜査時間も向上する。
判定閾値は1-10%くらいの範囲で設定するのがよさそう。通常は5%で問題ない。
パラメータ設定が必要なのかわからないが、chkimgxは文字の画像認識が思い通りに動作しないことが多かった。ランプが5個並んでいて、1個点灯、2個点灯・・・の違いを認識させる場合は、1%設定のほうがうまく認識した。
クリック後のmmvのカーソル移動はこの後の操作でマウスカーソルが邪魔にならないように、検索範囲外に移動させている。

次は分岐が多い場合。

上記は載せきらなかったが、以下elseif文が10くらい続く。操作手順が複雑になる場合、このようにifb,elseifですべての操作に対応させるのがいいと思う。ブラウザゲームなので、複雑といってもそれほど操作種類は多くないから。
1つ目のWhile trueは無限ループ用。回数制限するならfor-nextに変更
2つ目のwhile trueはif文のいずれかを実行するまでループさせる。if文は上から順番に実行するため、優先順位の高い操作を上に書いていくことが大切。各操作が終わったら、一旦breakでループから抜けることが分かりやすくていいと思う。
各操作の後にmmvで微妙にカーソル位置をずらしているのは、どこで止まったか分かりやすくするため。デバックで便利しただけなので無くてもいい。
if文だけでは処理できない場合は上記のようなcall文で対応すれば、大抵の操作は出来る気がする。
chkimgxを毎回starup/shutdownで処理しているが、試行錯誤した結果なので、一番最初にstartup,一番最後にshutdownを入力するだけでいいのかもしれない。

100周くらいは止まらないようにUWSCで出来ないか、と試行錯誤してたら、UWSCでマクロ作るほうがゲームするより面白くなってしまった。まだまだ改善の余地はあるし、ゲーム側のバグだったり、予想外のことで止まってしまうことはある。が、順調なら一晩くらいは止まらなくなったので、ちょっと満足。

UWSCで自動化

ブラウザゲームをやっていると、どうしても周回が必要になることが多く、面倒くさいのでUWSCを使って簡易的ではあるけど自動化してみた。プログラミングは素人なので忘れないように書いておく。

やりたいことは、ゲームのクエストの周回。完全自動化はハードルが高いので、まずは行動力が枯れるまでの数十周を自動化させること。

用意するものはUWSC本体、あいまい画像認識につかうChkimgx。
更新の止まっているUWSCを使う理由の一つは、このChkimgxを使いたいから。
UWSCフォルダにChkimgx.dll、Chkimgx.uws、Nekoaddon.dllの3つのファイルをコピー。
クリックしたい画像もUWSCフォルダにコピー。
準備が終わったらuwsファイル作成。

各パラメータはあまり理解していないので適当。Chkimgxで画像検索し、見つかったらクリック。そしてbreakで次の処理へ、という流れ。初心者なので、breakコマンドにたどり着くまで時間かかった。

基本的にクリックだけでも周回できる場合も多いが、戦闘時間にばらつきが出て途中で止まる。でも時間マージンとると、時間がかかりすぎたりする、といった場合に画像認識を使うのがいいと思う。画像認識をもっと増やせば周回時間が短くなるかもしれないが、反面、アイコン画像なんて、イベントやメンテナンス等ですぐ変わるものなので、単純に変更するのが面倒くさい。

気が向けば、なんとなく出来そうなので、回復アイテムで行動力を回復しクエスト無限周回をやってみようと思う。

TSをMP4にエンコード その3 設定

主にAviutlの設定まとめ。PCで見るための設定。

・クリッピング&リサイズの設定
アナログ放送時代の再放送などで両端に余白ができる場合に使用する
1440×1080で録画された場合、
左180 右180
に設定して余白部分をカットできる

・透過性ロゴ
ロゴ解析でロゴを取り込むことで、ロゴを消せる
ロゴが出たり消えたりする場合もフェードを使うと綺麗に消せるが、
労力に見合わないので自分はフェード機能は使わない

・サイズの変更
システムの設定の「リサイズ設定の解像度リスト」に登録しておくと
リスト表示されるので楽
ts1
各解像度ごとの設定。緑の塗りつぶしがお勧め。
解像度は色々試してみたが、ファイルサイズと汎用性のバランスがいい
1280×720に落ち着いた。

・フレームレートの変更
なし
・インターレースの解除
自動
変更すると色々面倒くさい。上級者以外は変更しないほうがいい

・x264設定
現在の設定
エンコード時間やファイルサイズは、マルチパスと品質の設定で大きく変わる。
最初はプロファイルから好みの設定を選んで、状況に応じてマルチパスと品質を
変えてみるといいと思う。
set1

基本的にはデフォルトであるプロファイルの高画質設定から変更していない
最初、自動マルチパス(パス数2)に設定していたが、やたら時間がかかりすぎるので
やめてシングルパス(可変レート)にした。可変なので動きの激しい時は高レートに、
動きの無いときは低レートに自動的に変わる。品質20に設定にしているが、
21や22くらいのほうがいいかもしれない。
音声を320kbpsにしているが、128kbpsでいいと思う

set2
最初は変更しないでいい

set3
最初は変更しないでいい

結局設定は環境、用途によって人それぞれ。
最初はデフォルトの設定にして、
少しずつ自分にあった設定に変更していくのが現実的だと思う。

TSをMP4にエンコード その2 手順

それなりに色々試して、それなりに自分なりのやり方が決まったので、
忘れないように纏める

手順は以下の2通りで、ほぼ問題なくエンコードできた。

手順A・・通常はこちらで問題ない
使用アプリ BonTsDemux、ToWave、aviutl
1.BonTsDemuxでTSをW2Vファイルとaacファイルに分離
2.ToWaveでaacをDelay修正wavに変換
3.aviutlでw2vとwavを読み込んで、編集してエンコード

それぞれのアプリの詳細な手順は割愛

 

手順B・・5.1chでエンコードする場合、手順1でうまくいかない場合
使用アプリ BonTsDemux、aviutl、TsSplitter、Yamb、Avidemux
(1.TsSplliterで5.1ch部分を分割)
2.BonTsDemuxでm2vとaacに分離
3.aviutlでm2vのみをMP4にエンコード
(解像度などの変更のみ。CMカットのような動画時間が変わる編集はしない)
4.YambでMP4とaacを合成
5.Avidemuxで音声Delay補正とCMカットなどの編集をして保存

5.1ch対応する場合はBonTsDemuxで分離時に音声出力方式を[強制5.1ch]を選択
それ以外はStereo
5.1ch放送だが5.1ch必要ない場合は、Stereo選択して手順Aでもいい
前番組、後番組が5.1ch放送で少しでも録画されていると、
ToWaveの変換で失敗することがあるので、
TsSplitterを使って音声5.1ch部分を分割する

Tssplliterのパラメータは
-SEPAC(音声チャンネル切替で分割、個々に出力)
を使い、音声5.1ch部分だけを抜き出す
CMまたぎなどで2つ3つに分割される場合でもTssplliterで合成しない
合成すると、合成した後半部分のDelay補正ができなくなるので、
個別に上記5までのMP4エンコードとDelay補正を行い、
個別に作成したMP4を最後にaviutlで合成する

AvidemuxのDelay補正はBonTsdemuxで分離したaacファイル名のdelay値を
そのまま入力すればよい

 

・その他
BonTsdemuxで分離したあとのaacファイル名のDelay値が8桁くらいになることがある
その場合にMurdocCutでTSの先頭部分を少しカットすると修正できる

手順Aでうまくいかない場合は大抵Towaveのwav変換で失敗しているので、
動画のみをMP4にしてからaacと合成する手順Bにすると回避できる

ファイル名にコンマなどの記号があるとToWaveの変換で失敗することがある

TSのDropが多くて音ズレが修正できないときはあきらめる

時間かかるし、多少は劣化もするのでエンコードは1回のみが妥当

 

手順Aは結構あちらこちらで紹介されていて、手間があまりかからないが、
音ズレが修正できないことも多々ある

手順Bは5.1chにも利用できるし、大抵の音ズレの問題は回避できると思う
ただ、手順Aより手間がかかるのと、AvidemuxはGOP単位の編集になるので、
aviutlよりは大雑把な編集になる

TSをMP4にエンコード その1 アプリを用意

PT3導入から2ヶ月ほどたち、ある程度のエンコード方法も固まってきたので忘れないように纏めてみる。
まずは使用アプリから。
すべてフリーソフトで、編集作業もすべて手動。基本的にmp4エンコードはaviutlで行う。

・aviult v1.00 ・・・MP4にエンコードする
MPEG-2 VIDEO VFAPI Plug-In v0.78 ・・・m2vファイルをaviutlに読み込みさせるために必要
x264guiEx v2.21 ・・・MP4エンコードに必要
透過性ロゴ フィルタv0.13 ・・・番組ロゴ消去する
L-SMASH Works r717 ・・・いろいろなファイルをaviutlに対応させる

・BonTsDemux 10k7fix05
tsファイルを動画(m2v)と音声(aac)に分離するソフト。現状、このソフトだけで十分

・ToWave v1.03
・VLC v2.1.5
BonTsDemuxで分離したaacのDelay補正を行う

・Yamb v2.1.0.0(MP4BOX v0.6.0.6)
MP4とaacを結合する

・Avidemux v2.6
MP4のIフレーム単位で編集や音Delay補正を行う

・Murdoc Cutter v1.9g1
GOP単位でtsの簡単な編集をする

・TsSplitter v1.26
tsの分割をする

Aviutlプラグインやコーデックの記載漏れや古いVersion使っていたりするかも。
通常のエンコードであれば、aviutl、BonTsDemux、Towaveのみ使用。
ただ、5.1ch対応やその他イレギュラーな場合に備えて、Yamb、Avidemux、MurdocCut、TsSplitterも用意しておく。

前回記載したDG Indexは
・m2vをAviutlに直接読み込めるのでd2vにする必要は無い(BonTsDemuxだけで十分事足りる)
・DG IndexはAACで分離できないときがある
・d2vをAviutlに読み込ませるときにフレーム高を1080から1088に変更する必要があるため、余計なリサイズが必要になり面倒くさい
といった理由で利用をやめた。

関係ないが、先月エンコード時間削減のため、CPUをi5からi7-4790Kに換えたところ、体感で4割くらい時間が削減された。
HTの利用価値はこれだったかと、初めて実感。