強火で進め

このブログではプログラム関連の記事を中心に書いてます。

Unityの実行画面をキャプチャして動画に変換する方法

こちらの高橋さんのブログにてUnityの実行画面をキャプチャした連番画像から動画を作成する方法の解説記事有りました。

Unity から連番ビットマップを出力する – Keijiro Takahashi
http://keijiro.github.io/posts/unity_screen_recording/

この記事ではFinal Cut Proで変換する方法の解説がされていました。こちらの製品は有料なのでここでは無料で使えるFFmpegで動画に変換する方法を解説しておきます。

変換方法は至って簡単。こちらのサイトFFmpegをダウンロードして来て、コマンドラインにて以下の様なコマンドを実行すれば変換可能です。
※以下のコマンドでは正しい再生速度の動画になりません。

ffmpeg -i "Capture/frame%04d.png" -vcodec mpeg4 -b 6000k out.mov

-i で入力データになる連番の画像ファイルを指定します。ここではCaptureフォルダに入っているファイルを指定しています。ここは適宜変換したいフォルダに変えて実行して下さい。 -b ではビットレートを指定しています。自分の好みに応じて調整して下さい。

このコマンドで変換したものがこちらの動画。

因みにキャプチャをする時には設定された画面サイズより実際のGameパネルの画面サイズが優先されます。例えばGameパネルのサイズを640x480に設定していたとしても実際のサイズがそれ以下だった場合にはキャプチャされた画像の解像度は640x480より小さいものとなってしまいます。画面が小さい環境で作業している場合などはGameパネルに有る「Maximize on Play」をONにしておくとゲーム実行時にGameパネルが最大化されるのでお勧めです。

気になった点

約5秒くらいキャプチャした(画像ファイル305個)にも関わらず、出力した動画の時間が約12秒(Mac上では12秒、YouTubeにアップすると13秒の表示)なのが気になりました。以下の様にフレームレート指定して動画変換をしても改善されませんでした。
※以下のコマンドでは正しい再生速度の動画になりません。

ffmpeg -i "Capture/frame%04d.png" -vcodec mpeg4 -r 60 -b 6000k out.mov

厳密に想定の再生速度を反映させたい場合にはUnity上でのオブジェクトの動きを12/5倍くらいにするなどの調整が必要になりそうです。

(2013/11/15 追記)
フレームレートの設定は位置が重要みたいです。 -i より前に設定しないとダメみたいです。以下のコマンドで正しく約5秒の動画に成りました。

ffmpeg -r 60 -i "Capture/frame%04d.png" -vcodec mpeg4 -b 6000k out.mov

【参考情報】

Adjust framerate MPG4 in ffMpeg - Stack Overflow
http://stackoverflow.com/questions/7177782/adjust-framerate-mpg4-in-ffmpeg

(追記ここまで)

Animation GIF

お手軽にアニメGIFにして使うというのも良いと思います。連番画像からアニメGIFにしたい時はこちらのサイトが参考に成ります。

ffmpegImageMagick で動画をアニメGIF 変換
http://futuremix.org/2012/03/ffmpeg-imagemagick-animation-gif

関連情報

YouTubeにアップするのに適した動画の情報。解像度などをここのサイズに設定すると余白無しで綺麗に表示されます。

高度なエンコード設定 - YouTube ヘルプ
https://support.google.com/youtube/answer/1722171?hl=ja

FFmpegのビデオのオプション情報。

FFmpeg documentation : :
http://www.ffmpeg.org/ffmpeg.html#Video-Options

ゲーム画面のスクリーンキャプチャを行う方法 - 強火で進め
http://d.hatena.ne.jp/nakamura001/20110704/1309799515

ゲーム画面のスクリーンキャプチャを行う方法(アルファチャンネルも含める) - 強火で進め
http://d.hatena.ne.jp/nakamura001/20110704/1309801298