Skip to content

Video Decoding ​

Which codec you deliver in decides how much of the machine each clip costs. This page explains how Exaplay decodes each format, what that means for a show with many or very large layers, and how to read the Diagnostics panel when playback struggles.

The short version ​

HAP is the performance recommendation. HAP frames are stored as GPU-native compressed textures: the CPU only unpacks them and the graphics card draws them directly. It is the lightest way to play video — lightest per layer, and the most predictable when you scrub, seek or loop. You pay for it with much bigger files and the storage bandwidth to read them.

H.264 and H.265 are compact, but need more decoding resources. They are decoded by the graphics card's video decoder, which works well for a few ordinary streams. It gets harder with huge files (very high resolution or bit rate) and with many layers playing at once, because all of them share that one decoder.

HAP familyH.264 / H.265 (4:2:0)
DecodingGPU draws the compressed texture; CPU only unpacksGPU video decoder, shared by all layers
File sizeLarge (several times H.264)Small
Many layers / very large framesScales with storage speedGets harder quickly
Seek, scrub, short loopsEvery frame stands alone — lightLong-GOP — heavier
TransparencyHAP AlphaNo

Use HAP for the heavy parts of a show — large canvases, many simultaneous layers, loops and scrubbing — and H.264/H.265 where file size matters more and the load is moderate.

How Exaplay picks a decoder ​

The decoder is chosen automatically when a clip loads, from the file's codec and format:

FileDecoderWhere the work happens
HAP, HAP Q, HAP Alpha, HAP R (in .mov)HAP decoderGPU. The CPU only unpacks the frame, spread over several cores when the file has several chunks (see Chunks).
NotchLC (in .mov)NotchLC decoderGPU
H.264 / H.265, 8-bit 4:2:0, and H.265 Main10 4:2:0Built-in hardware decoderGPU video decoder. Frames stay on the GPU all the way to the Output.
H.264 / H.265, 8-bit 4:4:4Built-in software decoderCPU, all cores
H.264 / H.265, 4:4:4 above 8-bit—Not played: the clip is blocked with a message. Transcode it.
Everything else — ProRes, DNxHD, H.264 High 10, 4:2:2 materialCompatibility decoderGPU where the driver supports the format, otherwise CPU. This decoder outputs no transparency.
PNG, JPEGStill-image loaderLoaded once
TIFF, BMP, GIF, WebPConverted once to an 8-bit PNGLoaded once (first frame only)

