Recording

A recording is an output written to a file. You add one with the Recording group’s + (Settings ▸ Output: MP4 H.264, MOV ProRes or MKV) and edit it in its popover (click its row) or on Settings ▸ Output. See Outputs for the panel and the shared canvas and rate-control settings; this page covers the recording-specific settings.

Containers

The Container dropdown offers, in order:

  • Hybrid MP4 and Hybrid MOV — crash-safe: while recording, data is written as self-contained fragments to a <name>.part file, then remuxed to a normal progressive .mp4 / .mov (with the index moved to the front) when you stop.
  • MKV — Matroska, written progressively and crash-tolerant by design.
  • MP4 and MOV — plain progressive.

The default is Hybrid MOV on macOS and Hybrid MP4 on other platforms. (For what a .part file means after a crash, and how to recover it, see ../troubleshooting.md.)

Codec and encoders

The Codec dropdown picks what the recording encodes: H.264 (the default), HEVC or ProRes. It filters the Encoder dropdown beside it to the encoders that can produce that codec on this machine.

The Encoder dropdown is Auto or a specific family. For H.264, Auto picks the best available encoder for the platform — hardware first (VideoToolbox on macOS), then the software OpenH264 fallback. The software H.264 encoder (OpenH264) needs a one-time download from Cisco in Settings ▸ OpenH264; it is not included with the app. The Allow hardware encoders checkbox, when off, makes Auto skip hardware and use OpenH264. The Effective encoder line shows what will actually run when the recording starts (for example “Auto → HEVC (VideoToolbox)”).

HEVC

HEVC (H.265) recordings are hardware-only: the bundled FFmpeg is LGPL, so it has no software HEVC encoder (no x265). The encoder per platform:

Platform HEVC encoders Auto order
macOS hevc_videotoolbox VideoToolbox
Windows hevc_nvenc, hevc_amf, hevc_qsv NVENC, AMF, Quick Sync
Linux hevc_nvenc, hevc_vaapi, hevc_qsv NVENC, VA-API (Quick Sync only when chosen)
  • With HEVC selected, the Encoder dropdown lists Auto and the hardware families; a family whose HEVC encoder is missing or failed the startup probe is greyed out. OpenH264, x264 and the ProRes encoders are not offered, and a profile that pairs HEVC with one of them is rejected when it is loaded or saved (“the OpenH264 encoder cannot record HEVC…”).
  • If no HEVC encoder is usable (none on this machine, or Allow hardware encoders is off), the editor says so and the recording falls back to H.264 when it starts rather than failing. The status bar shows the path and the reason, for example “Recording to … — HEVC unavailable (hardware encoders off), recording H.264” or “… (no HEVC hardware encoder detected) …”.
  • HEVC goes into MP4, MOV (both hybrid and plain) and MKV. MP4 and MOV files are written with the hvc1 sample entry, which QuickTime, Photos and Safari need (FFmpeg’s default hev1 does not play there).
  • Recordings are 8-bit 4:2:0, Main profile. 10-bit (Main 10) and HDR tagging are not available yet.
  • The bitrate maximum is at least 240 Mbps and follows the HEVC level (High tier) for larger resolutions and frame rates: 240 Mbps for 1080p and 2160p (up to Level 5.2, 2160p120) and 4320p30 (Level 6.0), 480 Mbps for 4320p60 (Level 6.1) and 800 Mbps above that (Level 6.2). VideoToolbox (and Auto on a Mac) stops at 240 Mbps whatever the geometry: a much higher rate crashed a Mac. Hardware encoders in average-bitrate mode spend less on easy content: a 1080p30 VideoToolbox recording asked for 200 Mbps measured about 149 Mbps on full-frame noise and about 0.2 Mbps on the static test pattern.
  • HEVC records at an average bitrate (ABR or VBR): strict CBR is not offered for HEVC, and a profile that asks for it records as ABR.
  • A Same as stream HEVC recording always runs its own encoder; it never reuses an H.264 stream’s packets (see Recording and streaming together).

ProRes

Add a MOV ProRes recording (or pick a ProRes encoder) to record Apple ProRes: prores_videotoolbox on Apple hardware, the CPU prores_ks elsewhere. The ProRes profile dropdown offers 422 Proxy, 422 LT, 422 (the default), 422 HQ, 4444 and 4444 XQ. ProRes records into MOV (MKV is also selectable); it cannot go into an MP4 container.

ProRes is normally profile-driven: the profile sets the data rate. The editor shows an estimate such as “≈ 220 Mbps at 1920x1080 @ 30 fps”, computed from Apple’s published ProRes target data rates at 1920×1080 29.97 fps (422 Proxy 45, 422 LT 102, 422 147, 422 HQ 220, 4444 330, 4444 XQ 500 Mbps) and scaled by pixel count and frame rate. Apple’s white paper lists about four times these for 3840×2160 at 30p (4444 XQ 1989 Mbps), so 4K 4444 XQ above 30p needs more than the 2 Gbps bitrate cap.

