配信修行僧

ゲーム配信中にスポーツ中継みたいなインスタントリプレイをOBSで表示する方法

 OBS Studioのプラグインを活用することで、生配信中にTVのスポーツ中継のようなインスタントリプレイを表示できるようになる。FPSゲームでヘッドショットを決めたり、格闘ゲームでマニアックなリーサルコンボを決めたりといった時に活用すると、配信が一層盛り上がるだろう。ここでは3つの方法を紹介する。

 どのような感じになるのかは、下記の動画を参照してほしい。

OBSを使って、配信中にスポーツ中継的なインスタントリプレイを流すデモ

標準のリプレイバッファとDirectory watch mediaを組み合わせる方法

 1つ目の方法は、OBS標準のリプレイバッファを使う方法だ。OBSは標準で20秒分のリプレイバッファが有効になっている。どういうことかと言うと、配信に流しているセッションとは別に、常に直近の20秒分のデータがメモリに保存されているということだ。何秒保存するかは、「設定」→「出力」→「リプレイバッファ」の「最大リプレイ時間」で指定できる。

 ただし、このメモリ上のデータをストレージに保存しないと再生ができないので、OBSの「設定」→「ホットキー」→「リプレイバッファ」で「リプレイを保存」になにかしらのホットキーを割り当てる。

 なお、OBSをいろいろと活用していくと、ホットキーが足りなくなる問題に直面する。OBSで使うホットキーが余っていたとしても、1PCでゲームも配信もする場合、ゲームで使うキーとOBSのホットキーが競合することもある。もし、ElgatoのStream Deckを持っているなら、OBSプラグインにある「リプレイバッファの保存」を使うと、ホットキーではなくAPI経由で保存してくれるので便利だ。

 また、リプレイバッファは有効にするだけでなく、開始する必要もある。リプレイバッファを有効にすると、「コントロール」ドックに「リプレイバッファを開始」ボタンが表示されるので、これを押すとリプレイバッファが開始される。配信のたびにこのボタンを押すのは面倒だし、押し忘れ防止のために、「設定」→「一般」→「出力」で「配信時に自動的にリプレイバッファを開始する」にチェックを入れるといいだろう。

リプレイバッファを有効にしておくと、常時直近の指定した時間分のデータがメモリに記録されている
リプレイバッファを動画として保存するにはホットキーを指定しておく必要がある
Stream Deckを持っているなら、リプレイバッファの保存を直接実行できる
リプレイバッファを保存するなら、「配信時に自動的にリプレイバッファを開始する」にチェックを入れるといい

 これで配信中に名場面でホットキーかStream Deckのボタンを押すと、直近20秒(デフォルトの場合)の動画が保存される。だが、いざ再生しようとしたら、OBSでソースとしてその動画を追加し、配信画面上に配置して再生する、という手間が発生する。これは現実的ではない。そこで、「Directory watch media」というプラグインを使うと、その工程をワンタッチで実行できるようになるのだ。使い方を解説しよう。

 まず、公式サイトに行き、「Download」ボタンを押し、OSに合わせたものをダウンロードする。Windowsならdir-watch-media-x.x.x-windows-installer.zip(xはバージョン番号)をダウンロード、展開、実行するのが簡単だ。マイナーなツールなので、万が一、Microsoft Defenderの警告ウィンドウが出た場合は、「詳細情報」を押せば、「実行」ボタンを押せる。

 Directory watch media自体の設定を行なう前に、何でもいいのでいったんリプレイバッファを保存しておこう。リプレイ映像は「Replay 2025-02-01 11-11-00」といった書式のファイル名でローカルレコードと同じフォルダに保存される。

 これをどのようなレイアウトで表示するのかはその人次第だが、ここでは、リプレイ用のシーンを作成し、シーンを切り替えて表示するという前提で進める。

 リプレイ用シーンで「ソース」の「+」を押し、「メディアソース」を選ぶ。名前は「リプレイ動画」などとする。プロパティ画面が出るので、「ブラウズ」を押して、先ほど作成したリプレイバッファ動画ファイルを選ぶ。表示位置などは必要に応じて調整する。

 続いてそのリプレイ動画を右クリックし、「フィルタ」を選び、「エフェクトフィルタ」の「+」を押して、「Directory watch media」を選ぶ。Directory watch mediaの設定内容として、まず「ブラウズ」ボタンを押して、再生するリプレイ動画が保存されている場所を指定する。

 次に、「Filter」に「Replay」と入力する。これは、同じフォルダに通常の録画データなどがあったとしてもそれは無視して、ファイル名に「Replay」とついたリプレイバッファ経由で作成された動画のみを対象とするためだ。基本的にはこれで設定完了だ。

 Directory watch mediaは、メディアソースの中身を指定した条件に合致するものに自動変更してくれるツール。上記の設定により、「リプレイ動画」として再生するデータとして、リプレイバッファで作成した動画の内、最新のものを自動的に選んでくれる。実際には「Directory watch media」の「Sort by」の設定も重要なのだが、標準で「modified newest」となっているので、フォルダにあるリプレイ動画の内、最新のものが選ばれる。

