If you want to be really hardcore like I am, you can record the transforms for the HMD and motion controllers every frame and their associated time stamps.
Put these into a custom struct, and then store an array of these structs.
Save these to a Savegame file so that you can load them again later.
Then, create a way for your app to read in these values and set the pawn head and hand transforms for each frame. After each frame, you want to take a high resolution screenshot. Note that the screenshot can be from any camera perspective, not just the first person camera! You’ll create a large sequence of these screenshots and it may take a while to render them all to disk.
Once you’ve got your series of screenshots, you’ll want to use FFMPEG to stitch the screenshots together to create a MP4 video. You can do any image or video editing you’d like here.
Note 1: this method takes quite a bit of effort to setup, but can give you the highest quality results at any resolution you want and it can also be framerate independent.
Note 2: I recommend a 5-10 second warm up delay before doing recording. The gameplay may begin while the level is still streaming in assets, so you’d see popping.