[BMS] LR2でmp4(1080p,16:9)みたいなBGAでも、カクつかせず、アスペクト比を崩さずプレイする方法(単にデコーダー入れるだけではない) [12年前のCPUでも戦える]
私が使っているBMS用PCのスペック
CPU: (2012) Intel Xeon CPU E3-1270 V2 @ 3.50GHz
RAM: 20.0 GB (BeMusicSeeker対策テキトーに増設)
OS: Windows 10 Pro
(11にアプデしたいけどTPM 2.0とか以外でもハード面で無理そう?)GPU: (2016) GeForce GTX 1070 8GB
SSD: SAMSUNG SSD MZ-QLW1T90 PM963 1.92TB PCI-Express Gen 3.0 x4
(BMSデータは全部これに入れてる)モニタ: BenQ Zowie XL2546S 24.5インチ 240Hz
モニタとかは240hz体験したかったから奮発した。しかし、残りは寄せ集めの化石のようなパーツ。CPUに至っては12年落ち。グラボでも8年落ちである。この状態で、フルHDのBGA再生するとノーツかくかくになるとか感じてました(本記事の行程で解決済み)。
本記事はLR2で軽量にBGAを再生する方法についての説明ですが、思うにそれなりのスペックのPCを用意してbeatorajaを使えばすべて解決しそうな気もします。LR2のプレイスキンを弄りすぎたせいで、beatorajaへの移行が面倒に感じていますが、62進数BMSやbmsonを快適にプレイできるように整えていきたいところです。(個人的にはbmsonの方が流行ってほしい)
はじめに
単にmp4のみが同梱されているBMSのBGAをLR2で表示するだけなら、よく言われているのが以下のような方法です。
しかし、これだけだと、以下2点の問題点が残ります。
LR2デフォスキンではBGA描画表域は、デカく表示設定でも392x392
通常サイズで表示する設定だと256x256しかありません。世の中には、1920x1080とかのBGAも存在します。高解像度の動画をデコード後の生データ(RGB24)として受け取り、LR2側では高解像度のデータをリサイズして表示しているわけです。すると、ノーツが謎にカクつく(ゲーム全体としては800fpsは出ている)怪奇現象が起こります。LR2は基本的にBGA描画領域は1:1のスキンが多いです。よく分からない比率のスキンもあるでしょう。ここに16:9の動画が来ると、再生はできますがアスペクト比が狂ってしまいます。縦に引き伸ばされます。
BGAの描画領域が16:9のスキンがあったとしても、今度は1:1のBGAが横に引き伸ばされてしまうし、描画領域1:1を前提として上下に黒帯を入れたBGAも引き伸ばされてしまいます。シネマスコープのようなBGAもあると思います。
今回目指す解決方法はどのようなものか?
BGAのデコード時に、BGA描画領域に合わせてアスペクト比を崩さずにリサイズするようにします。BGA描画領域に合わないアスペクト比の動画には自動的に黒帯を入れるようにします。
各種アプリDL、解決策(LAV Filters+ffdshow)のセット、設定用(Codec Tweak Tool)
はじめに各アプリについて軽く説明
※文章だけだと良く分からない可能性が高いので読み飛ばしてアプリの導入を進めた方がよさそうです。
LAV Filters
・ハードウェアアクセラレーションの効くデコードをやってもらいます。
・ffdshowが更新停止した2014頃にはなかった規格のデコードを担当してもらいます。
・そしてRGB32のみで出力してもらいます。
LR2のビデオレンダラーはRGB32を受け付けないっぽいので、RGB24などの対応した形式への変換を求めます。そこで、ffdshowにフィルターチェーンされて、LAV Filtersとの連携が成り立つのです。(DirectShowについてはよくわかりませんがたぶんこんな感じで動いてます)
ffdshow
LAV Filterで処理済みのRGB32ビデオや、LAV Filterでハードウェアアクセラレーションが使えないレガシーなビデオのデコードを担当させます。(LAV FilterのCPUデコードの方がよさそうなら設定を変えても良いかも)
そして、出力はLR2で扱えるRGB24とします。
LAV Filters ダウンロード
最新版"LAVFilters-0.79.2-Installer.exe"みたいなやつDLしてください。
アクティブに開発されているアプリです。
ffdshow ダウンロード
ffdshowは2014年に開発が停止しています。
おそらく以下がunofficial味がありますが最新のものです。
ffdshow_rev4533_20140929_clsid.exe
Codec Tweak Tool ダウンロード
ちょっと前は"Win7DSFilterTweaker"が使われていたけど、"Codec Tweak Tool"は"Win7DSFilterTweaker"を包含した新ツールなのでこちらを使おう。執筆時点で"CodecTweakTool_673.exe"
GraphStudioNext
Directshowフィルタがどんなふうにつながってビデオが再生できるが確認できる開発者向けツールの強化版。基本的にはこのアプリに動画をドロップした時同様にLR2でも再生されるので、LR2での確認前にこちらで試してみても良いと思う。LR2用の確認目的なら32bit版(無印の方)を選ぶこと!
本記事ではgraphstudionext-0.7.3.2.exe。
ダウンロードしたアプリのインストール&設定
LAVFilters インストール
基本的には「Next >」連打だが、要所の設定は以下のスクショをご参考。
DLした最新のexeを実行、今回LR2目的なので全部32bit(x86)だけでよし。Audioは本来要らないが、GraphStudioNextで見たときに音付きのBGAとかあるのでその確認用。一番下はよく分からないが、BGAで3D映像は前衛的すぎるのでとりあえず不要でしょう。
[超重要] LAV video decoder
ハードウェアアクセラレーションの所は、新しい"D3D11"が無難でしょう
グラボが無かったらnoneを選んでください。
左下"Output Formats"は※※※RGB32だけを選んでください※※※。
これはLR2が対応していない無圧縮動画ストリームです。
よって、次はRGB32を受け入れるffdshowのインストールを始めます。
Formatsのタブではrv12にチェックを入れた方が良いかもしれない。ffdshowだとうまくデコードできなかった。参考文献のサイトの「動画BGA再生確認用bms詰め合わせ 」でしか見たことのない形式ですが…
ffdshow インストール
開発が停止していますが今回は「ffdshow_rev4533_20140929_clsid.exe」をインストールしていきます。基本的にはOK、次へ連打でOK。一応の確認ですが、わざわざ64bit版を探し出して入れたりしたら駄目ですよ。
今回はvideo decoderだけでOK
こんなん出てきたけど後で設定変えられるのでそのまま「次(N)>」へ
Codec Tweak Toolを起動し各種設定
Microsoft謹製デコーダーを無効化する
まず、MS Codec Tweaksを開く
かなり雑ですがMicrosoft謹製のデコーダーは全て無効にしましょう(64-bit)まで巻き添えなのは無意味かもしれない。チェック後「Apply」を忘れずに
デコードフィルターの優先度を設定する
実はこの工程はやらなくても大丈夫だったりするのですが、念のためやっておきましょう。
まず以下のボタンを押す。
つぎに、以下の画像のように基本的には"USE MERIT"を選んでいってください。選択肢がMicrosoftかLAVだけだったらLAVを選んでおけば良いんじゃないかと思います。最後にApplyを忘れないでください。
DirectShow Filtersボタン
実はこのボタンは
ffdshow video decoder (x86)の設定がここから開ける、LAVも設定を変えたくなったらここから変えられる。
ffdshowの設定(LAVではなくこちらで処理するデコーダー選ぶ)
まず、安定な形式すべてをlibavcodecに設定する
サポートされた形式をすべてXvidにする(やんなくてもいいかも)
以下のLAV Filtersのハードウェアアクセラレーションが使える形式はffdshowで無効にして、LAV video decoderで扱うと良いでしょう。
H.264/AVC(無効)
HEVC(ffdshowには項目がない)
VC-1(無効)
MPEG2(無効)
VP9(ffdshowには項目がない)
AV1(ffdshowには項目がない)
ついでに「Real Video 1,2」もなぜか動かないので無効にすると良いでしょう。上述したことですが、LAVの方では再生できます。
[超重要] 最下部のRaw videoを「全サポート形式」にする
これでLAVFiltersからのRGB32出力がffdshowへ渡されるようになります。
[任意] ffdshow デコーダーのオプション
スレッド数調整するといいかも?
私の場合は、以下のようなLR2起動用のPowerShellスクリプトを使ってます。アフィニティマスクという仕組みを使って、LR2body.exeでは後ろ4つのスレッドしか使わないようにしています。ついでに打鍵カウンターとか一緒に起動するようなものはスクリプトにまとめています。
$lr2 = New-Object System.Diagnostics.Process
$lr2.StartInfo.FileName = "D:\LR2beta3\LR2body.exe"
$lr2.Start()
$lr2.ProcessorAffinity = 0xF0
まあ、気休めだと思いますし、むしろ悪影響があるかもしれませんが、こういう方法もあるという一例です。
[重要] ffdshow「リサイズ、アスペクト」を利用して、スキンに最適なサイズにリサイズ
いよいよ、ffdshowのリサイズ、アスペクトフィルターを用いて、スキンのBGA描画領域にアスペクト比を崩さずにリサイズする設定をします。
まずはスキンのBGA描画領域サイズを知らなくてはなりません。
お使いのプレイスキンの.csvを調べてみてください。
#DST_BGAのあるw,hの値を拾ってくれば良いです。(w=幅, h=高さ)
例としてデフォスキンだと以下のような感じで定義されていました。("\LR2beta3\LR2files\Theme\LR2\Play\7keys\7_LL0.csv")
//でかい,,,,,,,,,,,,,,,,,,,,,
//SRC定義,(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),nobase,nolayer,nopoor,,,,,,,,
#SRC_BGA,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,
//DST定義,(NULL),time,x,y,w,h,acc,a,r,g,b,blend,filter,angle,center,loop,timer,op1,op2,op3,
#DST_BGA,0,0,230,0,392,392,0,255,255,255,255,0,1,0,0,0,0,31,0,0,
,,,,,,,,,,,,,,,,,,,,,
//通常,,,,,,,,,,,,,,,,,,,,,
//SRC定義,(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),nobase,nolayer,nopoor,,,,,,,,
#SRC_BGA,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,,,,
//DST定義,(NULL),time,x,y,w,h,acc,a,r,g,b,blend,filter,angle,center,loop,timer,op1,op2,op3,
#DST_BGA,0,0,291,56,256,256,0,255,255,255,255,0,0,0,0,0,0,30,0,0,
サイズは分かりましたか?
以下の画像のように、赤枠で示す「サイズ:」の所に、先ほど調べた値を入力してください。
また、「常にリサイズする」を選択してください。
そして、「オリジナルのアスペクト比率を維持する」を選択してください。
[任意] オンスクリーンディスプレイの設定
オンスクリーンディスプレイもしばらく入れておくと、本当にffdshowでリサイズされたかどうかが分かりやすい。
[超重要] 出力色空間設定
LR2が対応しているRGB24で出力すること
最後に、設定の適用やOKボタンを押すのを忘れないでください!
サンプルキャプチャ
BGAは1920x1080で、BGA描画表域は正方形ですが、引き伸ばされず16:9で表示されています。上下に黒帯を入れているBGAと似たような表示感ですが、LR2ではこれ以上どうしようもないと思います。
結論
この程度のスペックのPCではフルHDBGAをそのままLR2にぶち込むと240hzモニタなのに、ノーツだけ60fpsみたいなカクツキが発生する。
そもそもスペック以前の問題のような気もするので、BGAをきちんと楽しみたい人はbeatorajaを使ったほうが良いと思う。
カクツキはLAV Filters+ffdshowでスキンのBGA描画領域にリサイズした動画をLR2に入力したことで緩和した。
リサイズしてもまだカクつく場合には、ffdshowでさらに縮小すれば改善すると思います。
参考文献
この記事が気に入ったらサポートをしてみませんか?