With the Custom (manual) quality preset the two ProRes encoders behave differently:

  • prores_videotoolbox (hardware) takes no bitrate at all; it follows its profile only. The Bitrate field is shown greyed out with the estimate, and you pick the ProRes profile instead. For a manual data rate choose ProRes (prores_ks) in Encoder.
  • prores_ks (software) has a Data rate picker: Profile default (the profile’s own rate) or Manual bitrate. Choosing Manual bitrate switches Quality to Custom (manual) and shows the field. With a manual bitrate the encoder spends up to that many bits: the bitrate is turned into prores_ks’s per-macroblock budget (bits_per_mb = bitrate ÷ frame rate ÷ number of 16×16 macroblocks). That option accepts 128 to 8192 bits per macroblock, so the reachable range depends on the canvas; the editor prints it (about 31 Mbps to 2 Gbps at 1080p30). Detailed content lands at the requested rate (measured: 500 Mbps requested at 1080p29.97 wrote 499 Mbps; 2 Gbps at 2160p29.97 wrote 1.99 Gbps); easy content comes in lower, since the budget is a ceiling.

A ProRes recording made before this option existed stays profile-driven: the manual bitrate only applies once you choose Manual bitrate.

Quality presets

The Quality dropdown:

  • Same as stream — reuse the streaming encoder settings, with strict CBR relaxed to ABR so the file is not padded.
  • High quality, medium file — a high-quality constant-quality tier. The exact value is encoder-dependent (for example x264/QSV use CRF/CQP 23, NVENC/AMF/VAAPI use 20, and VideoToolbox uses its own quality scale).
  • Indistinguishable, large file — a visually-lossless constant-quality tier (x264/QSV/NVENC/AMF/VAAPI around CRF/CQP 16; VideoToolbox higher on its own scale).
  • Lossless — mathematically lossless (UT Video + PCM in MKV).
  • Custom (manual) — set the recording’s own Rate control, Bitrate and Quality value directly. This is the only preset where you edit the rate control, and the place to request an explicit (padded) CBR recording. Every H.264 encoder offers at least one bitrate-driven mode (CBR, ABR or VBR); ProRes is covered above.

Video bitrate

The Bitrate field is stored in kbps but shows Mbps from 1000 kbps up (6000 kbps reads “6 Mbps”). You can type a value with a unit (500 Mbps, 500m, 2 Gbps, 6000 kbps); a bare number is read in the unit on screen. The field goes up to the maximum for the codec the effective encoder produces, shown under it as “max N Mbps for <codec>”:

Codec Maximum Basis
H.264 / AVC (x264, OpenH264, VideoToolbox, NVENC, AMF, QSV, VA-API) 960 Mbps H.264 Level 6.2
H.265 / HEVC (streams) 800 Mbps (240 Mbps on VideoToolbox) HEVC Level 6.2 High tier; VideoToolbox stops at its 240 Mbps ceiling
H.265 / HEVC (recordings) 240 Mbps up to 2160p, then by HEVC level up to 800 Mbps; 240 Mbps on VideoToolbox HEVC level High tier, 240 Mbps floor (see HEVC)
AV1 (streams, no encoder in this build yet) 800 Mbps AV1 level 6.3 High tier
Apple ProRes 2000 Mbps (2 Gbps) ProRes 4444 XQ at 2160p29.97

Changing the encoder to one whose codec has a lower maximum (for example ProRes to H.264) lowers a larger bitrate to the new maximum and says so under the field (“Bitrate clamped to 960 Mbps, the H.264 maximum.”). A profile saved by an older build with an H.264 bitrate above 960 Mbps loads at 960 Mbps. Builds before these caps reject any bitrate above 1000 Mbps, so the first time a profile with such a bitrate is saved, the previous file is kept once as profile.toml.pre-2gbps.bak beside it. Recordings encode H.264, HEVC (hardware encoders only, see HEVC) or ProRes.

Audio for a recording defaults to AAC 192 kbps (streaming defaults to 160 kbps).

Audio tracks (multi-track recording)

The mixer maintains six independent track buses (matching OBS’s six recording tracks). A recording can record any combination of them, each written as its own AAC audio stream in the file, so you can, for example, keep the game, the microphone and the full mix on separate tracks for editing later.

In the recording editor, the Tracks section shows six checkboxes (Track 1 … Track 6). Tick the tracks to record; each selected track shows a per-track bitrate control (kbps) beside it, defaulting to the recording’s audio bitrate above. At least one track must be selected. The tracks are written in ascending order and titled Track 1, Track 2, … so players show sensible names (the title round-trips in MKV; MOV/MP4 carry the streams but may not surface the title on every player).

Which containers carry all tracks: MKV, MOV and MP4 all record every selected track (multiple AAC streams in MP4 are valid and are written and read back correctly). A ProRes recording follows its single-track audio path.

By default a recording records track 1 only, so existing profiles behave exactly as before.

Note on what each track contains today. Which mixer track a given source feeds is controlled by that source’s per-source track routing, whose UI (the A5.7 routing matrix) is not yet available. Until it lands, every source defaults to feeding all six tracks, so selecting several tracks records the same mix on each unless the routing is changed through the engine API. Per-track bitrates and the file layout (separate, titled streams) work today regardless.

