[Unity] スクリーンキャプチャを連続で行う

Unityのスクリーンキャプチャを連続で行う必要があったので作成しました。

欲しかった機能は以下の通り。

  • UnityエディタのGame Viewのスクリーンをキャプチャする(アプリでは動作しなくても良い)
  • どんなに重たくても良いので確実に60fpsで撮影できること
  • PCの解像度以上のスクリーンキャプチャができること
  • ファイル名はxxx_1.png, xxx_2.png,・・・,xxx_101.pngのように0サプレスではない連番になること
  • 終了フレームを指定したら自動的にキャプチャが終わること

スクリーンキャプチャなんて定番ネタだと思うので調べてみたもののジャストミートするプログラムは見つからなかったため、以下のサイトの情報を元に自作しました。

元ネタ:

作成したプログラムはこちらになります。

https://github.com/zabaglione/ScreensRecoder

使い方は上記のスクリプトを自分のプロジェクトに取り込み、適当なGameObjectにアタッチして、Inspectorでお好みの設定してUnityEditor上でPlayをします。この時、スクリーンキャプチャしたいサイズを[Edit]-[Project Settings…]-[Player]であらかじめ設定しておいてください。

スクリーンショット 2015-07-11 13.00.55

 

ScreensRecoder.csをアタッチした直後の画面。

スクリーンショット 2015-07-11 13.05.21

デフォルト設定は、D:\captures\に実行時の日付のファイル名をベースに連番で作成するようになっています。なおディレクトリの指定の最後に\(Macなら/)を付けてください。また間違っても./(カレントディレクトリ)とか、Assetsの下などUnityプロジェクトの下を指定するのはやめましょう。

Shift+Rを押すと録画のOn/Offを切り替えできるようになっています(キーは変更可能)。デフォルトではPlayと同時に録画の開始はしません。始めから録画を開始するには「Is Recording」をチェックします。

Framerateはデフォルトで60fpsとなっています。

EndFramenoはデフォルトは0で、最終フレームを入れておくと録画が自動的に終わります(Playは継続します)。Unity5.1.x以上なら入力欄で計算式が欠けるので、「60*30」「Enter」と入力すると「1800」と自動的に計算されます。これで30秒分(1800フレーム)の記録を行います。

Minimum WidthとMinimum Heightにはスクリーンキャプチャのサイズを指定します。この数字を元にスーパーサンプリングをして画像を保存します。今回は2048×2048の画像が欲しかったので、Game Viewのサイズを1024×1024にして2倍にスーパーサンプリングして画像を保存しました。詳しくはテラシュールブログさんのページをご覧ください。

 

自分用メモ 

ffmpeg -r 60 -i 20150711_%d.png -s 2048x2048 -an -vcodec libx264 -pix_fmt yuv420p -b:v 50M video.mp4

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です