Directory watch mediaの設定画面

 これで、リプレイ用のシーンに切り替えると、自動的に最新のリプレイ動画が再生される(リプレイ動画のプロパティで、「ソースがアクティブになったとき再生を再開する」にチェックが入っていることを確認)。

 なお、Directory watch mediaの設定で「Sort by」を変えることで、アルファベット順やランダムなファイルを指定したり、「Extention」でファイルの拡張子を指定したりもできる。「Interval」はそのフォルダを監視する間隔で、基本的にはデフォルトの1,000msでいいだろう。

Source RecordとDirectory watch mediaを使って、ゲーム画面だけをリプレイ再生

 上記の方法は、標準のリプレイバッファを使うため、リプレイに保存されるのは、配信に流している映像そのままとなる。しかし、ワイプや配信画面上に載せたコメントなどを排除した純粋なゲーム画面だけのリプレイを流したいというニーズもあるだろう。そういう場合は、「Source Record」というプラグインが役に立つ。

 ゲーム画面とワイプ映像を表示させる配信では、ゲーム画面かワイプ映像のどちらか、あるいは両方とも本来のサイズから縮小して表示させるだろう。そういった画面構成であっても、Source Recordを使うと、配信の映像とは別に、任意の映像ソースをオリジナルの解像度のまま録画できるようになる。たとえば、カメラ映像を小さくしてゲーム画面の上に表示している場合でも、オリジナル解像度のカメラ映像、あるいはカメラ映像が重ねられていない状態のゲーム映像を記録できるようになる。

 使い方を解説する。こちらも、公式サイトに行き、「Download」ボタンを押し、OSに合わせたものをダウンロードする。Windowsならsource-record-x.x.x-windows-installer.zip(xはバージョン番号)をダウンロード、展開、実行するのが簡単だ。

 インストールした後、OBSを起動したら、元解像度で記録したいソース(ここではゲーム画面のソース)を右クリック、「フィルタ」を選択し、「エフェクトフィルタ」で「+」をクリックして「Source Record」を選ぶ。名称はデフォルトのままで問題ないだろう。

Source Recordの設定画面。項目は多いが、リプレイ用途なら設定箇所はさほど多くない

 多岐に渡る設定項目があるが、ここではリプレイをする際に必要な箇所だけを解説する。「録画」の「録画モード」は、いつ録画を開始するかの項目。今回のリプレイ用途では、Source Record本来の録画機能ではなく、リプレイバッファの方を使うので、「録画モード」は「なし」でいい。つまり、録画はしないということだ。

 ただし、リプレイバッファの保存に必要となるので、「パス」でリプレイ映像を保存する場所を選択する。「ファイル名書式設定」については、デフォルトである「%CCYY-%MM-%DD %hh-%mm-%ss」の頭に「Replay_」などをつけるといいだろう。と言うのも、OBS標準のリプレイバッファと違い、Source Recordのリプレイバッファは、録画日時だけのファイル名になってしまうからだ。「録画フォーマット」はデフォルトのままでいい。

 次に、「リプレイバッファ」にチェックを入れ、「リプレイ時間」を指定する。時間は好みでいいが、10~20秒程度が適切だろう。なお、OBS標準のリプレイバッファは使わないので、こちらはオフにしておこう。

 下の方にある「Video Encoder」は、使っているGPUがGeForceなら「NVENC H.264」など、自分のハードにあったものを選ぶ。「Audio Encoder」と、「Frame Rate」はデフォルトのままでいい。

 Encoderを選ぶと、その詳細も設定できる。こだわりがなければ、配信と同じ設定でいいだろう。重要な項目を拾うと、「レート制御」は「CBR」、「ビットレート」は「6000 kbps」程度、「キーフレーム間隔」は「0s」、プリセットは「P5(高品質)」程度でいい。

 最後に、「ファイル」→「設定」→「ホットキー」を開くと、「(ソース名)-Source Record」という名称で「リプレイを保存」が追加されているので、リプレイ保存に使うホットキーを指定する。これで、ホットキーを押すたびに、Replay_%CCYY-%MM-%DD %hh-%mm-%ss.mp4といったリプレイが保存される。次の設定を行なう前に動画の実態が必要なので、適当なリプレイを保存しておこう。

