diff --git a/obs/data/locale/en-US.ini b/obs/data/locale/en-US.ini
index 14c345744..198705528 100644
--- a/obs/data/locale/en-US.ini
+++ b/obs/data/locale/en-US.ini
@@ -334,6 +334,7 @@ Basic.Settings.Output.MaxRetries="Maximum Retries"
Basic.Settings.Output.Advanced="Enable Advanced Encoder Settings"
Basic.Settings.Output.EncoderPreset="Encoder Preset (higher = less CPU)"
Basic.Settings.Output.CustomEncoderSettings="Custom Encoder Settings"
+Basic.Settings.Output.CustomMuxerSettings="Custom Muxer Settings"
# basic mode 'output' settings - advanced section
Basic.Settings.Output.Adv.Rescale="Rescale Output"
diff --git a/obs/forms/OBSBasicSettings.ui b/obs/forms/OBSBasicSettings.ui
index 09ee8a1d4..c1fb597cc 100644
--- a/obs/forms/OBSBasicSettings.ui
+++ b/obs/forms/OBSBasicSettings.ui
@@ -667,6 +667,16 @@
+ -
+
+
+ Basic.Settings.Output.CustomMuxerSettings
+
+
+
+ -
+
+
@@ -1232,6 +1242,16 @@
+ -
+
+
+ Basic.Settings.Output.CustomMuxerSettings
+
+
+
+ -
+
+
diff --git a/obs/window-basic-main-outputs.cpp b/obs/window-basic-main-outputs.cpp
index db27cf5f4..52401a756 100644
--- a/obs/window-basic-main-outputs.cpp
+++ b/obs/window-basic-main-outputs.cpp
@@ -428,6 +428,8 @@ bool SimpleOutput::StartRecording()
"SimpleOutput", "FilePath");
const char *format = config_get_string(main->Config(),
"SimpleOutput", "RecFormat");
+ const char *mux = config_get_string(main->Config(), "SimpleOutput",
+ "MuxerCustom");
os_dir_t *dir = path ? os_opendir(path) : nullptr;
@@ -459,6 +461,7 @@ bool SimpleOutput::StartRecording()
obs_data_t *settings = obs_data_create();
obs_data_set_string(settings, ffmpegOutput ? "url" : "path",
strPath.c_str());
+ obs_data_set_string(settings, "muxer_settings", mux);
obs_output_update(fileOutput, settings);
@@ -711,6 +714,8 @@ inline void AdvancedOutput::SetupRecording()
{
const char *path = config_get_string(main->Config(), "AdvOut",
"RecFilePath");
+ const char *mux = config_get_string(main->Config(), "AdvOut",
+ "RecMuxerCustom");
bool rescale = config_get_bool(main->Config(), "AdvOut",
"RecRescale");
const char *rescaleRes = config_get_string(main->Config(), "AdvOut",
@@ -744,6 +749,7 @@ inline void AdvancedOutput::SetupRecording()
}
obs_data_set_string(settings, "path", path);
+ obs_data_set_string(settings, "muxer_settings", mux);
obs_output_update(fileOutput, settings);
obs_data_release(settings);
}
diff --git a/obs/window-basic-settings.cpp b/obs/window-basic-settings.cpp
index de64390fd..aa45b07df 100644
--- a/obs/window-basic-settings.cpp
+++ b/obs/window-basic-settings.cpp
@@ -274,6 +274,7 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent)
HookWidget(ui->simpleOutCustom, EDIT_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->simpleOutRecQuality, COMBO_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->simpleOutRecEncoder, COMBO_CHANGED, OUTPUTS_CHANGED);
+ HookWidget(ui->simpleOutMuxCustom, EDIT_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->advOutEncoder, COMBO_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->advOutUseRescale, CHECK_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->advOutRescale, CBEDIT_CHANGED, OUTPUTS_CHANGED);
@@ -288,6 +289,7 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent)
HookWidget(ui->advOutRecEncoder, COMBO_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->advOutRecUseRescale, CHECK_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->advOutRecRescale, CBEDIT_CHANGED, OUTPUTS_CHANGED);
+ HookWidget(ui->advOutMuxCustom, EDIT_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->advOutRecTrack1, CHECK_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->advOutRecTrack2, CHECK_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->advOutRecTrack3, CHECK_CHANGED, OUTPUTS_CHANGED);
@@ -1025,6 +1027,8 @@ void OBSBasicSettings::LoadSimpleOutputSettings()
"RecQuality");
const char *recEnc = config_get_string(main->Config(), "SimpleOutput",
"RecEncoder");
+ const char *muxCustom = config_get_string(main->Config(),
+ "SimpleOutput", "MuxerCustom");
audioBitrate = FindClosestAvailableAACBitrate(audioBitrate);
@@ -1048,6 +1052,8 @@ void OBSBasicSettings::LoadSimpleOutputSettings()
idx = ui->simpleOutRecEncoder->findData(QString(recEnc));
if (idx == -1) idx = 0;
ui->simpleOutRecEncoder->setCurrentIndex(idx);
+
+ ui->simpleOutMuxCustom->setText(muxCustom);
}
void OBSBasicSettings::LoadAdvOutputStreamingSettings()
@@ -1131,6 +1137,8 @@ void OBSBasicSettings::LoadAdvOutputRecordingSettings()
"RecRescale");
const char *rescaleRes = config_get_string(main->Config(), "AdvOut",
"RecRescaleRes");
+ const char *muxCustom = config_get_string(main->Config(), "AdvOut",
+ "RecMuxerCustom");
int tracks = config_get_int(main->Config(), "AdvOut", "RecTracks");
int typeIndex = (astrcmpi(type, "FFmpeg") == 0) ? 1 : 0;
@@ -1138,6 +1146,7 @@ void OBSBasicSettings::LoadAdvOutputRecordingSettings()
ui->advOutRecPath->setText(path);
ui->advOutRecUseRescale->setChecked(rescale);
ui->advOutRecRescale->setCurrentText(rescaleRes);
+ ui->advOutMuxCustom->setText(muxCustom);
int idx = ui->advOutRecFormat->findText(format);
ui->advOutRecFormat->setCurrentIndex(idx);
@@ -2123,6 +2132,7 @@ void OBSBasicSettings::SaveOutputSettings()
SaveEdit(ui->simpleOutCustom, "SimpleOutput", "x264Settings");
SaveComboData(ui->simpleOutRecQuality, "SimpleOutput", "RecQuality");
SaveComboData(ui->simpleOutRecEncoder, "SimpleOutput", "RecEncoder");
+ SaveEdit(ui->simpleOutMuxCustom, "SimpleOutput", "MuxerCustom");
SaveCheckBox(ui->advOutApplyService, "AdvOut", "ApplyServiceSettings");
SaveComboData(ui->advOutEncoder, "AdvOut", "Encoder");
@@ -2140,6 +2150,7 @@ void OBSBasicSettings::SaveOutputSettings()
SaveComboData(ui->advOutRecEncoder, "AdvOut", "RecEncoder");
SaveCheckBox(ui->advOutRecUseRescale, "AdvOut", "RecRescale");
SaveCombo(ui->advOutRecRescale, "AdvOut", "RecRescaleRes");
+ SaveEdit(ui->advOutMuxCustom, "AdvOut", "RecMuxerCustom");
config_set_int(main->Config(), "AdvOut", "RecTracks",
(ui->advOutRecTrack1->isChecked() ? (1<<0) : 0) |