BMSのBGAに黒フチを入れないで欲しい話

はじめに

これはBMS制作について Advent Calendar 2017 - Adventarの18日目の記事です。

LNTakeshiと申します。アナコンで発狂BMS七段だったりBeatorajaで僕が欲しいと思った機能を書いたりしています。今回はBGAアスペクト比(縦横比)と黒フチの話です。

 

 

この動画ではBGAを正しく表示出来ていません。

www.youtube.com

これも正しく表示できてません。

www.youtube.com

これらの動画では、BGAアスペクト比が元映像と異なっています。「Angel Dust」は入力画像が1:1でBGA領域が4:3なので横に伸び、「夢/あるいは在りし日の」は入力映像が4:3でBGA領域が1:1なので縦に伸びて表示されています。

スマブラXアスペクト比16:9のディスプレイでゲーム側を4:3にしてプレイすると横に伸びたりするのとだいたい同じ現象です。BGA作者の皆さんは御存知の通り、LR2では必ずこうなるので1:1のアスペクト比BGA領域に表示されることを見込んで16:9の映像に黒フチを挿入して1:1にする・・・という作業は今も行われていると思います。

しかし、beatorajaではこういったアスペクト比の修正は不要です。というより、修正しないで!たのむ!

beatorajaの簡単な紹介

beatorajaの解説は

Beatorajaの設定などのまとめ - ぶろぐ

にいっぱい書きましたので詳しく知りたい方はこちらを御覧ください。

今回書きたいことに関わる内容としては

  • BGA表示領域に合わせて動画(等)の画面比を維持しつつ表示する機能がある
  • LR2スキンが使える

ことです。

このBGA表示のアスペクト比維持機能は僕がbeatorajaに関わり始めてすぐに実装した機能の一つでした。初めてのコンフィグ画面は弄り方が分からずにお願いしてしまいましたが・・・

今までにもINFINITASコンに対応したい人がbeatorajaでINFINITASコンを使えるようにしたり、24鍵モード作りたい人が24鍵モード作ったり、DP全皿オプションを鍵盤に皿側に寄せたい人が全皿オプションのアルゴリズムを変更したりで色々な機能が実装されています。

BGA表示に関するLR2との違い

いろいろな形式のBGABGIを表示させて、その差を比較してみます。スキンは「REMI-S AC ver. 1.46」を使用します。beatorajaではBGA ExpandをKeep Aspect Ratioに設定します。

まずは1024x768(4:3)でREMI-S AC ver. 1.46 CS(BGA領域350x350,1:1)を使用したときの比較です。なお、スクリーンショットを撮影するとLR2では内蔵機能だと必ず640x480の画像になってしまうので、Windows側のスクリーンショット使用します。

 

桜シロガネ妖狐伝説(ANOTHER以下)のBGA(512x512,1:1)を比較します。

LR2の場合

f:id:LNTakeshi:20171206075217p:plain

beatorajaの場合

f:id:LNTakeshi:20171206075259p:plain

どちらの場合でもアスペクト比は崩れずに表示できています。ただし、beatorajaのほうが綺麗に表示できます。

これはLR2では640x480の画面を表示してから1024x768に引き伸ばしているからです。512x512のファイルを読ませてもBGA領域は350x350なので、350x350の画像を引き伸ばしたLR2よりBGA領域が(768/480=)1.6倍の560x560のbeatorajaのほうが綺麗に表示できます。

ちなみに曲名もbeatorajaのほうが綺麗ですが、これと同じ原理なはずです。あとはフィルターのかかり方とか?

 

次にValhallaのBGA(640x360,16:9)を比較します。

LR2

f:id:LNTakeshi:20171206080617p:plain

beatoraja

f:id:LNTakeshi:20171206080631p:plain

beatorajaではアスペクト比16:9で表示されますが、LR2では1:1に引き伸ばされます。ちなみにbeatorajaでもBGA ExpandをFullにするとLR2と同じように表示されます。

 

次に1600x900でREMI-S AC ver. 1.46 AC WIDE(BGA領域350x350,1:1)を使用して比較します。この時画面は横に引き伸ばされて見た目のBGA領域は4:3となります。beatorajaでは875x656のBGA領域です。

 Love & JusticeのBGA(512x384,4:3)を比較します。

LR2

f:id:LNTakeshi:20171206081812p:plain

beatoraja

f:id:LNTakeshi:20171206081826p:plain

これはアスペクト比補正機能実装するまで全く気付かなかったんですが、ラブジャスのBGAは4:3らしいです。BGAが4:3でBGA領域も4:3なのでアスペクト比に関しては問題ないです。勿論、見た目のBGA領域が1:1のLR2では横方向が潰れます。また、BGA領域が不足しているのでbeatorajaのほうがほんのり綺麗に映るはずです。

ちなみに、「夢/あるいは在りし日の」のBGAも4:3なのでこの使い方ではLR2でもきちんと表示できます。但し、それ以外のBGAアスペクト比が次の比較のように全部狂います。

 

最後にHeilenweltのBGA(480x480,1:1)を比較します。

LR2

f:id:LNTakeshi:20171206082756p:plain

beatoraja

f:id:LNTakeshi:20171206082805p:plain

女の子が横に伸びています。このような状態のLR2では9割のBGAが伸びます。映像作ってる皆さんこういうの気になりますよね?僕は気になります(映像は作っていない)

beatorajaでの問題点

BGAに関してはbeatorajaが良い!終わり!でも良いのですが、一つ困ったことがあります。それが下の画像です。(良くない点として使ってごめんなさい!)

f:id:LNTakeshi:20171206083712p:plain

