[graphics/krita/krita/6.0] plugins/dockers/recorder: Warn about excessive video parameters in recorder

Carsten Hartenfels <[email protected]>
Newsgroups gmane.comp.kde.cvs
Message-ID <[email protected]>
Git commit a99539079e20d1fd4b315775c3f920be3102ab41 by Carsten Hartenfels.
Committed on 27/07/2026 at 17:19.
Pushed by hartenfels into branch 'krita/6.0'.

Warn about excessive video parameters in recorder

Because anything above 1920 pixels in either direction and beyond 30 FPS
isn't broadly supported. It will make exporters fail, videos not play
properly and websites reject the files.

M  +19   -1    plugins/dockers/recorder/recorder_export.cpp
M  +372  -308  plugins/dockers/recorder/recorder_export.ui

https://invent.kde.org/graphics/krita/-/commit/a99539079e20d1fd4b315775c3f920be3102ab41

diff --git a/plugins/dockers/recorder/recorder_export.cpp b/plugins/dockers/recorder/recorder_export.cpp
index 2873b7ca246..e6f48823fdd 100644
--- a/plugins/dockers/recorder/recorder_export.cpp
+++ b/plugins/dockers/recorder/recorder_export.cpp
@@ -61,6 +61,8 @@ using Exporter = KisFFMpegWrapper;
 class RecorderExport::Private
 {
 public:
+    static constexpr int DIMENSION_LIMIT = 1920;
+
     RecorderExport *q;
     QScopedPointer<Ui::RecorderExport> ui;
     RecorderExportSettings *settings;
@@ -391,6 +393,13 @@ public:
         return result;
     }
 
+    void updateWarningVisibility()
+    {
+        ui->wdgWarnFps->setVisible(settings->fps > 30);
+        QSize size = settings->resize ? settings->size : settings->imageSize;
+        ui->wdgWarnSize->setVisible(size.width() > DIMENSION_LIMIT || size.height() > DIMENSION_LIMIT);
+    }
+
     QString requestFile(const QString &extension, const QString &defaultDir = QString())
     {
         KoFileDialog dialog(q, KoFileDialog::SaveFile, "ExportTimelapse");
@@ -448,6 +457,10 @@ RecorderExport::RecorderExport(RecorderExportSettings *s, QWidget *parent)
     d->ui->stackedWidget->setCurrentIndex(ExportPageIndex::PageSettings);
     d->ui->spinLastFrameSec->setEnabled(d->ui->extendResultCheckBox->isChecked());
     d->ui->spinFirstFrameSec->setEnabled(d->ui->resultPreviewCheckBox->isChecked());
+    d->ui->lblWarnFpsIcon->setPixmap(KisIconUtils::loadIcon("dialog-warning").pixmap(48, 48));
+    d->ui->lblWarnSizeIcon->setPixmap(KisIconUtils::loadIcon("dialog-warning").pixmap(48, 48));
+    d->ui->wdgWarnFps->hide();
+    d->ui->wdgWarnSize->hide();
 
     connect(d->ui->buttonBrowseDirectory, SIGNAL(clicked()), SLOT(onButtonBrowseDirectoryClicked()));
     connect(d->ui->spinInputFps, SIGNAL(valueChanged(int)), SLOT(onSpinInputFpsValueChanged(int)));
@@ -576,6 +589,7 @@ void RecorderExport::onSpinFpsValueChanged(int value)
     config.setFps(value);
     d->updateFps(config, false);
     d->updateVideoDuration();
+    d->updateWarningVisibility();
 }
 
 void RecorderExport::onCheckResultPreviewToggled(bool checked)
@@ -610,6 +624,7 @@ void RecorderExport::onCheckResizeToggled(bool checked)
 {
     settings->resize = checked;
     RecorderExportConfig(false).setResize(checked);
+    d->updateWarningVisibility();
 }
 
 void RecorderExport::onSpinScaleWidthValueChanged(int value)
@@ -618,6 +633,7 @@ void RecorderExport::onSpinScaleWidthValueChanged(int value)
     if (settings->lockRatio)
         d->updateRatio(true);
     RecorderExportConfig(false).setSize(settings->size);
+    d->updateWarningVisibility();
 }
 
 void RecorderExport::onSpinScaleHeightValueChanged(int value)
