Repository navigation
OBS mode holds 120 fps at 1440p, with an OBS Quality setting for size against picture (#1060) - #1066
Conversation
…lity choice (#1060) Simple mode's NVENC setup (P5, two-pass, lookahead, B-frames) can't keep up with 120 fps at 1440p. Studio now puts its own profile in Advanced mode and writes recordEncoder.json itself (P4, single pass, no lookahead, no B-frames, constant QP), found through a marker written over obs-websocket. Simple mode stays for non-NVENC encoders, OBS before 31, or a profile folder it can't find. A new OBS Quality setting picks Small/Standard/High/Max or OBS's own. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ladder, hook cost Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Merged dev in, and a live test on POST: passesMerge (740359a): one conflict, Live test (POST-Anniversary, Brain account under
Still open from the PR's "Needs the user": whether VEGAS 21 opens the Max (4:4:4) files. |
|
VEGAS Pro 21 check: the user opened the Max (4:4:4) take |
Release note: Fixed: OBS mode keeps up with 120 fps at 1440p instead of dropping frames, and a new OBS Quality setting trades file size for picture quality.
Closes #1060
What changes
[DoD-Studio]OBS profile now records in OBS's Advanced output mode on NVIDIA cards (OBS 31+), with NVENC H.264 preset P4, single pass, no lookahead, no B-frames, constant QP. Simple mode's fixed setup (P5, two-pass, lookahead 8, 2 B-frames) used the whole encoder at 1440p120 and dropped 32-95% of frames in five runs (OBS capture records the game's sound behind other windows, at full quality, in sync and smoother (part of #645) #1058's testing).recordEncoder.json, so Studio writes it itself (native/src/obs/encoder.rs). It finds the profile folder by writing a fresh marker intobasic.iniover obs-websocket (which saves at once) and looking for it under%APPDATA%\obs-studioand a portable OBS'sconfig\obs-studio. The existing profile round trip then makes OBS read it.docs/obs_alternate_capture.mdhas every number below.Test done
All on POST, Brain account via game_lock, OBS 33.0.0, RTX 3070 Ti, 2560x1440, OBS Capture FPS 120. My own Studio build of this branch with its own settings copy (the user's
settings.jsonhash unchanged: 67e8b2b8). Three clips (m00cat BAR multi-kills,wsod25_grp5_h1_m00catx2,wsod25_grp2_h2_m00cat), game behind windows unless noted. Numbers from OBS's own log ("skipped frames due to encoding lag", "lagged frames due to rendering lag") and nvidia-smi.Every take ran 119.9-120.0 fps start to end. OBS's log confirmed the settings it used (
preset: p4,multipass: disabled,b-frames: 0,lookahead: false), and the switch from Simple to Advanced happened live on first connect.Quality (offline, ffmpeg on the same NVENC, 720 frames of an HLAE lossless 1440p take at 120 fps, converted as OBS converts):
4:2:0 caps RGB PSNR near 38.5 dB at any QP: red kill-feed names lose saturation in every 4:2:0 choice, only Max matches HLAE's. HEVC gave the same size at the same quality, slightly slower, so every choice is H.264. No AV1 encoder on a 3070 Ti.
Front vs behind: identical (0 skipped, NVENC 57%, same sizes).
Does the hook DLL cost OBS anything? POV demo
ktps8w8-stealth_ih_saints_h1_p3, game in front, launched as (a) HLAE + hook, (b) HLAE only, (c) plain hl.exe:timedemouncapped, avg fps (whole demo)ds_hd_enabled 0ds_sound_restore_gunshots 0/ds_hud_show_scope 0fps_max240, 60 s: skipped / missedfps_max1000, 60 s: skipped / missedThe game is CPU-bound near 238 fps at 1440p here. The hook costs ~2.5% of uncapped frame rate (~0.1 ms/frame), all of it HD textures; it is not a cause of OBS drops. No frame-time 1% low: PresentMon needs admin (ETW).
Other leads checked: OBS Game Capture uses
gl shared texturefor hl.exe (with and without HLAE), not the slow shmem path.fps_max120 vs 240: GPU 3D 29% vs 40%, no difference to OBS. OBS as admin / process priority / Game Capture frame-rate limit not tested: there was no rendering lag left to fix. Windows Game Mode is off; HAGS at the driver default (noHwSchModevalue).Unit/CI checks:
cargo test -p native -p desktop-studio(native 833 pass, studio 239), clippy 1.98.1 workspace-D warnings, fmt 1.98.1,npm run test:unit914 pass, Playwright e2e 407 pass. New tests usefake_obs.rs: Advanced mode + encoder file written to our profile folder only, round trip happens, no folder found keeps Simple mode, "OBS's own" switches back.Decisions
Needs the user
local\review-images\obs-encoder\live\clip_b1_11s_2s_{standard,high,max444}.mp4; stills inlocal\review-images\obs-encoder\quality\and\live\.🤖 Generated with Claude Code