GameProgrammar's Night

ゲームプログラム系の覚え書き

DirectXゲームの動画キャプチャ事情

 このデモをUE4上で作り終わったあとに動画キャプチャをしようと思ったのですが、愛用していたFrapsがまともに動かなくて困ったんですよねー。1分ぐらい録画すると途中から見られない動画ができ上がる始末。
 Fraps自体は大分前に更新が止まっていて、Win7 DX10までの対応で終わってるからみたいでした。というわけで、新しく動画キャプチャ環境を探さないといけないんですが、何か良いのないですかね?
 とりあえず、手元ですぐできるWin10付属のGameDVRかShadowPlayかって所ですが、GameDVRは60fps撮影ができないのでShadowPlayに落ち着きそうではあります。
 ついでにUE4での録画についても調べたので、書いておきます。

UE4での録画

 UE4での録画には、2種類あります。

マチネのムービーボタン

 マチネのウインドウを開くと、右上にムービーボタンがあります。押すとダイアログが出ますので、適当に設定してOKボタンを押すとゲームが起動してビデオキャプチャをはじめます。

f:id:katze_7514:20151029021346j:plain

 キャプチャされた動画は「プロジェクトファイルがあるフォルダ/Saved/VideoCaptures」に出力されます。
 無圧縮AVIなのでアホみたく容量を食います*1が、お手軽です。しかし、ゲームの撮影には致命的な問題があり使い物になりません。

 UMGが撮影されません。
 カメラで見えてる部分のみの撮影になるようで、カメラの上から描画されているUMGはキャプチャされません。

起動引数「-DUMPMOVIE」

 パッケージ化したあとのexeに、起動引数として「-DUMPMOVIE」をつけると1フレごとに連番スクショを出力します。撮影後に動画作成ソフトで連番スクショを動画化します。
 この場合は、可変フレームレートだと安定して撮影できない(スクショを吐き出す負荷でフレームレートがかなり下がります)ので、合わせて起動引数に「-BENCHMARK -FPS=60」などとしてフレームレートを固定すると良いと思います。
 こちらはプライマリバッファ(フレームバッファ)をスクショにしますので、UMGも問題なく撮影されます。
 1フレごとにファイルに書き出しているので時間が掛かるのと、無圧縮AVIまでは行きませんがHDD容量をかなり食いますので、余裕のある時にしか使えません。

ShadowPlay

 というわけで、ShadowPlayに落ち着くわけです。
 ShadowPlayは、nVidia製のGPUで使えるキャプチャソフトでGPU内でキャプチャしてエンコードするので、CPU負荷がほぼなくShadowPlayを実行しながらゲームをプレイするのも問題ありません。そのため、自動プレイキャプチャだけでなく実際にプレイしながらの画面も十分に撮ることができます。画面サイズやフレームレートの制限もありません。
 ただし、ウインドウモードには対応してないのとGPUGeforce縛りになります。

 UE4だとフルスクリーン実行も簡単なので、もうこれで良いかなと思っております。UE4アプリのフルスクリーン起動は、ゲーム内コマンドラインで「r.Res=1280x720f」という感じで画面サイズの最後にfをつけるか、起動引数に「-FULLSCREEN」をつけることでできます。

*1:ファイルが大きすぎて再生してもロードが追いつかず再生フレームレートが落ちるぐらいでかい。90秒で18GB