Notes:

  • Fallbacks are automatic. If the hardware decoder cannot open an H.264/H.265 file, the same built-in decoder reopens it on the CPU — it does not leave for the compatibility decoder (only HEVC Main10, which has no CPU decoder in the engine, still does). If the hardware decoder opens a file but delivers no frame within about 3 seconds, the clip is reopened in software (8-bit) — the Diagnostics panel shows this as HW→SW.
  • Size limits are the decoder's, not Exaplay's. NVIDIA decodes H.264 up to 4096 × 4096 on every generation; HEVC and AV1 go to 8192 × 8192. A wider H.264 file (an 8192 × 1878 panorama) therefore plays on the CPU on any NVIDIA card — the clip's badge says so and names the ceiling. Encode such content as HEVC or HAP.
  • NVIDIA NVDEC and Intel QuickSync are picked automatically: the engine decodes on the GPU that drives the outputs when it can, otherwise on the strongest GPU that can, otherwise on the CPU (see What each machine's GPU decodes). A clip's Acceleration can still pin one of them. The compatibility decoder keeps its own older rules: NVDEC only on request, QuickSync only when asked for.
  • HDR (PQ / HLG, H.265 Main10) is tone-mapped to SDR by default.
  • Colour is interpreted as BT.709 unless Color from stream metadata is on (see Settings).
  • Stills: the converted PNG of a TIFF/BMP/GIF/WebP is cached in a .ep folder next to the source file, so the conversion happens only once. The largest supported image is 32768 pixels per side. PSD files are not supported, and image sequences do not play as a clip — export them as a single video file (ideally HAP).

The HAP family ​

VariantContentsSize (bits per pixel)Use for
HAPRGB4Most content — smallest and fastest HAP
HAP QRGB, higher quality8Gradients, fine detail, text
HAP AlphaRGBA8Content with transparency
HAP RRGB(A), high quality8High-quality masters

Data rate — plan storage for it. As a guideline (HAP's data rate is a property of the format, independent of the picture):

ContentPer frameAt 60 fps
4K (3840 × 2160) HAP≈ 4.1 MB≈ 250 MB/s
4K HAP Q or HAP Alpha≈ 8.3 MB≈ 500 MB/s

Several such layers add up: use an NVMe SSD and add the rates of everything that plays at the same time.

Transparency

For transparency use HAP Alpha or NotchLC. HAP Q Alpha and ProRes 4444 currently play without their transparency.

Chunks ​

A HAP file is split into chunks when it is encoded. Exaplay unpacks the chunks of a frame in parallel on several CPU cores; a file encoded with a single chunk is unpacked on one core, which can become the limit for large frames. The clip's Media Info in the Inspector lists the chunk count, and Check Project warns about single-chunk HAP at 1920 × 1080 and above.

Encoding HAP ​

Walkthrough

☰ menu → Walkthroughs → Media, effects & generators → Converting a video to HAP finds a heavy file with Check Project, encodes it to HAP Q and swaps it into its clip.

With Exaplay: in the File Browser, right-click a video file and choose Encode → HAP (smallest, fastest), HAP Q (best quality) or HAP Alpha (with transparency). It accepts .mp4, .mov, .avi, .mkv and .webm and writes name.hap.mov, name.hapq.mov or name.hapalpha.mov next to the source. The encoder always uses 8 chunks, pads the frame to a multiple of 4 (transparently for HAP Alpha) and copies the audio.

With other tools: always write a .mov, keep width and height multiples of 4, and use more than one chunk. For example, with FFmpeg:

bash
ffmpeg -i input.mov -c:v hap -format hap_q -chunks 8 -c:a copy output.mov

Use -format hap for HAP and -format hap_alpha for HAP Alpha.

H.264 and H.265 ​

What to keep in mind:

  • One video decoder per graphics card, shared by every H.264/H.265 layer. Many layers, or a few very large ones, compete for it.
  • Long-GOP. Most frames depend on others, so seeking, scrubbing and short loops cost more than with HAP.
  • Very high bit rates (above roughly 120 Mbit/s — typical of camera masters) are flagged by Check Project.
  • 4:2:2, 12-bit and 10-bit H.264 decode on the GPU only where that machine's graphics card can — newer cards decode some of them, older ones do not. Exaplay asks each card (see What each machine's GPU decodes).
  • 4:4:4 always plays on Exaplay's own software decoder — even on a card that could decode it — and above 8-bit it is blocked (see the table above).
  • A clip on the compatibility decoder logs a warning — but still decodes on the GPU — for H.264 above level 5.2, H.265 above level 6.2, and files with more than 6 reference frames or more than 6 consecutive B-frames; the built-in decoder only flags what it cannot play.

Encoding guidelines for H.264/H.265 you want to play smoothly (guidelines, not hard limits):

SettingGuideline
ProfileH.264 High or H.265 Main / Main10, 4:2:0
LevelH.264 up to 5.2, H.265 up to 6.2 — higher levels trigger a warning
B-framesNone, or few
Keyframe interval1–2 s — faster seeking and loop points
Bit rateCBR or capped VBR, well under 120 Mbit/s
SizeEven width and height

What each machine's GPU decodes ​

Which formats a graphics card decodes in hardware depends on the card and its driver. Exaplay does not guess: when it starts, it asks the machine's GPU which codecs, chroma formats, bit depths and frame sizes it decodes, and uses that answer wherever a decode is predicted.

  • See it: Network → select a machine → GPU & video decoding → Hardware decoders lists what that machine's decoding GPU takes, for example H.264 4:2:0 8-bit · HEVC 4:2:0 up to 10-bit, the largest frame size and the decoding interface. Hover the ⓘ sign for every graphics card in the machine. Not probed yet means Exaplay is still asking; Probe switched off means the question was disabled on that machine.
  • Media Browser: the NVDEC / QSV / AMD / GPU / CPU badge on a video tile is this machine's answer for that file. Hovering the badge or the file's name shows the same table as in the Playlist and the Timeline — type, video, decoder, the reason and the size; a decoder that is only predicted from the file says so. A file your show already plays carries its clip's badge at once, and its table is the clip's.
  • Check Project asks every machine of the show and names the machine where a file would be decoded in software — see Check Project.
  • 4:4:4 H.264/H.265 keeps playing on Exaplay's software decoder even where the GPU could decode it.

ProRes and other formats ​

ProRes 422, 422 HQ, LT and Proxy play through the compatibility decoder, mostly on the CPU. As a guideline they are fine up to about 4K30 per clip. ProRes 4444, 4444 XQ and ProRes RAW are flagged by Check Project as demanding, and their alpha channel is not kept. For heavy use, transcode to HAP.

Audio in video files ​

Every video decoder — HAP included — plays the file's first audio stream, resampled to the engine's audio rate. Exaplay's built-in HAP encoder copies the audio into the HAP file. See Audio.

Keeping the load down ​

Exaplay only decodes what the show needs:

  • Timeline clips open about 3 seconds before the playhead reaches them and are released about 2 seconds after they end (lazy start, on by default) — no manual pre-loading is needed.
  • Hidden clips stop decoding at once. Switching off a clip, track, group or composition stops its decoding and upload immediately; showing it again re-buffers briefly. This does not apply to the global Blank, to a stopped composition, to a clip that is still audible, or to live sources.
  • Trimmed clips decode only the region between In and Out.
  • Buffer size (Inspector) is 0.25 s by default (1 s for audio-only files), adjustable from 0 to 3 s.

Settings ​

Settings → Decode & GPU:

SettingOptionsNotes
Video decodingAutomatic (GPU, default) / Software (CPU)Automatic decodes each file on the GPU that draws the picture when it can, else on the strongest GPU that can, else on the CPU. The clip's badge shows which: NVDEC, QSV or CPU.
Decode GPUAutomatic (default) / one of the GPUs in this machinePicks the GPU that decodes every clip whose Acceleration names no GPU. On a GPU other than the one that draws the picture, each frame is copied across. A GPU that cannot decode a file leaves that file to Automatic. Two identical cards appear as Name and Name #2. Applies to clips as they load; clips on the compatibility decoder pick it up at the next engine start.
Default decoder engineAutomatic (default) / Medialooks (compatibility)Medialooks plays every H.264/H.265 file except 4:4:4 on the compatibility decoder, as Exaplay 3.3 did — for comparing, or for a machine where the built-in decoder misbehaves. A clip's own Force engine wins. Applies to clips as they load.
Color from stream metadataOn (default) / OffUses each file's own colour information instead of assuming BT.709.
HDR tone-mapping (10-bit)On (default) / OffTone-maps HDR (PQ / HLG) 10-bit HEVC to SDR on the GPU.
Vertical syncOn (default) / OffOn, the outputs' refresh paces the picture. Switch off when the outputs run at different refresh rates (a 30 Hz wall beside 60 Hz projectors): one sync can follow only one of them and the others drop or repeat frames. Off, the engine paces its own clock at the Frame rate below. Applies at once; nothing to set in the NVIDIA control panel.
Frame rate0 (default) / 10 to 240Shown while Vertical sync is off: the frames per second the engine paces itself to — the rate of the slowest output. 0 follows the main display's refresh rate.

Below Video decoding, Chosen on this machine shows what Automatic picked on this computer: the GPU Exaplay renders on, and for each common format (H.264, HEVC, HEVC 10-bit, 4:4:4) which decoder and which GPU play it — for example GPU: Intel Iris Xe (QSV) · copied to the output GPU on a laptop whose output GPU has no video decoder. Hover a line to read why. Nothing to set here; it is read from the engine each time the tab opens.

Per clip, Inspector → Decoder:

  • Acceleration — Default / Hardware / Software / NVIDIA GPU (NVDEC) / Intel GPU (QuickSync). The last two pick which GPU decodes the clip. On the built-in decoder the change applies live.
  • Force engine (advanced) — Automatic (Settings), Built-in (FFmpeg) or Medialooks (compatibility); applies on the next load. Automatic follows Default decoder engine in Settings; the other two override it for this clip. ProRes, DNxHD, 10-bit H.264, 4:2:2 and other formats the built-in decoder does not take go to the compatibility decoder by themselves.

Reading the Diagnostics panel ​

The Media section of the Performance Diagnostics panel shows one row per active clip:

  • the decoder in use and the resolution;
  • effective / nominal fps — shown in amber when the clip delivers less than 90 % of its frame rate;
  • HW→SW — the clip fell back from hardware to software decoding;
  • ⚠ n — decode failures or empty frames;
  • EOF n/m — reads that hit the end of the file inside the decode window.

Hover a row for details: the requested decoder, warnings and how often the decoder had to repeat a frame. In the Playlist, each video row carries a decoder badge — NVDEC, QSV, AMD, GPU, CPU or 4:4:4; in the Media Browser, In Project and the Inspector's Decoder card the same badge is the machine's own answer for the file. Hovering it — or, in the Timeline, hovering a clip's name — shows one table everywhere: Video, Decoder, Decoding GPU, and while the clip plays its frame rate and any fallback.

The result is saved with the project. Which decoder decoded a clip is stored in the show file, so after opening the project the badges show it straight away. It is determined again only when something it depends on changed: the graphics cards or their driver, the machine's decoding settings, the clip's own decoder setting, or the file itself. An outlined badge is a prediction that has not been confirmed yet; it turns solid once the clip has decoded a frame.

In the GPU section, Video Decode is busy while clips decode in hardware, and Copy stays near zero when frames stay on the GPU. High CPU with Video Decode near 0 % means clips are being decoded in software.

Exaplay 3 User Documentation