リプレイバッファを保存するためのホットキーを指定する。OBS標準のリプレイバッファとは別扱いなので注意

 リプレイの保存についてはこれで設定完了だが、当然リプレイを表示するシーンが必要となるので、シーンを作成する。リプレイシーンの「ソース」で「+」を押して、「メディアソース」を選ぶ。名称は「リプレイ動画」などとする。設定は不要なので、OKを押して閉じる。

 次にそのリプレイ動画のソースを右クリックして「フィルタ」を選び、「エフェクトフィルタ」の「+」を押して、「Directory watch media」を追加する。後は、先に説明したDirectory watch mediaの使い方を参照して、このプラグインが自動的に最新のリプレイ動画を選ぶようにしてやれば、このシーンを表示するだけで、リプレイ動画が再生されるようになる。

 基本的にはこれで設定完了だが、リプレイシーンに「現在リプレイ表示中」などのテキストを追加するのもいいだろう。

 ちなみに、今回はリプレイ用の映像を記録するための設定を解説しているが、このプラグインは切り抜き動画用に、ゲームやカメラの映像を配信とは別に高品質に記録しておくという使い方もできる。そういう場合は、「録画」の「録画モード」を「配信時」などにして、適宜エンコーダの設定を変えよう。これで、配信すると、クリーンで高品質なゲームやカメラ映像を録画できる。

Dynamic Delay

 ここまで解説した方法は2つとも、任意の時点でホットキーを押してリプレイバッファを保存しておき、試合が終わった後などにシーンを切り替えてそのリプレイを振り返るといった使い方となる。

 それに対して「Dynamic Delay」というプラグインを使うと、その場でゲーム映像を早戻しして、リプレイを流し、リプレイが終わったら早送りでリアルタイムに戻すといった演出ができるようになる。

 使い方を解説する。こちらも、公式サイトに行き、「Download」ボタンを押し、OSに合わせたものをダウンロードする。Windowsならdynamic-delay-x.x.x-windows-installer.zip(xはバージョン番号)をダウンロード、展開、実行するのが簡単だ。

 インストールした後、OBSを起動したら、ゲーム画面のソースを右クリック、「フィルタ」を選択し、「エフェクトフィルタ」で「+」をクリックして「Dynamic Delay」を選ぶ。名称はデフォルトのままでいいだろう。

Dynamic Delayの設定画面

 「Duration」は早戻しする時間で、リプレイバッファの時間と似たようなものだ。10~20秒程度でいいだろう。「Easing」により、早戻し/早送りする時に加速をかけるかを指定でき、「Easing Duration」でEasingを適用する時間を指定できる。

 「Fast Forward」および「Fast Backword」でそれぞれ早送り、早戻しの倍速を指定できる。デフォルトでは200/-200%となっている。Durationが10sの場合、これだと、2倍速で早戻しするので、5秒間かけて10秒前に映像を早戻しして、その後リプレイ再生が終わったら、5秒かけて早送りすることになる。

 これはちょっと冗長なので、最大の1,000/-1,000%がオススメだ。Durationが10sだと、10倍速で1秒かけて10秒前に巻き戻し、リプレイが終わったら10倍速で1秒かけて今に戻す形になる。

 「TextSource」を使うと、現在何倍速で表示中かなどの情報を表示できるが、どちらかと言うと機能の検証目的用で、実際の配信で使うことはあまりないだろう。