LoginSignup
1
0

More than 3 years have passed since last update.

【Unity】簡単にビデオ録画ができるアセット NatCorderのメモ

Last updated at Posted at 2020-12-30

はじめに

GameSceneの映像をカメラロールに保存する時、プラットフォーム別の対応をしたくなかったので利用しました。
サンプルシーンと公式リファレンスを参考にすれば大体わかりますが、英語読むの大変だったので自分用にまとめておきます。

NatCorder

UnityEngine用の軽量ビデオ録画API。
プッシュアーキテクチャで設計されているため、3つの簡単なステップでビデオを録画できます。

公式API
https://docs.natsuite.io/natcorder/
スクリーンショット 2020-12-30 2.13.03.png

こちらから購入できます。
https://assetstore.unity.com/packages/tools/integration/natcorder-video-recording-api-102645

録画開始方法

Recorderクラス

作成したい形式のRecorderクラスインスタンスを作ります。
ここでサイズやフレーム数を決めます。音声も含めたい場合は引数で渡してあげてください。

mp4Recorder = new MP4Recorder(Camera.main.pixelWidth, Camera.main.pixelHeight, 30);

NatCorderでは下記の形式が用意されています。

  • MP4
  • GIF
  • HEVC
  • JPG
  • WAV

RealtimeClock

NatCorderで用意されているTimestampを取得するクラスです。

clock = new RealtimeClock();

CameraInput

UnityCameraの映像を使って録画したい場合に使うクラスです。
コンストラクターにRecorderクラスとRealtimeClock、撮影で使うUnityCameraを引数に渡してあげます。
この時配列でUnityCameraを渡すことで複数の映像をブレンドしてくれます。

cameraInput = new CameraInput(mp4recorder, clock, Camera.main);

CameraInputのインスタンスを生成した時点で録画が開始されます。

録画停止方法

CameraInput.Dispose

録画を停止したい場合に使う関数です。
RecorderクラスでFinishWriting()を呼び出す前に必ず行います。

cameraInput.Dispose();

IMediaRecorder.FinishWriting

フレームのコミットを終了する関数です。
処理が終了すると保存先のpathを返してくれます。

var path = await recorder.FinishWriting();

サンプルコード

とりあえずこんなんで動きます。

using UnityEngine;
using NatSuite.Recorders.Clocks;
using NatSuite.Recorders.Inputs;
using MP4Recorder = NatSuite.Recorders.MP4Recorder;

public class MovieGenerater
{
    private static MovieGenerater instance;
    private MP4Recorder mp4recorder;
    private CameraInput cameraInput;

    public static MovieGenerater Instance
    {
        get
        {
            if (instance == null) instance = new MovieGenerater();
            return instance;
        }
    }

    public void StartRecording()
    {
        mp4recorder = new MP4Recorder(Camera.main.pixelWidth, Camera.main.pixelHeight, 30);
        cameraInput = new CameraInput(mp4recorder, new RealtimeClock(), Camera.main);
        Debug.Log("Recording Start");
    }

    public async void StopRecording()
    {
        cameraInput.Dispose();
        var path = await mp4recorder.FinishWriting();
        Debug.Log($"Saved recording to: {path}");
    }
}

使い方

ボタン等のタイミングでStartRecording();を呼べば撮影が開始されます。
終了したい場合はStopRecording();を使ってください。
正常に保存が成功すると保存先のpathが返ってくるので確認してください。

まとめ

たったこれだけでプラットフォームを気にせず使えるのでオススメのアセットです!
カメラアプリやARアプリで使ったり、RenderTextureの録画をしたいときに便利そう。。

余談になりますが同じ作者さんのNatShareというAssetを使うと、SNS共有まで対応幅が広がるので気になった方は使ってみてください!
気が向いたらNatShareの記事もかきます!

NatShareの記事投稿しました。
https://qiita.com/Formi/items/de2afa7fab89bbee8259

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0