What a track records: program mix or chosen inputs

Each selected track has an audio picker beside its bitrate:

  • Program mix (the default) records that track’s mix: every input routed to the track, gated by which scenes are on Program, through the master.
  • Only these inputs records the sum of just the inputs you tick (for example the camera’s microphone alone, or an RTMP guest’s audio). Each input contributes its signal after its own filters, fader, mute and pan, whatever scene is on Program and whatever its track routing or monitor mode says; the sum is soft-limited and scaled by the master like a track. Ticking none records silence.

Inputs are matched by their mixer strip name and kind when the recording starts; an input that is not there at start records silence for that track (it is not picked up later in the same recording). A recording with any per-input track always runs its own encoder (it never shares one).

Video source: record Program, Portrait or one input

The recording editor’s Video source picker chooses what the recording encodes:

  • Program canvas (the default): the composited scene, as before.
  • Portrait canvas: the vertical canvas, laid out from each scene’s portrait layout (created while the recording runs, like any portrait output), encoded at this output’s canvas turned portrait.
  • One input: any input a scene declares — a display or window capture, a camera or capture card, an NDI or other interchange receiver, a media file, an RTMP ingest key, the test pattern (and Game Capture once it arrives, as a window-like source) — recorded on its own: no scene layout, transforms, crops or other layers. Pick Recorded size:
    • Native size (the default): the input’s own pixel size when the recording starts, scaled down to fit 4096 pixels a side if larger (a 5K display) and rounded to even numbers. Nothing is scaled otherwise.
    • Output canvas (fit) / Output canvas (fill): this output’s canvas size, with the input letterboxed or cropped to fill.

While a single-input recording runs, its row shows ⏺ <input>. The input keeps running for as long as the recording uses it — even if you switch scenes, or remove its layer from every scene — and is released when the recording stops (unless a scene still shows it).

The recording remembers the input by its source id, and for a camera also by its model and name, so a USB camera that comes back on a different port is found again, exactly as scene layers relink. If the input is in no scene when you start (or it is missing), the recording still starts: it records black and silence, its row reads Waiting for <input>, and it picks the input up as soon as a scene adds it. At Native size such a recording uses the output’s canvas size, since the input’s size is not known. (Starting anyway rather than refusing was chosen so Start all never fails because one camera is unplugged; the file shows exactly when the input arrived.)

Several recordings can run at once with different sources — for example Program, a clean camera ISO and the game capture — each on its own encoder. Recording one input costs one extra small render and readback per frame on the GPU, at the input’s size.

Folder and filename template

  • Choose folder… sets where files are written. When left empty, the OS default is used: ~/Movies/stream-concern on macOS, ~/Videos/stream-concern on other platforms.
  • The filename template defaults to the OBS-style %CCYY-%MM-%DD %hh-%mm-%ss (year, month, day, hour, minute, second).

Filename tokens (hover the template field for the list):

Token Meaning
%CCYY / %YY year, 4 or 2 digits
%MM / %DD month / day
%hh / %mm / %ss / %mss hour (24h) / minute / second / millisecond
%FPS frame rate
%CRES / %ORES canvas / output resolution, WxH
%VF file extension
%source what is recorded: Program, Portrait or the input’s name (characters a filename cannot hold become _)
%% a literal %

%Y %m %d %H %M %S are accepted as aliases; any other %x is kept literally and the editor warns about it. With several recordings writing to one folder, put %source in the template so the files are distinguishable, for example %CCYY-%MM-%DD %hh-%mm-%ss %source.

A recording lands at <folder>/<expanded template>.<ext>, where the extension follows the container (mp4, mov or mkv). While a hybrid recording is in progress the working file is <name>.part.

Split policy

The Split dropdown controls whether a long recording is broken into several files:

  • No splitting (the default).
  • Every N minutes — new file every N minutes (OBS’s default when splitting is on is 15 minutes).
  • Every N MB — new file every N megabytes (OBS’s default is 2048 MB; minimum 10 MB).

The status bar shows the current split part number while a split recording runs.

Where files land, and A/V sync

Files are written under the configured folder (above). Recording runs on a worker thread with file I/O through tokio, and a disk-space check stops a recording that would run the disk too low.

Audio and video stay in sync: a media file’s audio is placed on the mixer bus by timestamp (silence inserted for gaps, overlaps trimmed), and the file source keeps its audio at most ~300 ms ahead of the presented video. The automated flash-and-beep test measures the recorded A/V offset at about 0.8 ms on the software encoder and 16 ms on VideoToolbox — well within a frame.

Recording and streaming together

When a recording’s quality is Same as stream, the recording and the stream can share one encoder: the stream encodes once and the same encoded packets are muxed into the file, so the recording is byte-identical to what is published (no second encode). This applies to H.264 recordings: a recording whose codec is HEVC keeps its own encoder even when its quality is Same as stream. The top-level README.md describes how this sharing engages and what stopping each output does.