60fpsのPCゲーム(EGGやMSXPLAYer)を30fpsにブレンド合成しよう!

バイスキャプチャならDE-INTERLACE(インターレース解除)のBLENDで、点滅を綺麗に半透明状に変換して表示できるのですが、Windowsで実行するゲームはその方法が使えません。

その場合は、OBSの「Source Mirror」ソースを追加して、フィルタ「色補正」と「レンダリング遅延」を使用することで代用できそうです。

まずゲームの「ウィンドウキャプチャ」ソースを追加済みの状態から。

今回は「BlueMSX」が対象となるウィンドウキャプチャソースとなります。

BlueMSXではPastel2というMSXFANに投稿された映像鑑賞ソフトを実行しています。
MSX2には60fpsで2枚のVRAMを交互に切り替えながら表示する機能があります。

これには疑似半透明のような効果があるため、
PASTEL2はそれを利用して不思議な波模様を表示するプログラムになります。

60fpsの画像をblendで30fpsに落とし込むことで30fps配信でもちゃんと表示されるか検証しながら方法を模索してみました。

(1)ソースの「追加」→「Source Mirror」



(今回は既に「Source Mirrior」は追加済みで「フレーム補完 BlueMSX」という名前にしてあります。)

「Source Mirror」の「Source」にはゲームのウィドウキャプチャソースを指定します。
(今回は「BlueMSX」という名前のウィンドウキャプチャです。)

※「Source Mirror」側に指定した「ウィンドウキャプチャ」を同じ大きさと位置に配置します。「変換」→「変換のコピー」/「変換の貼り付け」を使って元のソースからコピペすると楽です。

※「ソース」リストでの配置ですが、「Source Mirror」はソースに指定する「ウィンドウキャプチャ」ソースより上に配置します。(ウィンドウキャプチャの上にSourceMirrorを半透明合成する為です)(今回の例の「ソース」リストを見てもらうと、「フレーム補完 BlueMSX」は「BlueMSX」の上にあるのがわかると思います。)

(2)「Source Mirror」の「フィルタ」に「色調補正」と「レンダリング遅延」を追加

フィルタに「追加」→「色補正」
不透明度を50%に設定

フィルタに「追加」→「レンダリング遅延」
遅延時間に36ミリ秒を指定

元々ウィンドウキャプチャ自体が60分の1秒(16.6666ミリ秒)以上遅れているらしく、
そこからさらに60分の1秒遅らせる為には33ミリ秒以上の遅延を指定しないと、うまくずれてくれない様です。

今回は配信で確認しながら1ミリ秒ずつ増やしていき、36ミリ秒ぐらいから期待したBLEND効果が出ました。

使用前

使用後



無事、PCのモニタ表示に近い映像がブラウザ側で表示されました。

ただ、キャプチャデバイスと違って、ウィンドウキャプチャの場合は、
微妙に取り込みタイミングがずれたりすることがあるようです。
処理落ちの影響を受けやすくなっていますね。

 

とりあえずこれでそれなりに60fps点滅のあるゲームも表示できるようになるかと思います。

 

(3)うまくいかない場合

OBS側の画面取り込み頻度が映像設定のfpsに影響されるケースではうまくいかないので、映像出力を60fpsに設定する必要が出るかもしれません。

ニコニコの場合60fps送信は可能ですがサーバ側で30fpsに強制的に減らされます。

また他の配信サイトでもサーバ側で30fpsに変更される場合があります。

ですので、60fps設定+今回の処理を加えて配信というのが安定かもしれません。

絶対60fpsで視聴可能なら今回のような処理は不要なのですが。