Using Movie Render Queue in Runtime Builds

How to use Movie Render Queue in a distributed build to create movies on end-users' devices

Windows
MacOS
Linux

In Unreal Engine 4.26 and later, you can use Movie Render Queue to render movies in runtime builds and output files to a user's computer using Blueprints. This is useful for rendering high-quality video from specific target hardware.

Workflow

You can access the Movie Render Queue in Blueprint using the Movie Pipeline Queue Engine Subsystem node.

MRQSubsystemNode.png

This subsystem features a Queue which contains a list of rendering Jobs. Each job can contain one or more shots, and each job also has its own configuration, which contains the settings used to render its shots. To render a video, you need to build a list of jobs, allocate them to the queue, then call the Movie Render Queue subsystem's Executor to process the queue.

Steps

To render a Sequencer movie at runtime, your application must perform the following steps:

  1. Create a Movie Pipeline Queue Engine Subsystem node. Click and drag from its output pin, then create a Get Queue node to obtain a reference to its Queue.

    EngineSubsystemRef.png

  2. Click and drag from the Return Value of the Get Queue node, then call Allocate New Job. This will add a job to the queue.

    AllocateNewJob.png

  3. Click and drag from the Return Value for your Allocate New Job node to get a reference to the job. Call Set Sequence and give it the soft object path for the level sequence you want to play, then call Set Map and give it the soft object path for the level where your sequence is located. The Movie Render Queue will load the designated map and start the designated sequence once this job starts.

    SetSequenceAndMap.png

  4. Click and drag from the Return Value of Allocate New Job again, then call Get Configuration to get a reference to the settings for your job.

    GetConfig.png

  5. Click and drag from the Return Value of Get Configuration, then call Find or Add Setting by Class to add a new setting. Click the dropdown for the In Class input to select which setting you want to change. You can edit the properties of these settings by clicking and dragging from the Return Value for the Find or Add Setting by Class node.

    CreateSettings.png

    Some Movie Render Queue settings depend on editor-only functionality and are not available for use in runtime builds. Refer to the Limitations section below for more information.

  6. Repeat steps 2 through 5 as needed for each job you want to allocate.

  7. When you have finished, get a reference to the Movie Pipeline Queue Engine Subsystem, then call Render Queue with Executor. Set the In Executor Type to MoviePipelineInProcessExecutor. This node will tell the Executor to process the queue you have built within the Movie Pipeline Queue subsystem and return a reference to the Executor.

    RenderQueueWithExecutor.png

    The MoviePipelineInProcessExecutor is the Executor class specifically used for runtime builds of your application. The other Executor classes are used in different cases, like during Play In Editor.

  8. To call events when your Executor finishes processing the queue, click and drag from the Return Value pin on Render Queue with Executor, then call Bind Event to On Executor Finished Delegate. You can then connect an Event to this node to run it after the queue ends.

    BindEventOnRenderFinish.png

Cancelling Jobs

You can call Cancel Current Job from your Executor to cancel the job that your Executor is currently running and move on to the next one. Calling Cancel All Jobs will cancel all jobs in your queue.

CancelingJobs.png

Customizing the Executor

Executors have settings that you can change to control how they will process your queue.

You can manually construct an Executor using the Construct Object node. Select Movie Pipeline In Process Executor as your Class, then connect a reference to the Movie Pipeline Queue Engine Subsystem as the Outer for the new Executor Instance you are creating.

ConstructExecutor.png

You can use the Return Value from this node to edit the settings of your newly constructed Executor or bind events to delegates. When you are finished, call Render Queue With Executor Instance instead of Render Queue With Executor, then connect your Executor to the In Executor pin.

ChangeExecutorSettings.png

If you want to run a sequence in the currently-loaded level without reloading it, set the Executor's Use Current Level variable to True. This will ensure that you keep any changes that have happened during play instead of restarting the level from scratch.

UseCurrentLevel.png

Changing the Debug Widget

The Debug Widget is the UI Widget that displays the preview frames of your movie while it renders. You can change your Debug Widget by setting the Debug Widget Class from the Executor.

SetDebugWidgetClass.png

Setting this value to None will use the default debug widget. You can create your own custom debug widget by creating a Widget Blueprint, then setting its Parent Class to MovieRenderDebugWidget.

MovieRenderParentClass.png

You can then select this custom widget as your Debug Widget Class for your Executor.

UsingCustomDebugWidget.png

Limitations

Some settings are unavailable in runtime builds, as they depend on editor-specific functionality. These include:

+ The FinalCut Pro XML output format
+ Object ID render passes
Help shape the future of Unreal Engine documentation! Tell us how we're doing so we can serve you better.
Take our survey
Dismiss