diff --git a/UI/data/locale/en-US.ini b/UI/data/locale/en-US.ini index f45096fa5..afe988feb 100644 --- a/UI/data/locale/en-US.ini +++ b/UI/data/locale/en-US.ini @@ -538,6 +538,7 @@ Basic.Settings.Output.Adv.FFmpeg.VEncoderSettings="Video Encoder Settings (if an Basic.Settings.Output.Adv.FFmpeg.AEncoder="Audio Encoder" Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="Audio Encoder Settings (if any)" Basic.Settings.Output.Adv.FFmpeg.MuxerSettings="Muxer Settings (if any)" +Basic.Settings.Output.Adv.FFmpeg.GOPSize="Keyframe interval (frames)" # basic mode 'output' settings - advanced section - recording subsection - completer FilenameFormatting.completer="%CCYY-%MM-%DD %hh-%mm-%ss\n%YY-%MM-%DD %hh-%mm-%ss\n%Y-%m-%d %H-%M-%S\n%y-%m-%d %H-%M-%S\n%a %Y-%m-%d %H-%M-%S\n%A %Y-%m-%d %H-%M-%S\n%Y-%b-%d %H-%M-%S\n%Y-%B-%d %H-%M-%S\n%Y-%m-%d %I-%M-%S-%p\n%Y-%m-%d %H-%M-%S-%z\n%Y-%m-%d %H-%M-%S-%Z" diff --git a/UI/forms/OBSBasicSettings.ui b/UI/forms/OBSBasicSettings.ui index 910696a39..d8e860e77 100644 --- a/UI/forms/OBSBasicSettings.ui +++ b/UI/forms/OBSBasicSettings.ui @@ -1951,7 +1951,30 @@ + + + + 1000000000 + + + 250 + + + + + + Basic.Settings.Output.Adv.FFmpeg.GOPSize + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + advOutFFVGOPSize + + + + @@ -1967,7 +1990,7 @@ - + false @@ -1977,7 +2000,7 @@ - + Basic.Settings.Output.Adv.FFmpeg.VEncoder @@ -1987,10 +2010,10 @@ - + - + Basic.Settings.Output.Adv.FFmpeg.VEncoderSettings @@ -2000,10 +2023,10 @@ - + - + Basic.Settings.Output.AudioBitrate @@ -2013,7 +2036,7 @@ - + 32 @@ -2029,14 +2052,14 @@ - + Basic.Settings.Output.Adv.AudioTrack - + @@ -2105,7 +2128,7 @@ - + Basic.Settings.Output.Adv.FFmpeg.AEncoder @@ -2115,10 +2138,10 @@ - + - + Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings @@ -2128,7 +2151,7 @@ - + @@ -4132,6 +4155,7 @@ advOutFFURL advOutFFFormat advOutFFVBitrate + advOutFFVGOPSize advOutFFUseRescale advOutFFRescale advOutFFVEncoder diff --git a/UI/window-basic-main-outputs.cpp b/UI/window-basic-main-outputs.cpp index 27a5f9b4f..8d3d7a944 100644 --- a/UI/window-basic-main-outputs.cpp +++ b/UI/window-basic-main-outputs.cpp @@ -1170,6 +1170,8 @@ inline void AdvancedOutput::SetupFFmpeg() const char *url = config_get_string(main->Config(), "AdvOut", "FFURL"); int vBitrate = config_get_int(main->Config(), "AdvOut", "FFVBitrate"); + int gopSize = config_get_int(main->Config(), "AdvOut", + "FFVGOPSize"); bool rescale = config_get_bool(main->Config(), "AdvOut", "FFRescale"); const char *rescaleRes = config_get_string(main->Config(), "AdvOut", @@ -1202,6 +1204,7 @@ inline void AdvancedOutput::SetupFFmpeg() obs_data_set_string(settings, "format_name", formatName); obs_data_set_string(settings, "format_mime_type", mimeType); obs_data_set_string(settings, "muxer_settings", muxCustom); + obs_data_set_int(settings, "gop_size", gopSize); obs_data_set_int(settings, "video_bitrate", vBitrate); obs_data_set_string(settings, "video_encoder", vEncoder); obs_data_set_int(settings, "video_encoder_id", vEncoderId); diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index 00be4407c..0e213c86a 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -974,6 +974,7 @@ bool OBSBasic::InitBasicConfigDefaults() GetDefaultVideoSavePath().c_str()); config_set_default_string(basicConfig, "AdvOut", "FFExtension", "mp4"); config_set_default_uint (basicConfig, "AdvOut", "FFVBitrate", 2500); + config_set_default_uint (basicConfig, "AdvOut", "FFVGOPSize", 250); config_set_default_bool (basicConfig, "AdvOut", "FFUseRescale", false); config_set_default_uint (basicConfig, "AdvOut", "FFABitrate", 160); diff --git a/UI/window-basic-settings.cpp b/UI/window-basic-settings.cpp index a2db7ea05..d0b436013 100644 --- a/UI/window-basic-settings.cpp +++ b/UI/window-basic-settings.cpp @@ -340,6 +340,7 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent) HookWidget(ui->advOutFFFormat, COMBO_CHANGED, OUTPUTS_CHANGED); HookWidget(ui->advOutFFMCfg, EDIT_CHANGED, OUTPUTS_CHANGED); HookWidget(ui->advOutFFVBitrate, SCROLL_CHANGED, OUTPUTS_CHANGED); + HookWidget(ui->advOutFFVGOPSize, SCROLL_CHANGED, OUTPUTS_CHANGED); HookWidget(ui->advOutFFUseRescale, CHECK_CHANGED, OUTPUTS_CHANGED); HookWidget(ui->advOutFFRescale, CBEDIT_CHANGED, OUTPUTS_CHANGED); HookWidget(ui->advOutFFVEncoder, COMBO_CHANGED, OUTPUTS_CHANGED); @@ -1558,6 +1559,8 @@ void OBSBasicSettings::LoadAdvOutputFFmpegSettings() "FFMCustom"); int videoBitrate = config_get_int(main->Config(), "AdvOut", "FFVBitrate"); + int gopSize = config_get_int(main->Config(), "AdvOut", + "FFVGOPSize"); bool rescale = config_get_bool(main->Config(), "AdvOut", "FFRescale"); const char *rescaleRes = config_get_string(main->Config(), "AdvOut", @@ -1586,6 +1589,7 @@ void OBSBasicSettings::LoadAdvOutputFFmpegSettings() SelectFormat(ui->advOutFFFormat, format, mimeType); ui->advOutFFMCfg->setText(muxCustom); ui->advOutFFVBitrate->setValue(videoBitrate); + ui->advOutFFVGOPSize->setValue(gopSize); ui->advOutFFUseRescale->setChecked(rescale); ui->advOutFFRescale->setEnabled(rescale); ui->advOutFFRescale->setCurrentText(rescaleRes); @@ -1701,6 +1705,7 @@ void OBSBasicSettings::SetAdvOutputFFmpegEnablement( switch (encoderType) { case FF_CODEC_VIDEO: ui->advOutFFVBitrate->setEnabled(enabled); + ui->advOutFFVGOPSize->setEnabled(enabled); ui->advOutFFUseRescale->setEnabled(enabled); ui->advOutFFRescale->setEnabled(enabled && rescale); ui->advOutFFVEncoder->setEnabled(enabled || enableEncoder); @@ -2746,6 +2751,7 @@ void OBSBasicSettings::SaveOutputSettings() SaveFormat(ui->advOutFFFormat); SaveEdit(ui->advOutFFMCfg, "AdvOut", "FFMCustom"); SaveSpinBox(ui->advOutFFVBitrate, "AdvOut", "FFVBitrate"); + SaveSpinBox(ui->advOutFFVGOPSize, "AdvOut", "FFVGOPSize"); SaveCheckBox(ui->advOutFFUseRescale, "AdvOut", "FFRescale"); SaveCombo(ui->advOutFFRescale, "AdvOut", "FFRescaleRes"); SaveEncoder(ui->advOutFFVEncoder, "AdvOut", "FFVEncoder");