diff --git a/obs/data/locale/en-US.ini b/obs/data/locale/en-US.ini
index 5a2e07c30..d6b620e64 100644
--- a/obs/data/locale/en-US.ini
+++ b/obs/data/locale/en-US.ini
@@ -203,6 +203,9 @@ Basic.Settings.Output.AudioBitrate="Audio Bitrate"
Basic.Settings.Output.Reconnect="Automatically Reconnect"
Basic.Settings.Output.RetryDelay="Retry Delay (seconds)"
Basic.Settings.Output.MaxRetries="Maximum Retries"
+Basic.Settings.Output.Advanced="Advanced Encoder Settings"
+Basic.Settings.Output.X264Preset="x264 CPU Preset"
+Basic.Settings.Output.CustomX264Settings="Custom x264 Settings"
# basic mode 'video' settings
Basic.Settings.Video="Video"
diff --git a/obs/forms/OBSBasicSettings.ui b/obs/forms/OBSBasicSettings.ui
index 9b79a2af6..424fb16f3 100644
--- a/obs/forms/OBSBasicSettings.ui
+++ b/obs/forms/OBSBasicSettings.ui
@@ -514,6 +514,80 @@
+ -
+
+
+ Basic.Settings.Output.Advanced
+
+
+ true
+
+
+
+ -
+
+
+ -
+
+
+ Basic.Settings.Output.CustomX264Settings
+
+
+
+ -
+
+
+ true
+
+
+ Basic.Settings.Output.X264Preset
+
+
+
+ -
+
+
-
+
+ ultrafast
+
+
+ -
+
+ superfast
+
+
+ -
+
+ veryfast
+
+
+ -
+
+ faster
+
+
+ -
+
+ fast
+
+
+ -
+
+ medium
+
+
+ -
+
+ slow
+
+
+ -
+
+ slower
+
+
+
+
@@ -1103,5 +1177,69 @@
+
+ simpleOutAdvanced
+ toggled(bool)
+ simpleOutPreset
+ setVisible(bool)
+
+
+ 439
+ 240
+
+
+ 432
+ 256
+
+
+
+
+ simpleOutAdvanced
+ toggled(bool)
+ label_24
+ setVisible(bool)
+
+
+ 482
+ 241
+
+
+ 308
+ 266
+
+
+
+
+ simpleOutAdvanced
+ toggled(bool)
+ simpleOutCustomX264
+ setVisible(bool)
+
+
+ 459
+ 234
+
+
+ 452
+ 292
+
+
+
+
+ simpleOutAdvanced
+ toggled(bool)
+ label_23
+ setVisible(bool)
+
+
+ 554
+ 236
+
+
+ 350
+ 286
+
+
+
diff --git a/obs/window-basic-main.cpp b/obs/window-basic-main.cpp
index e40f184be..022fb863a 100644
--- a/obs/window-basic-main.cpp
+++ b/obs/window-basic-main.cpp
@@ -438,6 +438,10 @@ bool OBSBasic::InitBasicConfigDefaults()
config_set_default_uint (basicConfig, "SimpleOutput", "RetryDelay", 2);
config_set_default_uint (basicConfig, "SimpleOutput", "MaxRetries",
20);
+ config_set_default_bool (basicConfig, "SimpleOutput", "UseAdvanced",
+ false);
+ config_set_default_string(basicConfig, "SimpleOutput", "Preset",
+ "veryfast");
config_set_default_uint (basicConfig, "Video", "BaseCX", cx);
config_set_default_uint (basicConfig, "Video", "BaseCY", cy);
@@ -1976,11 +1980,22 @@ void OBSBasic::SetupEncoders()
"VBitrate");
int audioBitrate = config_get_uint(basicConfig, "SimpleOutput",
"ABitrate");
+ bool advanced = config_get_bool(basicConfig, "SimpleOutput",
+ "UseAdvanced");
+ const char *preset = config_get_string(basicConfig,
+ "SimpleOutput", "Preset");
+ const char *custom = config_get_string(basicConfig,
+ "SimpleOutput", "x264Settings");
obs_data_set_int(x264Settings, "bitrate", videoBitrate);
obs_data_set_int(x264Settings, "buffer_size", videoBitrate);
obs_data_set_bool(x264Settings, "cbr", true);
+ if (advanced) {
+ obs_data_set_string(x264Settings, "preset", preset);
+ obs_data_set_string(x264Settings, "x264opts", custom);
+ }
+
obs_data_set_int(aacSettings, "bitrate", audioBitrate);
obs_encoder_update(x264, x264Settings);
diff --git a/obs/window-basic-settings.cpp b/obs/window-basic-settings.cpp
index 07090538b..14b8132a5 100644
--- a/obs/window-basic-settings.cpp
+++ b/obs/window-basic-settings.cpp
@@ -145,6 +145,9 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent)
HookWidget(ui->simpleOutReconnect, CHECK_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->simpleOutRetryDelay, SCROLL_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->simpleOutMaxRetries, SCROLL_CHANGED, OUTPUTS_CHANGED);
+ HookWidget(ui->simpleOutAdvanced, CHECK_CHANGED, OUTPUTS_CHANGED);
+ HookWidget(ui->simpleOutPreset, COMBO_CHANGED, OUTPUTS_CHANGED);
+ HookWidget(ui->simpleOutCustomX264, EDIT_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->channelSetup, COMBO_CHANGED, AUDIO_RESTART);
HookWidget(ui->sampleRate, COMBO_CHANGED, AUDIO_RESTART);
HookWidget(ui->desktopAudioDevice1, COMBO_CHANGED, AUDIO_CHANGED);
@@ -432,6 +435,12 @@ void OBSBasicSettings::LoadSimpleOutputSettings()
"RetryDelay");
int maxRetries = config_get_uint(main->Config(), "SimpleOutput",
"MaxRetries");
+ bool advanced = config_get_bool(main->Config(), "SimpleOutput",
+ "UseAdvanced");
+ const char *preset = config_get_string(main->Config(), "SimpleOutput",
+ "Preset");
+ const char *custom = config_get_string(main->Config(), "SimpleOutput",
+ "x264Settings");
ui->simpleOutputPath->setText(path);
ui->simpleOutputVBitrate->setValue(videoBitrate);
@@ -442,6 +451,9 @@ void OBSBasicSettings::LoadSimpleOutputSettings()
ui->simpleOutReconnect->setChecked(reconnect);
ui->simpleOutRetryDelay->setValue(retryDelay);
ui->simpleOutMaxRetries->setValue(maxRetries);
+ ui->simpleOutAdvanced->setChecked(advanced);
+ ui->simpleOutPreset->setCurrentText(preset);
+ ui->simpleOutCustomX264->setText(custom);
}
void OBSBasicSettings::LoadOutputSettings()
@@ -614,6 +626,9 @@ void OBSBasicSettings::SaveOutputSettings()
SaveCheckBox(ui->simpleOutReconnect, "SimpleOutput", "Reconnect");
SaveSpinBox(ui->simpleOutRetryDelay, "SimpleOutput", "RetryDelay");
SaveSpinBox(ui->simpleOutMaxRetries, "SimpleOutput", "MaxRetries");
+ SaveCheckBox(ui->simpleOutAdvanced, "SimpleOutput", "UseAdvanced");
+ SaveCombo(ui->simpleOutPreset, "SimpleOutput", "Preset");
+ SaveEdit(ui->simpleOutCustomX264, "SimpleOutput", "x264Settings");
}
void OBSBasicSettings::SaveAudioSettings()