Video Frame Generation#
Video Frame Generation (VFG) is an AI-powered temporal interpolation filter
that synthesizes intermediate frames between two consecutive source frames.
The previous frame represents time t=0 and the current frame represents
time t=1. Each call to NvVFX_Run() produces one generated frame at a
requested temporal position strictly between the two inputs.
VFG does not perform spatial scaling. The previous frame, current frame, and generated frame must have the same dimensions and use the same encoding family.
Operating Modes#
VFG provides two mutually exclusive ways to select the temporal position of the generated frame:
Mode |
Configuration |
Generated Position |
|---|---|---|
Multiplier |
Set |
|
Explicit timestep |
Set |
|
For example, multiplier mode with M=4 requires three calls to
NvVFX_Run(), using frame indices 1, 2, and 3. The calls generate frames at
t=0.25, t=0.5, and t=0.75. VFG writes each result to the same
output buffer, so the application must consume or copy the result before the
next run.
Setting FrameMultiplier, including setting it to 0, resets FrameIndex
and Timestep. Set a new per-output selector before the next run.
Model Modes#
VFG provides the following model modes:
Value |
Mode |
Description |
|---|---|---|
0 |
Low |
Selects the lowest-complexity model. |
1 |
Medium |
Selects the balanced model. This is the default. |
2 |
High |
Selects the highest-complexity model. |
Set the model mode before calling NvVFX_Load(). Changing it after loading
the effect requires another call to NvVFX_Load().
Parameters#
VFG provides the following feature-specific parameters:
Parameter |
Type |
Default |
Description |
|---|---|---|---|
|
U32 |
1 |
Selects the Low (0), Medium (1), or High (2) model. |
|
U32 |
0 |
Selects explicit timestep mode (0) or multiplier mode (2-8). |
|
U32 |
Unset |
Selects an intermediate frame in the range 1 through |
|
F32 |
Unset |
Selects a temporal position in |
|
U32 |
0 |
Set to 1 when the two inputs cross a shot change or other discontinuity. VFG bypasses interpolation and copies the current frame to the output. The value persists until the application sets it to 0. |
|
U32 |
1 |
Enables (1) or disables (0) automatic shot-change detection. A manual shot-change value of 1 takes priority. |
Set NVVFX_CUDA_STREAM, NVVFX_INPUT_WIDTH,
NVVFX_INPUT_HEIGHT, and the model mode before calling
NvVFX_Load(). Only a batch size of 1 is supported.
Input and Output Requirements#
Bind the previous frame with NVVFX_INPUT_IMAGE_0, the current frame with
NVVFX_INPUT_IMAGE_1, and the generated frame with
NVVFX_OUTPUT_IMAGE.
VFG supports the following image encodings:
RGBA or BGRA interleaved images with 8-bit unsigned components.
RGB10A2 interleaved images packed in a 32-bit component.
All three images must use either the 8-bit encoding family or RGB10A2; mixing
the two families is not supported. The images can reside in CUDA device
memory (NVCV_CUDA or NVCV_GPU) or mapped pinned-host memory
(NVCV_CPU_PINNED).
Hardware Requirements#
VFG supports these platforms and GPUs:
Windows and Linux x86-64: NVIDIA Ada and Blackwell architecture GPUs.
Linux x86-64 additionally supports NVIDIA Hopper architecture GPUs.
Windows ARM64: NVIDIA RTX Spark.
Recommended Use Cases#
The following are typical use cases for VFG:
Increasing the frame rate of video for smoother playback or streaming.
Creating slow-motion video by generating intermediate frames while retaining the original playback frame rate.
Frame-rate conversion and video post-processing.