From f40cf8dd72f1b560c8445316f89efc7e9d629b8b Mon Sep 17 00:00:00 2001 From: Nick von Kaenel <52364921+nickvonkaenel@users.noreply.github.com> Date: Fri, 10 Apr 2026 14:55:07 -0700 Subject: [PATCH] frontend: Scale simple output recording audio bitrate by channel count The recording audio bitrate was hardcoded to 192 kbps regardless of channel layout. For a 5.1 mix this yields ~32 kbps per channel which is very low quality. Scale proportionally from the stereo reference (192 kbps) using the active channel count, snapping to the closest bitrate supported by the selected encoder (AAC or Opus). Stereo recordings are unchanged (192 * 2 / 2 = 192 kbps). --- frontend/utility/SimpleOutput.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/frontend/utility/SimpleOutput.cpp b/frontend/utility/SimpleOutput.cpp index 718a363c0..4fe910d96 100644 --- a/frontend/utility/SimpleOutput.cpp +++ b/frontend/utility/SimpleOutput.cpp @@ -392,14 +392,25 @@ void SimpleOutput::Update() void SimpleOutput::UpdateRecordingAudioSettings() { OBSDataAutoRelease settings = obs_data_create(); - obs_data_set_int(settings, "bitrate", 192); obs_data_set_string(settings, "rate_control", "CBR"); + const char *audioEncoder = config_get_string(main->Config(), "SimpleOutput", "RecAudioEncoder"); int tracks = config_get_int(main->Config(), "SimpleOutput", "RecTracks"); const char *recFormat = config_get_string(main->Config(), "SimpleOutput", "RecFormat2"); const char *quality = config_get_string(main->Config(), "SimpleOutput", "RecQuality"); bool flv = strcmp(recFormat, "flv") == 0; + constexpr int kDefaultStereoBitrateKbps{192}; + constexpr int kStereoChannelCount{2}; + + int channels = (int)audio_output_get_channels(obs_get_audio()); + int channelScaledBitrate{kDefaultStereoBitrateKbps * channels / kStereoChannelCount}; + + int bitrate = strcmp(audioEncoder, "opus") == 0 ? FindClosestAvailableSimpleOpusBitrate(channelScaledBitrate) + : FindClosestAvailableSimpleAACBitrate(channelScaledBitrate); + + obs_data_set_int(settings, "bitrate", bitrate); + if (flv || strcmp(quality, "Stream") == 0) { obs_encoder_update(audioRecording, settings); } else {