映像の左右のスペースを使って拡大すれば良いのですが、されていません。

原因は、この映像の上下に黒フチが埋め込まれていて1:1のBGAとなっているからです。黒フチも含めて画面いっぱいに拡大されているので、これ以上大きく出来ないのです。

解決方法としては以下の選択肢があります。

  • BGAの拡大率を縦横の長い方ではなく短い方に合わせるようにアルゴリズム変更(BGAが表示されない部分が出てくる)
  • 表示領域1:1のスキンを使う
  • beatorajaで黒フチがあるかどうか判断する(たぶん無理)
  • プレイヤー側で各自手動で変換する(全部するのは大変)
  • BGA作者側で黒フチを挿入しない(たのむ!)(但しLR2でアスペクト比が崩れる可能性がある)

ちなみに、LR2使ってる人の見た目のBGA領域のアスペクト比なんて狂ってる人多いし黒フチ入れなくても良くないですか?が僕の意見です。

beatorajaで読み込める動画フォーマット

LR2では1:1のmpgかwmvというのが定番でした。beatorajaでは次のようになっています。

再生可能な動画フォーマット

0.5.4現在、"mp4", "wmv", "m4v, "webm", "mpg", "mpeg", "m1v", "m2v", "avi"を動画BGAとして検出します。 同じファイル名で異なる拡張子のファイルが複数ある場合、BMSの定義に関わらず上記の順に優先的に検出されます。

これ以外でもffmpegが対応しているものはほぼOKですので、対応希望の形式があればIssueに お願いします。

アスペクト比を維持してBGAを表示させる機能があるので、アスペクト比が1:1以外の動画でも黒フチの挿入は不要です。 解像度は大きすぎると重くなることがあるので1280x720程度の動画を使用して下さい。

なお、音声トラックがあってもデコード時に分離、無視するので問題ありません。

 

楽曲製作者向け資料 · exch-bms2/beatoraja Wiki · GitHub

ちなみにコーデックごとの圧縮率は高性能なものから

(AV1)>>VP9=H.265/HEVC>>>>>MPEG-4 AVC/H.264=WMV9>>>>>>>>>>MPEG-1

となっています。圧縮効率考えると動画をVP9かH.265でエンコードして拡張子をmp4にするのが最も良いです。BGA差分配布が簡単、LR2で再生できない人が多いなどの理由でwmv9を使用するのもアリです。

ちなみにVP9は既にYoutubeなどで使われているコーデックです。Youtubeで動画見るのも厳しいPCでない限り負荷に関しては問題ないでしょう。一方でエンコードは想像を絶する遅さです。

AV1は現在仕様が定まっていない未来のコーデックです。VP9の25%~50%以上高性能だとか。

 

もうちょっと詳しく知りたい人向けの記事(2015年)

aviutl.info

aviutl.info

 

折角なので画質比較もしてみました。入力ファイルはH.264エンコードされた1280x720、5368kbpsのSOLROSを使用します。ffmpegで600kbpsでエンコードした時の1フレームを比較します。

f:id:LNTakeshi:20171214230308p:plain

はてなブログってjpg圧縮とかされるのかよく分からないですが、この比較は参考程度でお願いします。エンコード設定も適当だし。ちなみにMPEG1Videoでは600kbpsではエラーが出てしまったため1600kbpsでエンコードしました。

SOLROSは比較的動きの少ない映像なのでビットレートが低くても割と綺麗にエンコード出来ていると思います。MPEG1以外は。

個人的にはH.265かVP9使って欲しいと思っているのでH.264とH.265をさらに比較してみます。

H.264

f:id:LNTakeshi:20171214231016p:plain

H.265

f:id:LNTakeshi:20171214231037p:plain

ラウラの鱗とかに差がよく現れていると思います。

BGA差分などの配布方法

LR2用のBGAを同梱してbeatoraja用のBGA差分を配布するのが一般的だと僕は思っているので、その手順について簡単に解説します。

LR2用のwmv同梱→beatoraja用のwmv差分を配布

これは単純にbeatoraja用に変換したwmvファイルと同一ファイル名のwmvを配布して上書き適用させればOKです。

LR2用のmpg/wmv同梱→beatoraja用のwmv/mp4/webm差分を配布

beatorajaでは拡張子がmpgで実際のコンテナがmpg以外でも読めるという特徴を利用します。(他の拡張子も同様)

LR2用のmpgを同梱し、それに対してmp4の差分を配布するときはmp4の拡張子をmpgにして配布するのが最も良いと思います。mp4の拡張子を変更せずに配布する場合は、プレイヤーさんに元々あるmpgを削除してもらう必要があります。消し忘れなども考えられるので拡張子を揃えて上書きさせるのが無難だと思います。

 

2/28修正

mp4がmpgなどより優先して読み込まれるようになったため、BGA差分配布ではなく、BMSで.mpgを指定し、次の画像のように配布すればOKです。

f:id:LNTakeshi:20180228053017p:plain

このようにすることでLR2では.mpg、beatorajaではmp4ファイルがロードされます。差分配布も不要になるのでBMS作者、ユーザー共に手間を省くことが出来ます。

まとめ

  • LR2ではアスペクト比が1:1でないBGAの表示が困難
  • そもそもBGA表示領域が1:1じゃない状態で使ってる人がいる
  • Beatorajaだとどのような組み合わせでもアスペクト比を維持して綺麗に表示できる(BGA ExtendをKeep Aspect Ratioに設定した場合)
  • でも黒フチは入れないで欲しい!
  • コーデックはwmv9かh.264かh.265辺りが無難、とりあえずLR2でもmpg使うのはやめよう