@@ -626,6 +642,7 @@ void RecorderExport::onSpinScaleHeightValueChanged(int value)
     if (settings->lockRatio)
         d->updateRatio(false);
     RecorderExportConfig(false).setSize(settings->size);
+    d->updateWarningVisibility();
 }
 
 void RecorderExport::onButtonLockRatioToggled(bool checked)
@@ -638,6 +655,7 @@ void RecorderExport::onButtonLockRatioToggled(bool checked)
         config.setSize(settings->size);
     }
     d->ui->buttonLockRatio->setIcon(settings->lockRatio ? KisIconUtils::loadIcon("locked") : KisIconUtils::loadIcon("unlocked"));
+    d->updateWarningVisibility();
 }
 
 void RecorderExport::onButtonLockFpsToggled(bool checked)
@@ -655,7 +673,7 @@ void RecorderExport::onButtonLockFpsToggled(bool checked)
         d->ui->spinInputFps->setMinimum(d->spinInputFPSMinValue);
         d->ui->spinInputFps->setMaximum(d->spinInputFPSMaxValue);
     }
-
+    d->updateWarningVisibility();
 }
 
 #ifndef Q_OS_ANDROID
diff --git a/plugins/dockers/recorder/recorder_export.ui b/plugins/dockers/recorder/recorder_export.ui
index 21dec6cd829..bbfce019b55 100644
--- a/plugins/dockers/recorder/recorder_export.ui
+++ b/plugins/dockers/recorder/recorder_export.ui
@@ -10,8 +10,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>543</width>
-    <height>374</height>
+    <width>550</width>
+    <height>500</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -86,45 +86,71 @@
          <property name="rightMargin">
           <number>9</number>
          </property>
-         <item row="9" column="0" colspan="3">
-          <widget class="Line" name="line">
-           <property name="orientation">
-            <enum>Qt::Horizontal</enum>
+         <item row="13" column="0">
+          <widget class="QLabel" name="labelResolution">
+           <property name="text">
+            <string>Render as:</string>
+           </property>
+           <property name="alignment">
+            <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+           </property>
+           <property name="buddy">
+            <cstring>comboProfile</cstring>
            </property>
           </widget>
          </item>
-         <item row="0" column="1">
-          <layout class="QHBoxLayout" name="layoutFps_2" stretch="0,1">
+         <item row="14" column="0">
+          <widget class="QLabel" name="labelExportTo">
+           <property name="text">
+            <string>Video location:</string>
+           </property>
+           <property name="alignment">
+            <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+           </property>
+           <property name="buddy">
+            <cstring>editVideoFilePath</cstring>
+           </property>
+          </widget>
+         </item>
+         <item row="12" column="2">
+          <widget class="QPushButton" name="buttonBrowseFfmpeg">
+           <property name="toolTip">
+            <string>Setup ffmpeg executable location</string>
+           </property>
+           <property name="text">
+            <string/>
+           </property>
+           <property name="icon">
+            <iconset theme="folder"/>
+           </property>
+          </widget>
+         </item>
+         <item row="6" column="1">
+          <layout class="QHBoxLayout" name="horizontalLayout_7">
            <item>
-            <widget class="QSpinBox" name="spinInputFps">
+            <widget class="QSpinBox" name="spinFirstFrameSec">
              <property name="minimumSize">
               <size>
                <width>90</width>
                <height>0</height>
               </size>
              </property>
-             <property name="keyboardTracking">
-              <bool>false</bool>
-             </property>
-             <property name="minimum">
-              <number>1</number>
+             <property name="suffix">
+              <string> sec.</string>
              </property>
              <property name="maximum">
-              <number>10000</number>
+              <number>120</number>
              </property>
              <property name="value">
-              <number>30</number>
+              <number>5</number>
              </property>
             </widget>
            </item>
            <item>
-            <spacer name="horizontalSpacer_14">
+            <spacer name="horizontalSpacer_17">
              <property name="orientation">
               <enum>Qt::Horizontal</enum>
              </property>
-             <property name="sizeType">
-              <enum>QSizePolicy::Expanding</enum>
-             </property>
              <property name="sizeHint" stdset="0">
               <size>
                <width>6</width>
@@ -135,168 +161,40 @@
            </item>
           </layout>
          </item>
