2015年1月10日土曜日

[Unity3D] ゲーム画面をキャプチャしてMovie Studioで動画に編集する

How to capture screenshot pictures with Unity.
Unityで作ったアプリの画面をキャプチャして動画を作るために調べたことをまとめました。
この方法は音声のキャプチャが出来ません。

環境

・Windows8.1
・Unity 4.5.5f1
・Movie Studio 12 Platinum

Unityの画像ファイルに保存するメソッドを使う

Unityはスクリーンショットをpng形式の画像ファイルに保存する Application.CaptureScreenshot というメソッドがあります。
http://docs.unity3d.com/ScriptReference/Application.CaptureScreenshot.html
このメソッドを使って実行中のゲームの全フレームを画像ファイルに保存するC#スクリプトを作りました。
保存先に同じ名前のファイルがあると上書きされるのでファイル名に連番を付けます。
画像ファイルは Dドライブの \captures というフォルダーに保存することにします。
他のフォルダーに保存する場合はソースを修正してください。
1秒に何枚の画像を保存したかをフレームレートとしてConsoleに表示します。

以下ソースです。
CaptureScreens.cs


このスクリプトをシーン内のカメラにアタッチさせます。

この状態でゲームを実行すると全てのフレームのスクリーンショットが画像ファイルに保存されます。
スクリーンショットを保存しながらだと動作速度が落ちるので、画像ファイルの保存用にRAMディスクを作った方がいいと思います。

目的のスクリーンショットが撮れたらカメラにアタッチしたスクリプトのチェックを外すかRemoveしてスクリプトを無効化してください。


Movie Studioで画像ファイルを動画に変換する

Movie Studioで静止画をつなげて一つの動画を作ります。
Consoleによると1秒当たり17フレームでした。
今回は最初の170枚の画像で10秒分の動画を作ることにします。

※もっと簡単な方法がありましたので下に追記しました

エクスプローラーで先頭から170番目までの画像ファイルをまとめて選択してMovie Studioのビデオトラックにドラッグ&ドロップします。

タイムラインの画像ファイル1枚に5秒が割り当てられますが長すぎるのでストレッチします。
ビデオトラックをマウスでドラッグ操作するかか、Ctrlキー+Aキーで全ての画像ファイルを選択し、
編集 - グループ - 新規作成
でグループ化します。

Ctrlキーを押しながらタイムラインの画像ファイルの右端を左に向かってドラッグします。
タイムラインの画像ファイル1枚の割り当て時間が1秒までストレッチされます。

動画が10秒になるようにストレッチしたいわけですが、Movie Studioは1枚1秒までしかストレッチできないようです。
もっと短くストレッチしたいので
ツール - 新規トラックへのレンダリング
を実行して動画ファイルに変換します。

新しいビデオトラックと動画のイベントが作られるので、イベントの右端をCtrlキーを押しながら左にドラッグしてストレッチします。
Movie Studioは元の長さの4倍から4分の1倍までしかストレッチできないようなので、10秒の動画になるまでストレッチとレンダリングを何度も繰り返します。


もっと簡単な方法がありました

2015年2月23日追記
連続した画像ファイルを動画として取り込む機能がありました。

ファイル - メディアのインポート
を開いて右下の選択項目で
画像シーケンス
を選択します。
先頭の画像ファイルを選んでオープンシーケンスにチェックを入れて最後の画像に最後の画像ファイルの連番を入力します。
※連番のファイルがあれば「最後の画像」は自動で入力されるようです。

この設定で開くボタンをクリックするとプロパティ画面が表示されます。
この画面でフレームレートを設定します。
フレームレートは初期設定のままだと29.970と設定されていますが、今回の動画は1秒に17フレームなので17と入力してOKをクリックします。

プロジェクトメディアに動画のメディアが追加されているのでビデオトラックにドラッグすれば再生できます。


アセットを使う方法

Unityアセットストアで購入できるAVPro Movie Captureを使うとゲーム画面を動画ファイルにキャプチャしてMP4のエンコードまでしてくれるようです。
https://www.assetstore.unity3d.com/jp/#!/content/2670



関連ブログ

[GIMP] GIFアニメーションの作り方
[動画編集] Movie Studio 13 でVSTプラグインを使ってみました
[Unity3D] Visual Studio Community 2013を日本語化してUnityアプリを作る
[Unity3D] 透視投影と平行投影を合成するには[ユニティちゃん]
[Android] 高速Androidエミュレーター・BlueStacks
[Unity] オーディオの音量が小さい
[Unity 3D] Blender could not be found.を解決するには

以上、参考になれば幸いです。

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。