diff --git a/UI/data/locale/en-US.ini b/UI/data/locale/en-US.ini
index 3f8238c77..28a5e2854 100644
--- a/UI/data/locale/en-US.ini
+++ b/UI/data/locale/en-US.ini
@@ -864,6 +864,7 @@ Basic.MainMenu.Help.About="&About"
Basic.Settings.ProgramRestart="The program must be restarted for these settings to take effect."
Basic.Settings.ConfirmTitle="Confirm Changes"
Basic.Settings.Confirm="You have unsaved changes. Save changes?"
+Basic.Settings.MultitrackVideoDisabledSettings="%1 %2 is controlling some of your stream settings"
# basic mode 'general' settings
Basic.Settings.General="General"
diff --git a/UI/data/themes/Yami.obt b/UI/data/themes/Yami.obt
index cf9230b77..91b48ddc4 100644
--- a/UI/data/themes/Yami.obt
+++ b/UI/data/themes/Yami.obt
@@ -1376,6 +1376,11 @@ QLabel#errorLabel {
font-weight: bold;
}
+QFrame [themeID="notice"] {
+ background: var(--bg_preview);
+ border-radius: var(--border_radius);
+}
+
/* About dialog */
* [themeID="aboutName"] {
diff --git a/UI/forms/OBSBasicSettings.ui b/UI/forms/OBSBasicSettings.ui
index a144805d3..45af7e598 100644
--- a/UI/forms/OBSBasicSettings.ui
+++ b/UI/forms/OBSBasicSettings.ui
@@ -1846,6 +1846,25 @@
0
+ -
+
+
+ notice
+
+
+
-
+
+
+ Basic.Settings.MultitrackVideoDisabledSettings
+
+
+ Qt::AlignCenter
+
+
+
+
+
+
-
diff --git a/UI/window-basic-settings.cpp b/UI/window-basic-settings.cpp
index fc241576e..82cd64dcc 100644
--- a/UI/window-basic-settings.cpp
+++ b/UI/window-basic-settings.cpp
@@ -896,6 +896,8 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent)
obs_properties_destroy(ppts);
+ ui->multitrackVideoNoticeBox->setVisible(false);
+
InitStreamPage();
InitAppearancePage();
LoadSettings(false);
@@ -4662,6 +4664,8 @@ void OBSBasicSettings::OutputsChanged()
outputsChanged = true;
sender()->setProperty("changed", QVariant(true));
EnableApplyButton(true);
+
+ UpdateMultitrackVideo();
}
}
@@ -5420,6 +5424,7 @@ void OBSBasicSettings::SimpleRecordingQualityChanged()
ui->simpleOutRecFormat->setVisible(!losslessQuality);
ui->simpleOutRecFormatLabel->setVisible(!losslessQuality);
+ UpdateMultitrackVideo();
SimpleRecordingEncoderChanged();
SimpleReplayBufferChanged();
}
@@ -6343,6 +6348,114 @@ void OBSBasicSettings::UpdateMultitrackVideo()
toggle_available && ui->enableMultitrackVideo->isChecked() &&
ui->multitrackVideoConfigOverrideEnable->isChecked());
+ auto update_simple_output_settings = [&](bool mtv_enabled) {
+ auto recording_uses_stream_encoder =
+ ui->simpleOutRecQuality->currentData().toString() ==
+ "Stream";
+ mtv_enabled = mtv_enabled && !recording_uses_stream_encoder;
+
+ ui->simpleOutputVBitrateLabel->setDisabled(mtv_enabled);
+ ui->simpleOutputVBitrate->setDisabled(mtv_enabled);
+
+ ui->simpleOutputABitrateLabel->setDisabled(mtv_enabled);
+ ui->simpleOutputABitrate->setDisabled(mtv_enabled);
+
+ ui->simpleOutStrEncoderLabel->setDisabled(mtv_enabled);
+ ui->simpleOutStrEncoder->setDisabled(mtv_enabled);
+
+ ui->simpleOutPresetLabel->setDisabled(mtv_enabled);
+ ui->simpleOutPreset->setDisabled(mtv_enabled);
+
+ ui->simpleOutCustomLabel->setDisabled(mtv_enabled);
+ ui->simpleOutCustom->setDisabled(mtv_enabled);
+
+ ui->simpleOutStrAEncoderLabel->setDisabled(mtv_enabled);
+ ui->simpleOutStrAEncoder->setDisabled(mtv_enabled);
+ };
+
+ auto update_advanced_output_settings = [&](bool mtv_enabled) {
+ auto recording_uses_stream_video_encoder =
+ ui->advOutRecEncoder->currentText() ==
+ TEXT_USE_STREAM_ENC;
+ auto recording_uses_stream_audio_encoder =
+ ui->advOutRecAEncoder->currentData() == "none";
+ auto disable_video = mtv_enabled &&
+ !recording_uses_stream_video_encoder;
+ auto disable_audio = mtv_enabled &&
+ !recording_uses_stream_audio_encoder;
+
+ ui->advOutAEncLabel->setDisabled(disable_audio);
+ ui->advOutAEncoder->setDisabled(disable_audio);
+
+ ui->advOutEncLabel->setDisabled(disable_video);
+ ui->advOutEncoder->setDisabled(disable_video);
+
+ ui->advOutUseRescale->setDisabled(disable_video);
+ ui->advOutRescale->setDisabled(disable_video);
+ ui->advOutRescaleFilter->setDisabled(disable_video);
+
+ if (streamEncoderProps)
+ streamEncoderProps->SetDisabled(disable_video);
+ };
+
+ auto update_advanced_output_audio_tracks = [&](bool mtv_enabled) {
+ auto vod_track_enabled = vodTrackCheckbox &&
+ vodTrackCheckbox->isChecked();
+
+ auto vod_track_idx_enabled = [&](size_t idx) {
+ return vod_track_enabled && vodTrack[idx] &&
+ vodTrack[idx]->isChecked();
+ };
+
+ auto track1_warning_visible = mtv_enabled &&
+ (ui->advOutTrack1->isChecked() ||
+ vod_track_idx_enabled(1));
+ auto track1_disabled = track1_warning_visible &&
+ !ui->advOutRecTrack1->isChecked();
+ ui->advOutTrack1BitrateLabel->setDisabled(track1_disabled);
+ ui->advOutTrack1Bitrate->setDisabled(track1_disabled);
+
+ auto track2_warning_visible = mtv_enabled &&
+ (ui->advOutTrack2->isChecked() ||
+ vod_track_idx_enabled(2));
+ auto track2_disabled = track2_warning_visible &&
+ !ui->advOutRecTrack2->isChecked();
+ ui->advOutTrack2BitrateLabel->setDisabled(track2_disabled);
+ ui->advOutTrack2Bitrate->setDisabled(track2_disabled);
+
+ auto track3_warning_visible = mtv_enabled &&
+ (ui->advOutTrack3->isChecked() ||
+ vod_track_idx_enabled(3));
+ auto track3_disabled = track3_warning_visible &&
+ !ui->advOutRecTrack3->isChecked();
+ ui->advOutTrack3BitrateLabel->setDisabled(track3_disabled);
+ ui->advOutTrack3Bitrate->setDisabled(track3_disabled);
+
+ auto track4_warning_visible = mtv_enabled &&
+ (ui->advOutTrack4->isChecked() ||
+ vod_track_idx_enabled(4));
+ auto track4_disabled = track4_warning_visible &&
+ !ui->advOutRecTrack4->isChecked();
+ ui->advOutTrack4BitrateLabel->setDisabled(track4_disabled);
+ ui->advOutTrack4Bitrate->setDisabled(track4_disabled);
+
+ auto track5_warning_visible = mtv_enabled &&
+ (ui->advOutTrack5->isChecked() ||
+ vod_track_idx_enabled(5));
+ auto track5_disabled = track5_warning_visible &&
+ !ui->advOutRecTrack5->isChecked();
+ ui->advOutTrack5BitrateLabel->setDisabled(track5_disabled);
+ ui->advOutTrack5Bitrate->setDisabled(track5_disabled);
+
+ auto track6_warning_visible = mtv_enabled &&
+ (ui->advOutTrack6->isChecked() ||
+ vod_track_idx_enabled(6));
+ auto track6_disabled = track6_warning_visible &&
+ !ui->advOutRecTrack6->isChecked();
+ ui->advOutTrack6BitrateLabel->setDisabled(track6_disabled);
+ ui->advOutTrack6Bitrate->setDisabled(track6_disabled);
+ };
+
if (available) {
OBSDataAutoRelease settings;
{
@@ -6384,6 +6497,26 @@ void OBSBasicSettings::UpdateMultitrackVideo()
.arg(multitrack_video_name,
ui->service->currentText()));
}
+
+ auto disabled_text =
+ QTStr("Basic.Settings.MultitrackVideoDisabledSettings")
+ .arg(ui->service->currentText())
+ .arg(multitrack_video_name);
+
+ ui->multitrackVideoNotice->setText(disabled_text);
+
+ auto mtv_enabled = ui->enableMultitrackVideo->isChecked();
+ ui->multitrackVideoNoticeBox->setVisible(mtv_enabled);
+
+ update_simple_output_settings(mtv_enabled);
+ update_advanced_output_settings(mtv_enabled);
+ update_advanced_output_audio_tracks(mtv_enabled);
+ } else {
+ ui->multitrackVideoNoticeBox->setVisible(false);
+
+ update_simple_output_settings(false);
+ update_advanced_output_settings(false);
+ update_advanced_output_audio_tracks(false);
}
}