Search Unity

  1. Unity 2019.2 is now released.
    Dismiss Notice

NatCorder - Video Recording API

Discussion in 'Assets and Asset Store' started by Lanre, Nov 18, 2017.

  1. Jason-RT-Bond

    Jason-RT-Bond

    Joined:
    Mar 26, 2012
    Posts:
    53
    Here you go.
     

    Attached Files:

  2. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    2,616
    Looks like you app is using Vulkan. NatCorder only supports OpenGL ES3.
     
  3. Jason-RT-Bond

    Jason-RT-Bond

    Joined:
    Mar 26, 2012
    Posts:
    53
    Oh! I did not catch that.

    I removed Vulkan from the Graphics APIs list, leaving only OpenGL ES3. I get a different behaviour, but it still freezes followed by a crash. Attaching the log here.
     

    Attached Files:

  4. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    2,616
    Looks like you're running out of memory. Profile your app for its memory consumption; recording is a memory-intensive process.
     
  5. Jason-RT-Bond

    Jason-RT-Bond

    Joined:
    Mar 26, 2012
    Posts:
    53
    First, thank you for continuing to respond so quickly. Really appreciated :)

    I profiled the app using Unity's profiler and the memory usage is very small. This is expected, as this is just a tiny test project which loads a very simple scene.

    Screen Shot 2019-05-26 at 11.02.58 AM.png


    However, I did find something interesting: When Unity is set to create a "development build" (necessary to enable profiling) it crashes much less often, although still sometimes. And the mp4 it records has broken audio.

    Attached is another log. Here is what happened during this run.
    • The scene started as expected. It is a very simple looping animation (a sphere moving in a circle) and looping sound.
    • After 1s my script began recording. There was a small hitch at the start but this is minor.
    • After about another 1s, the image on screen froze (cannot see the animation) but sound continued.
    • After the recording completed (8s), the video played back.
    • This video showed the animation playing correctly (not frozen), but the audio cuts out after 1s.
    • The app continued correctly.

    Inconsistent Issues (frequent, but not in this run):
    • In development build, the app crashes (app closes) sometimes after recording finishes or after the video is played back.
    • In development build, sometimes the app freezes instead of just a crash.
    • In the produced video, the animation freezes.

    Consistent Issues:
    • In non-development builds, the crash or freeze seems to always happen.
    • In the produced video the audio cuts out after 1s.
     

    Attached Files:

  6. glutvort

    glutvort

    Joined:
    Apr 13, 2019
    Posts:
    31
    whan i use video record my app laging during record
    Code (CSharp):
    1.  
    2.             recordingClock = new RealtimeClock();
    3.             videoRecorder = new MP4Recorder(
    4.                 CalculateWidth(),
    5.                 CalculateHeight(),
    6.                 30,
    7.                 48000,
    8.                 1,
    9.                 OnRecording
    10.             );
    11.             cameraInput = new CameraInput(videoRecorder,recordingClock,Camera.main);
    12.             audioInput = new AudioInput(videoRecorder,recordingClock,Camera.main.GetComponent<AudioListener>());
     
  7. stathub

    stathub

    Joined:
    May 28, 2019
    Posts:
    2
    Hi, I'm new to the plugin so I apologise if this has been mentioned before (I did search the forum thread but only found one mention of this issue).

    We are trying to allow users to record a short video message with audio on an Android device but are having trouble as it seems to not work as expected (errors in the logs and crashes).

    First off our Android manifest file has these permissions:
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />

    The sample script we have put together looks like this:

    Code (CSharp):
    1. using NatCorder;
    2. using NatCorder.Clocks;
    3. using NatCorder.Inputs;
    4. using System.Collections;
    5. using System.Collections.Generic;
    6. using UnityEngine;
    7.  
    8. public class SampleRecorder : MonoBehaviour
    9. {
    10.   static public SampleRecorder Instance { get; set; }
    11.  
    12.   WebCamTexture cameraTexture;
    13.   IMediaRecorder mediaRecorder;
    14.   IClock recordingClock;
    15.  
    16.   [Header("Microphone")]
    17.   public bool recordMicrophone;
    18.   public AudioSource microphoneSource;
    19.   private AudioInput audioInput;
    20.  
    21.   private bool m_isRecording = false;
    22.   private Coroutine m_recordLoop;
    23.  
    24.   private void Awake()
    25.   {
    26.     if(Instance != null)
    27.     {
    28.       DestroyImmediate(this);
    29.       return;
    30.     }
    31.  
    32.     Instance = this;
    33.   }
    34.  
    35.   public void StartRecording()
    36.   {
    37.     if (!m_isRecording)
    38.     {
    39.       Debug.Log("*********************************************** Start recording...");
    40.       m_isRecording = true;
    41.       StartCoroutine(Record());
    42.     }
    43.   }
    44.  
    45.   IEnumerator Record()
    46.   {
    47.     // Start camera
    48.     cameraTexture = new WebCamTexture();
    49.     cameraTexture.Play();
    50.     // Create a clock for generating recording timestamps
    51.     recordingClock = new RealtimeClock();
    52.     // Create a recorder
    53.     mediaRecorder = new MP4Recorder(480,
    54.                                     640,
    55.                                     30,
    56.                                     recordMicrophone ? AudioSettings.outputSampleRate : 0,
    57.                                     recordMicrophone ? (int)AudioSettings.speakerMode : 0,
    58.                                     OnFinishRecording);
    59.     // Record frames!
    60.     m_recordLoop = StartCoroutine(RecordLoop());
    61.  
    62.     if (recordMicrophone)
    63.     {
    64.       StartMicrophone();
    65.       audioInput = new AudioInput(mediaRecorder, recordingClock, microphoneSource, true);
    66.     }
    67.  
    68.  
    69.     // Wait for 10 seconds
    70.     yield return new WaitForSeconds(5f);
    71.  
    72.     // Stop recording
    73.     StopRecording();
    74.  
    75.     m_isRecording = false;
    76.   }
    77.  
    78.   IEnumerator RecordLoop()
    79.   {
    80.     while (true)
    81.     {
    82.       // Acquire an encoder frame from NatCorder
    83.       var frame = mediaRecorder.AcquireFrame();
    84.       // Blit the current camera preview frame to the encoder frame
    85.       Graphics.Blit(cameraTexture, frame);
    86.       // Commit the frame to NatCorder for encoding
    87.       mediaRecorder.CommitFrame(frame, recordingClock.Timestamp);
    88.       // Wait for the end of the application frame
    89.       yield return new WaitForEndOfFrame();
    90.     }
    91.   }
    92.  
    93.  
    94.   private void StartMicrophone()
    95.   {
    96.   #if !UNITY_WEBGL || UNITY_EDITOR // No `Microphone` API on WebGL :(
    97.     // Create a microphone clip
    98.     microphoneSource.clip = Microphone.Start(null, true, 60, 48000);
    99.     while (Microphone.GetPosition(null) <= 0) ;
    100.     // Play through audio source
    101.     microphoneSource.timeSamples = Microphone.GetPosition(null);
    102.     microphoneSource.loop = true;
    103.     microphoneSource.Play();
    104.   #endif
    105.   }
    106.  
    107.   public void StopRecording()
    108.   {
    109.     // Stop the recording inputs
    110.     if (recordMicrophone)
    111.     {
    112.       StopMicrophone();
    113.       audioInput.Dispose();
    114.     }
    115.     // Stop recording
    116.     mediaRecorder.Dispose();
    117.  
    118.     if(m_recordLoop != null)
    119.       StopCoroutine(m_recordLoop);
    120.   }
    121.  
    122.   private void StopMicrophone()
    123.   {
    124.   #if !UNITY_WEBGL || UNITY_EDITOR
    125.     Microphone.End(null);
    126.     microphoneSource.Stop();
    127.   #endif
    128.   }
    129.  
    130.   private void OnFinishRecording(string path)
    131.   {
    132.     Debug.Log("*********************************************** Saved recording to: " + path);
    133.   }
    134. }
    And to run it we are just calling:
    SampleRecorder.Instance.StartRecording();

    I've attached the catlog also. Hopefully it is useful to determine the issue.

    Any help is appreciated to steer us in the right direction.
     

    Attached Files:

    Last edited: May 29, 2019
  8. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    2,616
    When recording, what you'd be concerned about is GPU memory consumption, not system memory consumption. The Unity profiler doesn't reflect this.
    Are you recording microphone audio? If so, Unity's Microphone API is known to produce glitchy audio. This is why we created our own NatMic API.
    Are you able to reproduce this with the ReplayCam example? What device are you testing on? Logs indicate that you are still running out of memory, and that audio stops being committed after a while.
     
  9. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    2,616
    I'll need more information than this. What device? What Android OS? What is the resolution? Can you share the full logs?
     
  10. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    2,616
    Logs show your recording resolution is too high--not 480x640 that you have in your code.
     
  11. boxofgod8521

    boxofgod8521

    Joined:
    Oct 14, 2014
    Posts:
    13
    Hello!
    I have a problem,
    I use Natcorder record my video,
    And put for dropbox,
    Then use videoplayer play with url,
    It will happean error:
    Player having difficulty streaming video

    Do you have any idea?

    Thank you.
     
  12. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    2,616
    This isn't a NatCorder issue unfortunately. NatCorder has nothing to do with playback.
     
  13. Jason-RT-Bond

    Jason-RT-Bond

    Joined:
    Mar 26, 2012
    Posts:
    53
    In this test project (logs I attached) we are not recording from the microphone, although in the main project (where I first encountered the issue) we are. So I'll look into NatMic, but the mic is not the issue in the report above.

    Testing on a Pixel 3. And there are no textures or animations in the test project so if the GPU is running out of memory I cannot see why.

    I'll test the ReplayCam case in a bit!

    Thanks!
     
  14. Jason-RT-Bond

    Jason-RT-Bond

    Joined:
    Mar 26, 2012
    Posts:
    53
    And testing this again, after having updated Android a few days ago but with not changes to my project, suddenly the problem has vanished! Looks like it may have been a bug in a version of Android, then? Very strange.

    Thank you very much for all your timely responses to this issue. If it reoccurs I will let you know, but for the moment it seems to be doing fine.
     
    Lanre likes this.
  15. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    2,616
    That's weird, but sounds good.
     
  16. Aidan-Wolf

    Aidan-Wolf

    Joined:
    Jan 6, 2014
    Posts:
    50
    This is still an issue for both NatCorder and NatShare. The only thing I can think is your packages are colliding with Unity's Package Manager and/or the generated AndroidManifest.xml. FYI, it works perfectly on iOS.
     
  17. ptolemy_unity

    ptolemy_unity

    Joined:
    Oct 22, 2018
    Posts:
    2
    Hi @Lanre, thanks for this asset, has made our lives a good bit easier.
    Was wondering if you could take a look at the following bug, though.

    java.lang.Error: FATAL EXCEPTION [NatCorder Audio Encoding Thread]
    caused by: java.lang.IllegalStateException: Muxer is not initialized.

    We are using the whole suite of natcam/natcorder/natmic.
    We've been able to reproduce a hard crash error on a half-decent phone (Huawei P10 Lite (WAS-LX1) running android 7.0).

    I've attached a large logcat error below, from when the app starts to the crash. The crash begins at 06-03 15:21:37.113.

    Thanks for your time. We have also rolled out a limited release and will hopefully be able to get some more information on what devices this bug occurs.
     

    Attached Files:

  18. patcosmos310

    patcosmos310

    Joined:
    Jan 30, 2015
    Posts:
    5
    @Lanre video recording on Pixel 3XL + Android 9 causes the app to freeze. It throws the following error in the logs

    NatCorder: Video encoder changed output format: {max-bitrate=5909760, csd-1=java.nio.HeapByteBuffer[pos=0 lim=8 cap=8], color-transfer=3, mime=video/avc, width=660, bitrate=5909760, color-range=2, frame-rate=30, color-standard=2, height=1280, csd-0=java.nio.HeapByteBuffer[pos=0 lim=22 cap=22]}
    [B]06-04 06:23:54.128 27497 27513 E Unity : OPENGL NATIVE PLUG-IN ERROR: GL_INVALID_OPERATION: Operation illegal in current state[/B]

    I have attached the screenshot of the Unity project settings (Unity2018.3.8f1)
     

    Attached Files:

  19. michael_lightweave

    michael_lightweave

    Joined:
    Oct 29, 2016
    Posts:
    3
    Hi @Lanre! Loving NatCorder, such a great asset.

    I am investigating the feasibility of having a piece of functionality similar to how the Switch's screen capture works, where you can press a button and it saves the last 10s of video. Is it possible to have NatCorder recording but not committing to disk, and then once a certain event occurs, it commits the frames from 10s ago up until now to disk and starts recording?
     
  20. aobjects

    aobjects

    Joined:
    Jan 16, 2016
    Posts:
    9
    @Lanre, found a problem with trying to build Android App Bundles (.aab). Using NatCorder 1.3 (untested in 1.5), if you build an AAB and try to upload it to google play, you receive this error:
    After trying to create an apk using bundletool (https://github.com/google/bundletool) I received a message from the console:
    After looking around in the resulting apk I found a .bc file called "natcorder.bc". This seems to prevent any .aab from being uploaded to the google play store with NatCorder . I've tried a fresh project with mostly just NatCorder and receive the same error.
     
  21. Aidan-Wolf

    Aidan-Wolf

    Joined:
    Jan 6, 2014
    Posts:
    50
    On iOS, after two recordings, every recording after spawns this error:
    Code (CSharp):
    1. doodlecam[6276:2447395] NatCorder Error: Failed to record video frame for time 1265522333 due to invalid recorder state: 3
    Happens every session
     
  22. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    2,616
    It shouldn't have anything to do with Unity's package manager. Did you try reimporting the packages from the Asset Store?
     
  23. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    2,616
    What version of NatCorder are you using? I believe we've addressed this error in a more recent version of NatCorder. Email me with your invoice number and I'll share the 1.6.0 build with you.
     
  24. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    2,616
    Check out this post.
     
  25. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    2,616
    NatCorder doesn't support this type of recording. One workaround is manually trimming the video after recording.
     
  26. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    2,616
    The most recent builds of NatCorder don't have native code or bitcode. You should be all clear with NatCorder 1.5.1.
     
  27. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    2,616
    Can you upload the full logs from app start in a .txt file? What device and iOS version?
     
  28. LouisHong

    LouisHong

    Joined:
    Nov 11, 2014
    Posts:
    64
    NatCorder first recording on launch on the device causes a huge lag that messes up the recording. All recording after works fine. Is there a way to warm up NatCorder on launch?

    I'm using NatCorder 1.1, would upgrading fix this issue?
     
  29. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    2,616
    Unfortunately there is no way to pre-warm the codecs; this is not exposed to our code. You probably want to upgrade to the latest version of NatCorder though; 1.1 is really really old.
     
  30. Aidan-Wolf

    Aidan-Wolf

    Joined:
    Jan 6, 2014
    Posts:
    50
    This was purposefully truncated. The entire log is this line on loop.

    iPhone XS running iOS 12.2

    Code (CSharp):
    1. 2019-06-07 03:10:20.144353-0400 doodlecam[7020:2682119] NatCorder: Prepared video encoder at resolution 562x1218@30Hz with average bitrate 5909760 and keyframe interval 3s
    2. 2019-06-07 03:10:20.178179-0400 doodlecam[7020:2684070] NatCorder Error: Failed to record video frame for time 0 due to invalid recorder state: 3
     
    Last edited: Jun 7, 2019
  31. LouisHong

    LouisHong

    Joined:
    Nov 11, 2014
    Posts:
    64
    The lag is really significant and would warrant some attention. It messes up the first recording the user attempts.

    My idea of a work around currently is to start recording and stop immediately and delete the footage.

    Louis
     
    Lanre likes this.
  32. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    2,616
    So it's not clear why the encoding is failing (the docs don't really explain what could cause the failure). Can you try changing your resolution to a standard one (try 720x1280)?
     
  33. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    2,616
    NatCorder will soon support Android 21+.

    We've completed the NatCorder 1.6.0 update. In this update, we dropped the minimum required Android API level from API 23 to 21. NatCorder 1.6.0 requires Unity 2018.3+.
     
    Menion-Leah and edee1337 like this.
  34. Aidan-Wolf

    Aidan-Wolf

    Joined:
    Jan 6, 2014
    Posts:
    50
    Hi Lanre, figured it out. I had Minify toggled ON in my Player Settings by default, which for whatever reason removed Natcorder from the build. Thank you!!
     
  35. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    2,616
    I see. That's good to know.
     
  36. HEROTECH70

    HEROTECH70

    Joined:
    May 24, 2017
    Posts:
    24
    When is the newest version coming out, and did you fix the render texture leak on android?
     
  37. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    2,616
    We haven't decided yet. And the new version doesn't allocate RenderTextures (we removed the AcquireFrame method). You will now use a persistent RenderTexture (owned or created by you). You can always email me with your invoice number to get the update.
     
  38. HappyShip

    HappyShip

    Joined:
    Jun 15, 2017
    Posts:
    7
    Hi Lanre,
    I'm currently facing the same issue as this post here: https://forum.unity.com/threads/natcorder-video-recording-api.505146/page-30#post-4331509

    In your post just above you said the new version will use a RenderTexture that is entirely controlled by ourselves, I think it should be fairly easy to solve with this?
    If it's not, would you be able to send me an example of how to achieve this? (with a custom CameraInput and a shader to rotate the frame, I believe you replied to the post i referenced)

    EDIT: I've tried this so far, but it doesn't seem to work. Recording starts lagging tremendously, and the saved video is an entirely black screen. The material (rotateUV) has a shader on it to, well, rotate the uvs of the texture. In a test scene, this works fine.
    Code (CSharp):
    1. private void OnFrame()
    2.     {
    3.         // Check frame index
    4.         if (frameCount++ % recordEveryNthFrame != 0)
    5.             return;
    6.         // Acquire frame
    7.         var encoderFrame = mediaRecorder.AcquireFrame();
    8.  
    9.         switch (orientation)
    10.         {
    11.             case DeviceOrientation.Portrait:
    12.                 rotateUV.SetFloat("_Angle", 0f);
    13.                 break;
    14.             case DeviceOrientation.LandscapeLeft:
    15.                 rotateUV.SetFloat("_Angle", -1.55f);
    16.                 break;
    17.             case DeviceOrientation.LandscapeRight:
    18.                 rotateUV.SetFloat("_Angle", 1.55f);
    19.                 break;
    20.             default:
    21.                 break;
    22.         }
    23.  
    24.         RenderTexture newtex = null;
    25.         Graphics.Blit(encoderFrame, newtex, rotateUV);
    26.         rotateUV.SetTexture("_MainTex", newtex);
    27.  
    28.         // Render every camera
    29.         foreach (var camera in cameras)
    30.         {
    31.             var prevTarget = camera.targetTexture;
    32.             camera.targetTexture = newtex;
    33.             camera.Render();
    34.             camera.targetTexture = prevTarget;
    35.         }
    36.         // Commit frame              
    37.         mediaRecorder.CommitFrame(newtex, clock.Timestamp);
    38.     }
     
    Last edited: Jun 14, 2019
  39. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    2,616
    I'm not too sure what your code is doing. Your `newTex` variable is null but you're trying to blit to it then record from it? The next version of NatCorder will actually move to committing raw pixel buffers instead (byte[], Color32, int[], or anything else that holds an RGBA32 video frame in memory). As a result, users are given larger freedom to commit frames however is best suited for their application. There are significant performance and memory improvements with this new approach we're taking.
     
  40. HappyShip

    HappyShip

    Joined:
    Jun 15, 2017
    Posts:
    7
    It sounded logical to me to save the acquired frame to a new RenderTexture, apply the rotation shader and then save that frame as the one to use in the video... I don't know much about this kind of stuff, was praying this was going to work.
    Anyway, I still really need the functionality to record landscape video in a portait-locked AR app ASAP, anything you can help me with to achieve this?
     
  41. QQMatt

    QQMatt

    Joined:
    Sep 29, 2016
    Posts:
    10
    Hey, possibly I'm mistaken, but it seems like natcorder doesn't include 64-bit native code and just uses the 32-bit version when on a 64-bit CPU? If this is the case, do you plan to add 64-bit support as it's required by Google play store for 64-bit versions on August 1st?

    Also adding back 21+ support is awesome! Nice one.
     
  42. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    2,616
    When you acquire a frame, you're supposed to render into it. So it sounds like you want to render the camera view to a temporary render texture then blit the temporary texture to the NatCorder-acquired render texture, with the rotation shader.
    Familiarize yourself with Unity's RenderTextures and Graphics.Blit. If you're able to figure out how to do the portrait-to-landscape transformation in a RenderTexture, then recording with NatCorder is a minimal step.
     
  43. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    2,616
    NatCorder 1.5 (current AS version) and 1.6 (upcoming version) don't contain any native code. I believe the NatRender support library does have native code, but we compile for 32- and 64-bit (armv7 and armv8a).
     
  44. techartsmsm

    techartsmsm

    Joined:
    Jun 18, 2019
    Posts:
    26
    @Lanre - With the new ARKit3 I want to record not only what the iOS camera sees but also the segmentation mask (people occlusion). How would I go best about that? And also I need to time the recorded people occlusion mask perfectly to the recorded video of same person.
     
  45. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    2,616
    So I'm not sure that what you're asking is within the scope of anything I can recommend. NatCorder will record anything you commit to it in a RenderTexture; so it's entirely up to you to figure out how to get the camera view and segmentation mask into a RenderTexture to give to NatCorder. That being said, I have zero experience with ARKit so I can't be of much help on that.
     
  46. techartsmsm

    techartsmsm

    Joined:
    Jun 18, 2019
    Posts:
    26
    Thanks! But if I record two different rendertextures, how can I be sure they sync?
     
  47. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    2,616
    If you want to show both video and segmentation mask in the video (or better yet, in a single video frame), you have to figure out how to composite both into the same RenderTexture--then commit this single RenderTexture to NatCorder as a video frame.
     
  48. techartsmsm

    techartsmsm

    Joined:
    Jun 18, 2019
    Posts:
    26
    @Lanre okay so you're saying that I presume because if I would record two different rendertextures with two natcorder instances at the same time it's not guaranteed that they're in sync?
     
  49. Lanre

    Lanre

    Joined:
    Dec 26, 2013
    Posts:
    2,616
    Recording with two recorders will generate two separate videos; hence there isn't much of a concept of synchronization. You just have to figure out how to composite your two render textures into one texture and commit that to one recorder.
     
  50. techartsmsm

    techartsmsm

    Joined:
    Jun 18, 2019
    Posts:
    26
    Okay, cool, but eventually I can then record a video with transparency/alpha channel with NatCoder, right?