-         <item row="11" column="1">
-          <widget class="QComboBox" name="comboProfile">
-           <property name="minimumSize">
-            <size>
-             <width>120</width>
-             <height>0</height>
-            </size>
-           </property>
-          </widget>
-         </item>
-         <item row="1" column="1">
-          <layout class="QHBoxLayout" name="layoutFps" stretch="0,1,0">
-           <item>
-            <widget class="QSpinBox" name="spinFps">
-             <property name="minimumSize">
-              <size>
-               <width>90</width>
-               <height>0</height>
-              </size>
-             </property>
-             <property name="keyboardTracking">
-              <bool>false</bool>
-             </property>
-             <property name="minimum">
-              <number>1</number>
-             </property>
-             <property name="maximum">
-              <number>60</number>
-             </property>
-             <property name="value">
-              <number>30</number>
-             </property>
-            </widget>
-           </item>
-           <item>
-            <widget class="QLabel" name="labelRealTimeCaptureNotion">
-             <property name="layoutDirection">
-              <enum>Qt::LeftToRight</enum>
-             </property>
-             <property name="text">
-              <string>Used for Capture Interval calculation</string>
-             </property>
-             <property name="alignment">
-              <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
-             </property>
-            </widget>
-           </item>
+         <item row="9" column="0">
+          <layout class="QHBoxLayout" name="horizontalLayout_8" stretch="1,0">
            <item>
-            <spacer name="horizontalSpacer_11">
+            <spacer name="horizontalSpacer_12">
              <property name="orientation">
               <enum>Qt::Horizontal</enum>
              </property>
              <property name="sizeType">
-              <enum>QSizePolicy::Expanding</enum>
+              <enum>QSizePolicy::Preferred</enum>
              </property>
              <property name="sizeHint" stdset="0">
               <size>
-               <width>6</width>
-               <height>6</height>
+               <width>13</width>
+               <height>13</height>
               </size>
              </property>
             </spacer>
            </item>
-          </layout>
-         </item>
-         <item row="2" column="1">
-          <layout class="QHBoxLayout" name="horizontalLayout_6">
            <item>
-            <widget class="QSpinBox" name="spinLastFrameSec">
-             <property name="minimumSize">
-              <size>
-               <width>90</width>
-               <height>0</height>
-              </size>
-             </property>
-             <property name="suffix">
-              <string comment="Contraction of &quot;second&quot; for interval"> sec.</string>
-             </property>
-             <property name="maximum">
-              <number>120</number>
+            <widget class="QCheckBox" name="checkResize">
+             <property name="sizePolicy">
+              <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+               <horstretch>0</horstretch>
+               <verstretch>0</verstretch>
+              </sizepolicy>
              </property>
-             <property name="value">
-              <number>5</number>
+             <property name="text">
+              <string>Resize:</string>
              </property>
             </widget>
            </item>
-           <item>
-            <spacer name="horizontalSpacer_15">
-             <property name="orientation">
-              <enum>Qt::Horizontal</enum>
-             </property>
-             <property name="sizeHint" stdset="0">
-              <size>
-               <width>6</width>
-               <height>6</height>
-              </size>
-             </property>
-            </spacer>
-           </item>
           </layout>
          </item>
-         <item row="0" column="0">
-          <widget class="QLabel" name="labelFpsInput">
-           <property name="toolTip">
-            <string>The speed of reading the input stream.
-For example, to make your timelapse twice faster, the Input FPS should be twice larger of the Video FPS.</string>
-           </property>
-           <property name="text">
-            <string comment="Input FPS of recorded timelapses.">Input FPS:</string>
-           </property>
-           <property name="alignment">
-            <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
-           </property>
-           <property name="buddy">
-            <cstring>spinInputFps</cstring>
-           </property>
-          </widget>
-         </item>
-         <item row="0" column="2">
-          <widget class="QPushButton" name="buttonLockFps">
-           <property name="toolTip">
-            <string>Use the same rate for Input FPS and Video FPS</string>
-           </property>
-           <property name="text">
-            <string/>
-           </property>
-           <property name="icon">
-            <iconset theme="lock">
-             <normaloff>.</normaloff>.</iconset>
-           </property>
-           <property name="checkable">
-            <bool>true</bool>
-           </property>
-          </widget>
-         </item>
-         <item row="12" column="1">
-          <widget class="QLineEdit" name="editVideoFilePath">
-           <property name="minimumSize">
-            <size>
-             <width>120</width>
-             <height>0</height>
-            </size>
-           </property>
-           <property name="readOnly">
-            <bool>false</bool>
-           </property>
-          </widget>
-         </item>
-         <item row="1" column="0">
-          <widget class="QLabel" name="labelFps">
-           <property name="text">
-            <string>Video FPS:</string>
-           </property>
-           <property name="alignment">
-            <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
-           </property>
-           <property name="buddy">
-            <cstring>spinFps</cstring>
-           </property>
-          </widget>
-         </item>
-         <item row="11" column="2">
+         <item row="13" column="2">
           <widget class="QPushButton" name="buttonEditProfile">
            <property name="sizePolicy">
             <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
@@ -321,128 +219,33 @@ For example, to make your timelapse twice faster, the Input FPS should be twice
            </property>
           </widget>
          </item>
-         <item row="10" column="1">
-          <widget class="QLineEdit" name="editFfmpegPath">
-           <property name="minimumSize">
-            <size>
-             <width>120</width>
-             <height>0</height>
-            </size>
-           </property>
+         <item row="12" column="0">
+          <widget class="QLabel" name="labelFfmpegLocation">
            <property name="text">
-            <string>ffmpeg</string>
+            <string>FFmpeg:</string>
            </property>
-           <property name="readOnly">
-            <bool>true</bool>
+           <property name="alignment">
+            <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+           </property>
+           <property name="buddy">
+            <cstring>editFfmpegPath</cstring>
            </property>
           </widget>
          </item>
-         <item row="8" column="2">
-          <widget class="QPushButton" name="buttonLockRatio">
-           <property name="enabled">
-            <bool>false</bool>
-           </property>
+         <item row="14" column="2">
+          <widget class="QPushButton" name="buttonBrowseExport">
            <property name="toolTip">
-            <string>Constrain proportions</string>
+            <string>Select a file location for the exported timelapse video</string>
            </property>
            <property name="text">
             <string/>
            </property>
            <property name="icon">
-            <iconset theme="lock">
-             <normaloff>.</normaloff>.</iconset>
-           </property>
-           <property name="checkable">
-            <bool>true</bool>
+            <iconset theme="folder"/>
            </property>
           </widget>
          </item>
-         <item row="2" column="0">
-          <layout class="QHBoxLayout" name="horizontalLayout_9">
-           <item>
-            <spacer name="horizontalSpacer_16">
-             <property name="orientation">
-              <enum>Qt::Horizontal</enum>
-             </property>
-             <property name="sizeHint" stdset="0">
-              <size>
-               <width>40</width>
-               <height>20</height>
-              </size>
-             </property>
-            </spacer>
-           </item>
-           <item>
-            <widget class="QCheckBox" name="extendResultCheckBox">
-             <property name="toolTip">
-              <string>Extend the last frame in the exported video by the specified duration</string>
-             </property>
-             <property name="text">
-              <string>Extend result for:</string>
-             </property>
-            </widget>
-           </item>
-          </layout>
-         </item>
-         <item row="12" column="2">
-          <widget class="QPushButton" name="buttonBrowseExport">
-           <property name="toolTip">
-            <string>Select a file location for the exported timelapse video</string>
-           </property>
-           <property name="text">
-            <string/>
-           </property>
-           <property name="icon">
-            <iconset theme="folder">
-             <normaloff>.</normaloff>.</iconset>
-           </property>
-          </widget>
-         </item>
-         <item row="12" column="0">
-          <widget class="QLabel" name="labelExportTo">
-           <property name="text">
-            <string>Video location:</string>
-           </property>
-           <property name="alignment">
-            <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
-           </property>
-           <property name="buddy">
-            <cstring>editVideoFilePath</cstring>
-           </property>
-          </widget>
-         </item>
-         <item row="5" column="0">
-          <layout class="QHBoxLayout" name="horizontalLayout_11">
-           <item>
-            <spacer name="horizontalSpacer_18">
-             <property name="orientation">
-              <enum>Qt::Horizontal</enum>
-             </property>
-             <property name="sizeHint" stdset="0">
-              <size>
-               <width>40</width>
-               <height>20</height>
-              </size>
-             </property>
-            </spacer>
-           </item>
-           <item>
-            <widget class="QCheckBox" name="resultPreviewCheckBox">
-             <property name="toolTip">
-              <string>Prepend a preview to the exported video.
-The preview will show the last frame of the video for the specified duration</string>
-             </property>
-             <property name="layoutDirection">
-              <enum>Qt::LeftToRight</enum>
-             </property>
-             <property name="text">
-              <string>Enable preview for:</string>
-             </property>
-            </widget>
-           </item>
-          </layout>
-         </item>
-         <item row="8" column="1">
+         <item row="9" column="1">
           <widget class="QWidget" name="widgetResolution" native="true">
            <property name="enabled">
             <bool>false</bool>
@@ -548,59 +351,104 @@ The preview will show the last frame of the video for the specified duration</st
            </layout>
           </widget>
          </item>
-         <item row="11" column="0">
-          <widget class="QLabel" name="labelResolution">
+         <item row="1" column="0">
+          <widget class="QLabel" name="labelFps">
            <property name="text">
-            <string>Render as:</string>
+            <string>Video FPS:</string>
            </property>
            <property name="alignment">
             <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
            </property>
            <property name="buddy">
-            <cstring>comboProfile</cstring>
+            <cstring>spinFps</cstring>
            </property>
           </widget>
          </item>
-         <item row="10" column="2">
-          <widget class="QPushButton" name="buttonBrowseFfmpeg">
+         <item row="0" column="0">
+          <widget class="QLabel" name="labelFpsInput">
            <property name="toolTip">
-            <string>Setup ffmpeg executable location</string>
+            <string>The speed of reading the input stream.
+For example, to make your timelapse twice faster, the Input FPS should be twice larger of the Video FPS.</string>
+           </property>
+           <property name="text">
+            <string comment="Input FPS of recorded timelapses.">Input FPS:</string>
+           </property>
+           <property name="alignment">
+            <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+           </property>
+           <property name="buddy">
+            <cstring>spinInputFps</cstring>
+           </property>
+          </widget>
+         </item>
+         <item row="9" column="2">
+          <widget class="QPushButton" name="buttonLockRatio">
+           <property name="enabled">
+            <bool>false</bool>
+           </property>
+           <property name="toolTip">
+            <string>Constrain proportions</string>
            </property>
            <property name="text">
             <string/>
            </property>
            <property name="icon">
-            <iconset theme="folder">
-             <normaloff>.</normaloff>.</iconset>
+            <iconset theme="lock"/>
+           </property>
+           <property name="checkable">
+            <bool>true</bool>
            </property>
           </widget>
          </item>
-         <item row="5" column="1">
-          <layout class="QHBoxLayout" name="horizontalLayout_7">
+         <item row="13" column="1">
+          <widget class="QComboBox" name="comboProfile">
+           <property name="minimumSize">
+            <size>
+             <width>120</width>
+             <height>0</height>
+            </size>
+           </property>
+          </widget>
+         </item>
+         <item row="11" column="0" colspan="3">
+          <widget class="Line" name="line">
+           <property name="orientation">
+            <enum>Qt::Horizontal</enum>
+           </property>
+          </widget>
+         </item>
+         <item row="0" column="1">
+          <layout class="QHBoxLayout" name="layoutFps_2" stretch="0,1">
            <item>
-            <widget class="QSpinBox" name="spinFirstFrameSec">
+            <widget class="QSpinBox" name="spinInputFps">
              <property name="minimumSize">
               <size>
                <width>90</width>
                <height>0</height>
               </size>
              </property>
-             <property name="suffix">
-              <string> sec.</string>
+             <property name="keyboardTracking">
+              <bool>false</bool>
+             </property>
+             <property name="minimum">
+              <number>1</number>
              </property>
              <property name="maximum">
-              <number>120</number>
+              <number>10000</number>
              </property>
              <property name="value">
-              <number>5</number>
+              <number>30</number>
              </property>
             </widget>
            </item>
            <item>
-            <spacer name="horizontalSpacer_17">
+            <spacer name="horizontalSpacer_14">
              <property name="orientation">
               <enum>Qt::Horizontal</enum>
              </property>
+             <property name="sizeType">
+              <enum>QSizePolicy::Expanding</enum>
+             </property>
              <property name="sizeHint" stdset="0">
               <size>
                <width>6</width>
@@ -611,52 +459,268 @@ The preview will show the last frame of the video for the specified duration</st
            </item>
           </layout>
          </item>
-         <item row="10" column="0">
-          <widget class="QLabel" name="labelFfmpegLocation">
+         <item row="3" column="0">
+          <layout class="QHBoxLayout" name="horizontalLayout_9">
+           <item>
+            <spacer name="horizontalSpacer_16">
+             <property name="orientation">
+              <enum>Qt::Horizontal</enum>
+             </property>
+             <property name="sizeHint" stdset="0">
+              <size>
+               <width>40</width>
+               <height>20</height>
+              </size>
+             </property>
+            </spacer>
+           </item>
+           <item>
+            <widget class="QCheckBox" name="extendResultCheckBox">
+             <property name="toolTip">
+              <string>Extend the last frame in the exported video by the specified duration</string>
+             </property>
+             <property name="text">
+              <string>Extend result for:</string>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </item>
+         <item row="0" column="2">
+          <widget class="QPushButton" name="buttonLockFps">
+           <property name="toolTip">
+            <string>Use the same rate for Input FPS and Video FPS</string>
+           </property>
            <property name="text">
-            <string>FFmpeg:</string>
+            <string/>
            </property>
-           <property name="alignment">
-            <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+           <property name="icon">
+            <iconset theme="lock"/>
            </property>
-           <property name="buddy">
-            <cstring>editFfmpegPath</cstring>
+           <property name="checkable">
+            <bool>true</bool>
            </property>
           </widget>
          </item>
-         <item row="8" column="0">
-          <layout class="QHBoxLayout" name="horizontalLayout_8" stretch="1,0">
+         <item row="14" column="1">
+          <widget class="QLineEdit" name="editVideoFilePath">
+           <property name="minimumSize">
+            <size>
+             <width>120</width>
+             <height>0</height>
+            </size>
+           </property>
+           <property name="readOnly">
+            <bool>false</bool>
+           </property>
+          </widget>
+         </item>
+         <item row="1" column="1">
+          <layout class="QHBoxLayout" name="layoutFps" stretch="0,1,0">
            <item>
-            <spacer name="horizontalSpacer_12">
+            <widget class="QSpinBox" name="spinFps">
+             <property name="minimumSize">
+              <size>
+               <width>90</width>
+               <height>0</height>
+              </size>
+             </property>
+             <property name="keyboardTracking">
+              <bool>false</bool>
+             </property>
+             <property name="minimum">
+              <number>1</number>
+             </property>
+             <property name="maximum">
+              <number>60</number>
+             </property>
+             <property name="value">
+              <number>30</number>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QLabel" name="labelRealTimeCaptureNotion">
+             <property name="layoutDirection">
+              <enum>Qt::LeftToRight</enum>
+             </property>
+             <property name="text">
+              <string>Used for Capture Interval calculation</string>
+             </property>
+             <property name="alignment">
+              <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <spacer name="horizontalSpacer_11">
              <property name="orientation">
               <enum>Qt::Horizontal</enum>
              </property>
              <property name="sizeType">
-              <enum>QSizePolicy::Preferred</enum>
+              <enum>QSizePolicy::Expanding</enum>
              </property>
              <property name="sizeHint" stdset="0">
               <size>
-               <width>13</width>
-               <height>13</height>
+               <width>6</width>
+               <height>6</height>
               </size>
              </property>
             </spacer>
            </item>
+          </layout>
+         </item>
+         <item row="3" column="1">
+          <layout class="QHBoxLayout" name="horizontalLayout_6">
            <item>
-            <widget class="QCheckBox" name="checkResize">
-             <property name="sizePolicy">
-              <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
-               <horstretch>0</horstretch>
-               <verstretch>0</verstretch>
-              </sizepolicy>
+            <widget class="QSpinBox" name="spinLastFrameSec">
+             <property name="minimumSize">
+              <size>
+               <width>90</width>
+               <height>0</height>
+              </size>
+             </property>
+             <property name="suffix">
+              <string comment="Contraction of &quot;second&quot; for interval"> sec.</string>
+             </property>
+             <property name="maximum">
+              <number>120</number>
+             </property>
+             <property name="value">
+              <number>5</number>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <spacer name="horizontalSpacer_15">
+             <property name="orientation">
+              <enum>Qt::Horizontal</enum>
+             </property>
+             <property name="sizeHint" stdset="0">
+              <size>
+               <width>6</width>
+               <height>6</height>
+              </size>
+             </property>
+            </spacer>
+           </item>
+          </layout>
+         </item>
+         <item row="12" column="1">
+          <widget class="QLineEdit" name="editFfmpegPath">
+           <property name="minimumSize">
+            <size>
+             <width>120</width>
+             <height>0</height>
+            </size>
+           </property>
+           <property name="text">
+            <string>ffmpeg</string>
+           </property>
+           <property name="readOnly">
+            <bool>true</bool>
+           </property>
+          </widget>
+         </item>
+         <item row="6" column="0">
+          <layout class="QHBoxLayout" name="horizontalLayout_11">
+           <item>
+            <spacer name="horizontalSpacer_18">
+             <property name="orientation">
+              <enum>Qt::Horizontal</enum>
+             </property>
+             <property name="sizeHint" stdset="0">
+              <size>
+               <width>40</width>
+               <height>20</height>
+              </size>
+             </property>
+            </spacer>
+           </item>
+           <item>
+            <widget class="QCheckBox" name="resultPreviewCheckBox">
+             <property name="toolTip">
+              <string>Prepend a preview to the exported video.
+The preview will show the last frame of the video for the specified duration</string>
+             </property>
+             <property name="layoutDirection">
+              <enum>Qt::LeftToRight</enum>
              </property>
              <property name="text">
-              <string>Resize:</string>
+              <string>Enable preview for:</string>
              </property>
             </widget>
            </item>
           </layout>
          </item>
+         <item row="10" column="0" colspan="3">
+          <widget class="QWidget" name="wdgWarnSize" native="true">
+           <layout class="QHBoxLayout" name="lytWarnSize" stretch="0,1">
+            <property name="leftMargin">
+             <number>0</number>
+            </property>
+            <property name="topMargin">
+             <number>0</number>
+            </property>
+            <property name="rightMargin">
+             <number>0</number>
+            </property>
+            <property name="bottomMargin">
+             <number>0</number>
+            </property>
+            <item>
+             <widget class="QLabel" name="lblWarnSizeIcon"/>
+            </item>
+            <item>
+             <widget class="QLabel" name="lblWarnSizeText">
+              <property name="text">
+               <string>&lt;strong&gt;Warning:&lt;/strong&gt; video with dimensions larger than 1920 pixels is not widely supported. The export may fail and some devices will not be able to play it.</string>
+              </property>
+              <property name="textFormat">
+               <enum>Qt::RichText</enum>
+              </property>
+              <property name="wordWrap">
+               <bool>true</bool>
+              </property>
+             </widget>
+            </item>
+           </layout>
+          </widget>
+         </item>
+         <item row="2" column="0" colspan="3">
+          <widget class="QWidget" name="wdgWarnFps" native="true">
+           <layout class="QHBoxLayout" name="lytWarnFps" stretch="0,1">
+            <property name="leftMargin">
+             <number>0</number>
+            </property>
+            <property name="topMargin">
+             <number>0</number>
+            </property>
+            <property name="rightMargin">
+             <number>0</number>
+            </property>
+            <property name="bottomMargin">
+             <number>0</number>
+            </property>
+            <item>
+             <widget class="QLabel" name="lblWarnFpsIcon"/>
+            </item>
+            <item>
+             <widget class="QLabel" name="lblWarnFpsText">
+              <property name="text">
+               <string>&lt;strong&gt;Warning:&lt;/strong&gt; video with FPS beyond 30 is not widely supported. The export may fail and some devices will not be able to play it.</string>
+              </property>
+              <property name="textFormat">
+               <enum>Qt::RichText</enum>
+              </property>
+              <property name="wordWrap">
+               <bool>true</bool>
+              </property>
+             </widget>
+            </item>
+           </layout>
+          </widget>
+         </item>
         </layout>
        </item>
        <item>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.