Added NVENC preset and bitrate options

This commit is contained in:
Jaex 2016-12-02 19:35:34 +03:00
parent 17629d3d5d
commit 25014f55ab
6 changed files with 760 additions and 294 deletions

View file

@ -125,6 +125,34 @@ public enum FFmpegPreset
veryslow
}
public enum FFmpegNVENCPreset
{
[Description("Default")]
@default,
[Description("High quality 2 passes")]
slow,
[Description("High quality 1 pass")]
medium,
[Description("High performance 1 pass")]
fast,
[Description("High performance")]
hp,
[Description("High quality")]
hq,
[Description("Bluray disk")]
bd,
[Description("Low latency")]
ll,
[Description("Low latency high quality")]
llhq,
[Description("Low latency high performance")]
llhp,
[Description("Lossless")]
lossless,
[Description("Lossless high performance")]
losslesshp
}
public enum FFmpegTune
{
film, animation, grain, stillimage, psnr, ssim, fastdecode, zerolatency

View file

@ -31,29 +31,31 @@ namespace ShareX.ScreenCaptureLib
public class FFmpegOptions
{
// General
public bool OverrideCLIPath { get; set; }
public string CLIPath { get; set; }
public string VideoSource { get; set; }
public string AudioSource { get; set; }
public FFmpegVideoCodec VideoCodec { get; set; }
public FFmpegAudioCodec AudioCodec { get; set; }
public string UserArgs { get; set; }
public bool UseCustomCommands { get; set; }
public string CustomCommands { get; set; }
public bool ShowError { get; set; }
public bool OverrideCLIPath { get; set; } = false;
public string CLIPath { get; set; } = "";
public string VideoSource { get; set; } = FFmpegHelper.SourceGDIGrab;
public string AudioSource { get; set; } = FFmpegHelper.SourceNone;
public FFmpegVideoCodec VideoCodec { get; set; } = FFmpegVideoCodec.libx264;
public FFmpegAudioCodec AudioCodec { get; set; } = FFmpegAudioCodec.libvoaacenc;
public string UserArgs { get; set; } = "";
public bool UseCustomCommands { get; set; } = false;
public string CustomCommands { get; set; } = "";
public bool ShowError { get; set; } = true;
// Video
public FFmpegPreset x264_Preset { get; set; }
public int x264_CRF { get; set; }
public int VPx_bitrate { get; set; } // kbit/s
public int XviD_qscale { get; set; }
public FFmpegPaletteGenStatsMode GIFStatsMode { get; set; }
public FFmpegPaletteUseDither GIFDither { get; set; }
public FFmpegPreset x264_Preset { get; set; } = FFmpegPreset.ultrafast;
public int x264_CRF { get; set; } = 28;
public int VPx_bitrate { get; set; } = 3000; // kbit/s
public int XviD_qscale { get; set; } = 10;
public FFmpegNVENCPreset NVENC_preset { get; set; } = FFmpegNVENCPreset.@default;
public int NVENC_bitrate { get; set; } = 3000; // kbit/s
public FFmpegPaletteGenStatsMode GIFStatsMode { get; set; } = FFmpegPaletteGenStatsMode.full;
public FFmpegPaletteUseDither GIFDither { get; set; } = FFmpegPaletteUseDither.sierra2_4a;
// Audio
public int AAC_bitrate { get; set; } // kbit/s
public int Vorbis_qscale { get; set; }
public int MP3_qscale { get; set; }
public int AAC_bitrate { get; set; } = 128; // kbit/s
public int Vorbis_qscale { get; set; } = 3;
public int MP3_qscale { get; set; } = 4;
public string FFmpegPath
{
@ -119,57 +121,18 @@ public string Extension
}
}
public bool IsSourceSelected
{
get
{
return IsVideoSourceSelected || IsAudioSourceSelected;
}
}
public bool IsSourceSelected => IsVideoSourceSelected || IsAudioSourceSelected;
public bool IsVideoSourceSelected
{
get
{
return !string.IsNullOrEmpty(VideoSource) && !VideoSource.Equals(FFmpegHelper.SourceNone, StringComparison.InvariantCultureIgnoreCase);
}
}
public bool IsVideoSourceSelected => !string.IsNullOrEmpty(VideoSource) && !VideoSource.Equals(FFmpegHelper.SourceNone, StringComparison.InvariantCultureIgnoreCase);
public bool IsAudioSourceSelected
{
get
{
return !string.IsNullOrEmpty(AudioSource) && !AudioSource.Equals(FFmpegHelper.SourceNone, StringComparison.InvariantCultureIgnoreCase) &&
(!IsVideoSourceSelected || VideoCodec != FFmpegVideoCodec.gif);
}
}
public bool IsAudioSourceSelected => !string.IsNullOrEmpty(AudioSource) && !AudioSource.Equals(FFmpegHelper.SourceNone, StringComparison.InvariantCultureIgnoreCase) &&
(!IsVideoSourceSelected || VideoCodec != FFmpegVideoCodec.gif);
public FFmpegOptions()
{
// General
OverrideCLIPath = false;
VideoSource = FFmpegHelper.SourceGDIGrab;
AudioSource = FFmpegHelper.SourceNone;
VideoCodec = FFmpegVideoCodec.libx264;
AudioCodec = FFmpegAudioCodec.libvoaacenc;
UserArgs = "";
ShowError = true;
// Video
x264_CRF = 28;
x264_Preset = FFmpegPreset.ultrafast;
VPx_bitrate = 3000;
XviD_qscale = 10;
GIFStatsMode = FFmpegPaletteGenStatsMode.full;
GIFDither = FFmpegPaletteUseDither.sierra2_4a;
// Audio
AAC_bitrate = 128;
Vorbis_qscale = 3;
MP3_qscale = 4;
}
public FFmpegOptions(string ffmpegPath) : this()
public FFmpegOptions(string ffmpegPath)
{
CLIPath = Helpers.GetVariableFolderPath(ffmpegPath);
}

View file

@ -90,6 +90,11 @@ private void InitializeComponent()
this.gbCodecs = new System.Windows.Forms.GroupBox();
this.btnHelp = new System.Windows.Forms.Button();
this.eiFFmpeg = new ShareX.HelpersLib.ExportImportControl();
this.tpNVENC = new System.Windows.Forms.TabPage();
this.lblNVENCBitrate = new System.Windows.Forms.Label();
this.nudNVENCBitrate = new System.Windows.Forms.NumericUpDown();
this.lblNVENCPreset = new System.Windows.Forms.Label();
this.cbNVENCPreset = new System.Windows.Forms.ComboBox();
((System.ComponentModel.ISupportInitialize)(this.nudx264CRF)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nudXvidQscale)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.tbVorbis_qscale)).BeginInit();
@ -112,6 +117,8 @@ private void InitializeComponent()
this.tpMP3.SuspendLayout();
this.gbSource.SuspendLayout();
this.gbCodecs.SuspendLayout();
this.tpNVENC.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.nudNVENCBitrate)).BeginInit();
this.SuspendLayout();
//
// lblx264CRF
@ -357,6 +364,7 @@ private void InitializeComponent()
this.tcFFmpegVideoCodecs.Controls.Add(this.tpX264);
this.tcFFmpegVideoCodecs.Controls.Add(this.tpVpx);
this.tcFFmpegVideoCodecs.Controls.Add(this.tpXvid);
this.tcFFmpegVideoCodecs.Controls.Add(this.tpNVENC);
this.tcFFmpegVideoCodecs.Controls.Add(this.tpGIF);
resources.ApplyResources(this.tcFFmpegVideoCodecs, "tcFFmpegVideoCodecs");
this.tcFFmpegVideoCodecs.Name = "tcFFmpegVideoCodecs";
@ -615,6 +623,55 @@ private void InitializeComponent()
this.eiFFmpeg.ExportRequested += new ShareX.HelpersLib.ExportImportControl.ExportEventHandler(this.eiFFmpeg_ExportRequested);
this.eiFFmpeg.ImportRequested += new ShareX.HelpersLib.ExportImportControl.ImportEventHandler(this.eiFFmpeg_ImportRequested);
//
// tpNVENC
//
this.tpNVENC.Controls.Add(this.cbNVENCPreset);
this.tpNVENC.Controls.Add(this.lblNVENCPreset);
this.tpNVENC.Controls.Add(this.nudNVENCBitrate);
this.tpNVENC.Controls.Add(this.lblNVENCBitrate);
resources.ApplyResources(this.tpNVENC, "tpNVENC");
this.tpNVENC.Name = "tpNVENC";
this.tpNVENC.UseVisualStyleBackColor = true;
//
// lblNVENCBitrate
//
resources.ApplyResources(this.lblNVENCBitrate, "lblNVENCBitrate");
this.lblNVENCBitrate.Name = "lblNVENCBitrate";
//
// nudNVENCBitrate
//
resources.ApplyResources(this.nudNVENCBitrate, "nudNVENCBitrate");
this.nudNVENCBitrate.Maximum = new decimal(new int[] {
50000,
0,
0,
0});
this.nudNVENCBitrate.Minimum = new decimal(new int[] {
100,
0,
0,
0});
this.nudNVENCBitrate.Name = "nudNVENCBitrate";
this.nudNVENCBitrate.Value = new decimal(new int[] {
3000,
0,
0,
0});
this.nudNVENCBitrate.ValueChanged += new System.EventHandler(this.nudNVENCBitrate_ValueChanged);
//
// lblNVENCPreset
//
resources.ApplyResources(this.lblNVENCPreset, "lblNVENCPreset");
this.lblNVENCPreset.Name = "lblNVENCPreset";
//
// cbNVENCPreset
//
this.cbNVENCPreset.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbNVENCPreset.FormattingEnabled = true;
resources.ApplyResources(this.cbNVENCPreset, "cbNVENCPreset");
this.cbNVENCPreset.Name = "cbNVENCPreset";
this.cbNVENCPreset.SelectedIndexChanged += new System.EventHandler(this.cbNVENCPreset_SelectedIndexChanged);
//
// FFmpegOptionsForm
//
resources.ApplyResources(this, "$this");
@ -669,6 +726,9 @@ private void InitializeComponent()
this.gbSource.PerformLayout();
this.gbCodecs.ResumeLayout(false);
this.gbCodecs.PerformLayout();
this.tpNVENC.ResumeLayout(false);
this.tpNVENC.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.nudNVENCBitrate)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
@ -736,5 +796,10 @@ private void InitializeComponent()
private System.Windows.Forms.CheckBox cbOverrideFFmpegPath;
private System.Windows.Forms.PictureBox pbAudioCodecWarning;
private System.Windows.Forms.PictureBox pbx264PresetWarning;
private System.Windows.Forms.TabPage tpNVENC;
private System.Windows.Forms.ComboBox cbNVENCPreset;
private System.Windows.Forms.Label lblNVENCPreset;
private System.Windows.Forms.NumericUpDown nudNVENCBitrate;
private System.Windows.Forms.Label lblNVENCBitrate;
}
}

View file

@ -30,6 +30,7 @@
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Windows.Forms;
namespace ShareX.ScreenCaptureLib
@ -52,6 +53,7 @@ public FFmpegOptionsForm(ScreencastOptions options)
cboAudioCodec.Items.AddRange(Helpers.GetEnumDescriptions<FFmpegAudioCodec>());
cbx264Preset.Items.AddRange(Helpers.GetEnumDescriptions<FFmpegPreset>());
cbGIFStatsMode.Items.AddRange(Helpers.GetEnumDescriptions<FFmpegPaletteGenStatsMode>());
cbNVENCPreset.Items.AddRange(Helpers.GetEnums<FFmpegNVENCPreset>().Select(x => $"{x} ({x.GetDescription()})").ToArray());
cbGIFDither.Items.AddRange(Helpers.GetEnumDescriptions<FFmpegPaletteUseDither>());
SettingsLoad();
@ -90,6 +92,10 @@ private void SettingsLoad()
// Xvid
nudXvidQscale.SetValue(Options.FFmpeg.XviD_qscale);
// NVENC
nudNVENCBitrate.SetValue(Options.FFmpeg.NVENC_bitrate);
cbNVENCPreset.SelectedIndex = (int)Options.FFmpeg.NVENC_preset;
// GIF
cbGIFStatsMode.SelectedIndex = (int)Options.FFmpeg.GIFStatsMode;
cbGIFDither.SelectedIndex = (int)Options.FFmpeg.GIFDither;
@ -302,9 +308,13 @@ private void cboVideoCodec_SelectedIndexChanged(object sender, EventArgs e)
case FFmpegVideoCodec.libxvid:
tcFFmpegVideoCodecs.SelectedIndex = 2;
break;
case FFmpegVideoCodec.gif:
case FFmpegVideoCodec.h264_nvenc:
case FFmpegVideoCodec.hevc_nvenc:
tcFFmpegVideoCodecs.SelectedIndex = 3;
break;
case FFmpegVideoCodec.gif:
tcFFmpegVideoCodecs.SelectedIndex = 4;
break;
}
}
@ -359,6 +369,18 @@ private void nudQscale_ValueChanged(object sender, EventArgs e)
UpdateUI();
}
private void cbNVENCPreset_SelectedIndexChanged(object sender, EventArgs e)
{
Options.FFmpeg.NVENC_preset = (FFmpegNVENCPreset)cbNVENCPreset.SelectedIndex;
UpdateUI();
}
private void nudNVENCBitrate_ValueChanged(object sender, EventArgs e)
{
Options.FFmpeg.NVENC_bitrate = (int)nudNVENCBitrate.Value;
UpdateUI();
}
private void cbGIFStatsMode_SelectedIndexChanged(object sender, EventArgs e)
{
Options.FFmpeg.GIFStatsMode = (FFmpegPaletteGenStatsMode)cbGIFStatsMode.SelectedIndex;

View file

@ -146,6 +146,9 @@
<data name="&gt;&gt;lblx264CRF.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<metadata name="ttHelpTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<data name="nudx264CRF.Location" type="System.Drawing.Point, System.Drawing">
<value>144, 12</value>
</data>
@ -159,9 +162,6 @@
<data name="nudx264CRF.TextAlign" type="System.Windows.Forms.HorizontalAlignment, System.Windows.Forms">
<value>Center</value>
</data>
<metadata name="ttHelpTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<data name="nudx264CRF.ToolTip" xml:space="preserve">
<value>Constant Rate Factor (CRF): The value can be between 0-51, where 0 is lossless, 30 is default, and 51 is the worst possible.
A higher value means bad quality, but a low file size.</value>
@ -178,6 +178,9 @@ A higher value means bad quality, but a low file size.</value>
<data name="&gt;&gt;nudx264CRF.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<metadata name="ttHelpTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<data name="nudXvidQscale.Location" type="System.Drawing.Point, System.Drawing">
<value>144, 12</value>
</data>
@ -526,6 +529,66 @@ Otherwise it can't keep up with recording and a lot of frame drops will happen.<
<data name="&gt;&gt;lblXvidQscale.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="&gt;&gt;btnDownload.Name" xml:space="preserve">
<value>btnDownload</value>
</data>
<data name="&gt;&gt;btnDownload.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;btnDownload.Parent" xml:space="preserve">
<value>gbFFmpegExe</value>
</data>
<data name="&gt;&gt;btnDownload.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;btnFFmpegBrowse.Name" xml:space="preserve">
<value>btnFFmpegBrowse</value>
</data>
<data name="&gt;&gt;btnFFmpegBrowse.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;btnFFmpegBrowse.Parent" xml:space="preserve">
<value>gbFFmpegExe</value>
</data>
<data name="&gt;&gt;btnFFmpegBrowse.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="&gt;&gt;txtFFmpegPath.Name" xml:space="preserve">
<value>txtFFmpegPath</value>
</data>
<data name="&gt;&gt;txtFFmpegPath.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;txtFFmpegPath.Parent" xml:space="preserve">
<value>gbFFmpegExe</value>
</data>
<data name="&gt;&gt;txtFFmpegPath.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="gbFFmpegExe.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 8</value>
</data>
<data name="gbFFmpegExe.Size" type="System.Drawing.Size, System.Drawing">
<value>648, 56</value>
</data>
<data name="gbFFmpegExe.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="gbFFmpegExe.Text" xml:space="preserve">
<value>FFmpeg path</value>
</data>
<data name="&gt;&gt;gbFFmpegExe.Name" xml:space="preserve">
<value>gbFFmpegExe</value>
</data>
<data name="&gt;&gt;gbFFmpegExe.Type" xml:space="preserve">
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;gbFFmpegExe.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;gbFFmpegExe.ZOrder" xml:space="preserve">
<value>8</value>
</data>
<data name="btnDownload.Location" type="System.Drawing.Point, System.Drawing">
<value>552, 22</value>
</data>
@ -595,30 +658,6 @@ Otherwise it can't keep up with recording and a lot of frame drops will happen.<
<data name="&gt;&gt;txtFFmpegPath.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="gbFFmpegExe.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 8</value>
</data>
<data name="gbFFmpegExe.Size" type="System.Drawing.Size, System.Drawing">
<value>648, 56</value>
</data>
<data name="gbFFmpegExe.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="gbFFmpegExe.Text" xml:space="preserve">
<value>FFmpeg path</value>
</data>
<data name="&gt;&gt;gbFFmpegExe.Name" xml:space="preserve">
<value>gbFFmpegExe</value>
</data>
<data name="&gt;&gt;gbFFmpegExe.Type" xml:space="preserve">
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;gbFFmpegExe.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;gbFFmpegExe.ZOrder" xml:space="preserve">
<value>8</value>
</data>
<data name="cbOverrideFFmpegPath.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
@ -646,6 +685,57 @@ Otherwise it can't keep up with recording and a lot of frame drops will happen.<
<data name="&gt;&gt;cbOverrideFFmpegPath.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;cbCustomCommands.Name" xml:space="preserve">
<value>cbCustomCommands</value>
</data>
<data name="&gt;&gt;cbCustomCommands.Type" xml:space="preserve">
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;cbCustomCommands.Parent" xml:space="preserve">
<value>gbCommandLinePreview</value>
</data>
<data name="&gt;&gt;cbCustomCommands.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;txtCommandLinePreview.Name" xml:space="preserve">
<value>txtCommandLinePreview</value>
</data>
<data name="&gt;&gt;txtCommandLinePreview.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;txtCommandLinePreview.Parent" xml:space="preserve">
<value>gbCommandLinePreview</value>
</data>
<data name="&gt;&gt;txtCommandLinePreview.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="gbCommandLinePreview.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 409</value>
</data>
<data name="gbCommandLinePreview.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>8, 8, 8, 8</value>
</data>
<data name="gbCommandLinePreview.Size" type="System.Drawing.Size, System.Drawing">
<value>648, 96</value>
</data>
<data name="gbCommandLinePreview.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="gbCommandLinePreview.Text" xml:space="preserve">
<value>Command line preview</value>
</data>
<data name="&gt;&gt;gbCommandLinePreview.Name" xml:space="preserve">
<value>gbCommandLinePreview</value>
</data>
<data name="&gt;&gt;gbCommandLinePreview.Type" xml:space="preserve">
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;gbCommandLinePreview.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;gbCommandLinePreview.ZOrder" xml:space="preserve">
<value>7</value>
</data>
<data name="cbCustomCommands.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
@ -706,32 +796,53 @@ Otherwise it can't keep up with recording and a lot of frame drops will happen.<
<data name="&gt;&gt;txtCommandLinePreview.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="gbCommandLinePreview.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 409</value>
<data name="&gt;&gt;btnFFmpegHelp.Name" xml:space="preserve">
<value>btnFFmpegHelp</value>
</data>
<data name="gbCommandLinePreview.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>8, 8, 8, 8</value>
<data name="&gt;&gt;btnFFmpegHelp.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="gbCommandLinePreview.Size" type="System.Drawing.Size, System.Drawing">
<value>648, 96</value>
<data name="&gt;&gt;btnFFmpegHelp.Parent" xml:space="preserve">
<value>gbCommandLineArgs</value>
</data>
<data name="gbCommandLinePreview.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
<data name="&gt;&gt;btnFFmpegHelp.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="gbCommandLinePreview.Text" xml:space="preserve">
<value>Command line preview</value>
<data name="&gt;&gt;tbUserArgs.Name" xml:space="preserve">
<value>tbUserArgs</value>
</data>
<data name="&gt;&gt;gbCommandLinePreview.Name" xml:space="preserve">
<value>gbCommandLinePreview</value>
<data name="&gt;&gt;tbUserArgs.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;gbCommandLinePreview.Type" xml:space="preserve">
<data name="&gt;&gt;tbUserArgs.Parent" xml:space="preserve">
<value>gbCommandLineArgs</value>
</data>
<data name="&gt;&gt;tbUserArgs.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="gbCommandLineArgs.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 340</value>
</data>
<data name="gbCommandLineArgs.Size" type="System.Drawing.Size, System.Drawing">
<value>648, 56</value>
</data>
<data name="gbCommandLineArgs.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="gbCommandLineArgs.Text" xml:space="preserve">
<value>Additional command line arguments</value>
</data>
<data name="&gt;&gt;gbCommandLineArgs.Name" xml:space="preserve">
<value>gbCommandLineArgs</value>
</data>
<data name="&gt;&gt;gbCommandLineArgs.Type" xml:space="preserve">
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;gbCommandLinePreview.Parent" xml:space="preserve">
<data name="&gt;&gt;gbCommandLineArgs.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;gbCommandLinePreview.ZOrder" xml:space="preserve">
<value>7</value>
<data name="&gt;&gt;gbCommandLineArgs.ZOrder" xml:space="preserve">
<value>9</value>
</data>
<data name="btnFFmpegHelp.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
@ -784,30 +895,6 @@ Otherwise it can't keep up with recording and a lot of frame drops will happen.<
<data name="&gt;&gt;tbUserArgs.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="gbCommandLineArgs.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 340</value>
</data>
<data name="gbCommandLineArgs.Size" type="System.Drawing.Size, System.Drawing">
<value>648, 56</value>
</data>
<data name="gbCommandLineArgs.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="gbCommandLineArgs.Text" xml:space="preserve">
<value>Additional command line arguments</value>
</data>
<data name="&gt;&gt;gbCommandLineArgs.Name" xml:space="preserve">
<value>gbCommandLineArgs</value>
</data>
<data name="&gt;&gt;gbCommandLineArgs.Type" xml:space="preserve">
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;gbCommandLineArgs.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;gbCommandLineArgs.ZOrder" xml:space="preserve">
<value>9</value>
</data>
<data name="tpX264.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 22</value>
</data>
@ -835,6 +922,288 @@ Otherwise it can't keep up with recording and a lot of frame drops will happen.<
<data name="&gt;&gt;tpX264.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;lblVP8BitrateK.Name" xml:space="preserve">
<value>lblVP8BitrateK</value>
</data>
<data name="&gt;&gt;lblVP8BitrateK.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;lblVP8BitrateK.Parent" xml:space="preserve">
<value>tpVpx</value>
</data>
<data name="&gt;&gt;lblVP8BitrateK.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;nudVP8Bitrate.Name" xml:space="preserve">
<value>nudVP8Bitrate</value>
</data>
<data name="&gt;&gt;nudVP8Bitrate.Type" xml:space="preserve">
<value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;nudVP8Bitrate.Parent" xml:space="preserve">
<value>tpVpx</value>
</data>
<data name="&gt;&gt;nudVP8Bitrate.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="&gt;&gt;lblVP8Bitrate.Name" xml:space="preserve">
<value>lblVP8Bitrate</value>
</data>
<data name="&gt;&gt;lblVP8Bitrate.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;lblVP8Bitrate.Parent" xml:space="preserve">
<value>tpVpx</value>
</data>
<data name="&gt;&gt;lblVP8Bitrate.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="tpVpx.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 22</value>
</data>
<data name="tpVpx.Size" type="System.Drawing.Size, System.Drawing">
<value>304, 70</value>
</data>
<data name="tpVpx.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="tpVpx.Text" xml:space="preserve">
<value>VP8</value>
<comment>@Invariant</comment></data>
<data name="&gt;&gt;tpVpx.Name" xml:space="preserve">
<value>tpVpx</value>
</data>
<data name="&gt;&gt;tpVpx.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tpVpx.Parent" xml:space="preserve">
<value>tcFFmpegVideoCodecs</value>
</data>
<data name="&gt;&gt;tpVpx.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="tpXvid.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 22</value>
</data>
<data name="tpXvid.Size" type="System.Drawing.Size, System.Drawing">
<value>304, 70</value>
</data>
<data name="tpXvid.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="tpXvid.Text" xml:space="preserve">
<value>Xvid</value>
<comment>@Invariant</comment></data>
<data name="&gt;&gt;tpXvid.Name" xml:space="preserve">
<value>tpXvid</value>
</data>
<data name="&gt;&gt;tpXvid.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tpXvid.Parent" xml:space="preserve">
<value>tcFFmpegVideoCodecs</value>
</data>
<data name="&gt;&gt;tpXvid.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="cbNVENCPreset.Location" type="System.Drawing.Point, System.Drawing">
<value>96, 12</value>
</data>
<data name="cbNVENCPreset.Size" type="System.Drawing.Size, System.Drawing">
<value>192, 21</value>
</data>
<data name="cbNVENCPreset.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="&gt;&gt;cbNVENCPreset.Name" xml:space="preserve">
<value>cbNVENCPreset</value>
</data>
<data name="&gt;&gt;cbNVENCPreset.Type" xml:space="preserve">
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;cbNVENCPreset.Parent" xml:space="preserve">
<value>tpNVENC</value>
</data>
<data name="&gt;&gt;cbNVENCPreset.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="lblNVENCPreset.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="lblNVENCPreset.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 16</value>
</data>
<data name="lblNVENCPreset.Size" type="System.Drawing.Size, System.Drawing">
<value>40, 13</value>
</data>
<data name="lblNVENCPreset.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="lblNVENCPreset.Text" xml:space="preserve">
<value>Preset:</value>
</data>
<data name="&gt;&gt;lblNVENCPreset.Name" xml:space="preserve">
<value>lblNVENCPreset</value>
</data>
<data name="&gt;&gt;lblNVENCPreset.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;lblNVENCPreset.Parent" xml:space="preserve">
<value>tpNVENC</value>
</data>
<data name="&gt;&gt;lblNVENCPreset.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="nudNVENCBitrate.Location" type="System.Drawing.Point, System.Drawing">
<value>96, 36</value>
</data>
<data name="nudNVENCBitrate.Size" type="System.Drawing.Size, System.Drawing">
<value>88, 20</value>
</data>
<data name="nudNVENCBitrate.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="nudNVENCBitrate.TextAlign" type="System.Windows.Forms.HorizontalAlignment, System.Windows.Forms">
<value>Center</value>
</data>
<data name="&gt;&gt;nudNVENCBitrate.Name" xml:space="preserve">
<value>nudNVENCBitrate</value>
</data>
<data name="&gt;&gt;nudNVENCBitrate.Type" xml:space="preserve">
<value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;nudNVENCBitrate.Parent" xml:space="preserve">
<value>tpNVENC</value>
</data>
<data name="&gt;&gt;nudNVENCBitrate.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="lblNVENCBitrate.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="lblNVENCBitrate.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 40</value>
</data>
<data name="lblNVENCBitrate.Size" type="System.Drawing.Size, System.Drawing">
<value>40, 13</value>
</data>
<data name="lblNVENCBitrate.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="lblNVENCBitrate.Text" xml:space="preserve">
<value>Bitrate:</value>
</data>
<data name="&gt;&gt;lblNVENCBitrate.Name" xml:space="preserve">
<value>lblNVENCBitrate</value>
</data>
<data name="&gt;&gt;lblNVENCBitrate.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;lblNVENCBitrate.Parent" xml:space="preserve">
<value>tpNVENC</value>
</data>
<data name="&gt;&gt;lblNVENCBitrate.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="tpNVENC.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 22</value>
</data>
<data name="tpNVENC.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="tpNVENC.Size" type="System.Drawing.Size, System.Drawing">
<value>304, 70</value>
</data>
<data name="tpNVENC.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="tpNVENC.Text" xml:space="preserve">
<value>NVENC</value>
</data>
<data name="&gt;&gt;tpNVENC.Name" xml:space="preserve">
<value>tpNVENC</value>
</data>
<data name="&gt;&gt;tpNVENC.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tpNVENC.Parent" xml:space="preserve">
<value>tcFFmpegVideoCodecs</value>
</data>
<data name="&gt;&gt;tpNVENC.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="&gt;&gt;lblGIFDither.Name" xml:space="preserve">
<value>lblGIFDither</value>
</data>
<data name="&gt;&gt;lblGIFDither.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;lblGIFDither.Parent" xml:space="preserve">
<value>tpGIF</value>
</data>
<data name="&gt;&gt;lblGIFDither.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="&gt;&gt;lblGIFStatsMode.Name" xml:space="preserve">
<value>lblGIFStatsMode</value>
</data>
<data name="&gt;&gt;lblGIFStatsMode.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;lblGIFStatsMode.Parent" xml:space="preserve">
<value>tpGIF</value>
</data>
<data name="&gt;&gt;lblGIFStatsMode.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="tpGIF.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 22</value>
</data>
<data name="tpGIF.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="tpGIF.Size" type="System.Drawing.Size, System.Drawing">
<value>304, 70</value>
</data>
<data name="tpGIF.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="tpGIF.Text" xml:space="preserve">
<value>GIF</value>
<comment>@Invariant</comment></data>
<data name="&gt;&gt;tpGIF.Name" xml:space="preserve">
<value>tpGIF</value>
</data>
<data name="&gt;&gt;tpGIF.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tpGIF.Parent" xml:space="preserve">
<value>tcFFmpegVideoCodecs</value>
</data>
<data name="&gt;&gt;tpGIF.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="tcFFmpegVideoCodecs.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 56</value>
</data>
<data name="tcFFmpegVideoCodecs.Size" type="System.Drawing.Size, System.Drawing">
<value>312, 96</value>
</data>
<data name="tcFFmpegVideoCodecs.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="&gt;&gt;tcFFmpegVideoCodecs.Name" xml:space="preserve">
<value>tcFFmpegVideoCodecs</value>
</data>
<data name="&gt;&gt;tcFFmpegVideoCodecs.Type" xml:space="preserve">
<value>System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tcFFmpegVideoCodecs.Parent" xml:space="preserve">
<value>gbCodecs</value>
</data>
<data name="&gt;&gt;tcFFmpegVideoCodecs.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<data name="lblVP8BitrateK.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
@ -916,54 +1285,6 @@ Otherwise it can't keep up with recording and a lot of frame drops will happen.<
<data name="&gt;&gt;lblVP8Bitrate.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="tpVpx.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 22</value>
</data>
<data name="tpVpx.Size" type="System.Drawing.Size, System.Drawing">
<value>304, 70</value>
</data>
<data name="tpVpx.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="tpVpx.Text" xml:space="preserve">
<value>VP8</value>
<comment>@Invariant</comment></data>
<data name="&gt;&gt;tpVpx.Name" xml:space="preserve">
<value>tpVpx</value>
</data>
<data name="&gt;&gt;tpVpx.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tpVpx.Parent" xml:space="preserve">
<value>tcFFmpegVideoCodecs</value>
</data>
<data name="&gt;&gt;tpVpx.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="tpXvid.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 22</value>
</data>
<data name="tpXvid.Size" type="System.Drawing.Size, System.Drawing">
<value>304, 70</value>
</data>
<data name="tpXvid.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="tpXvid.Text" xml:space="preserve">
<value>Xvid</value>
<comment>@Invariant</comment></data>
<data name="&gt;&gt;tpXvid.Name" xml:space="preserve">
<value>tpXvid</value>
</data>
<data name="&gt;&gt;tpXvid.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tpXvid.Parent" xml:space="preserve">
<value>tcFFmpegVideoCodecs</value>
</data>
<data name="&gt;&gt;tpXvid.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="lblGIFDither.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
@ -1021,54 +1342,6 @@ Otherwise it can't keep up with recording and a lot of frame drops will happen.<
<data name="&gt;&gt;lblGIFStatsMode.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="tpGIF.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 22</value>
</data>
<data name="tpGIF.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="tpGIF.Size" type="System.Drawing.Size, System.Drawing">
<value>304, 70</value>
</data>
<data name="tpGIF.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="tpGIF.Text" xml:space="preserve">
<value>GIF</value>
<comment>@Invariant</comment></data>
<data name="&gt;&gt;tpGIF.Name" xml:space="preserve">
<value>tpGIF</value>
</data>
<data name="&gt;&gt;tpGIF.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tpGIF.Parent" xml:space="preserve">
<value>tcFFmpegVideoCodecs</value>
</data>
<data name="&gt;&gt;tpGIF.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="tcFFmpegVideoCodecs.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 56</value>
</data>
<data name="tcFFmpegVideoCodecs.Size" type="System.Drawing.Size, System.Drawing">
<value>312, 96</value>
</data>
<data name="tcFFmpegVideoCodecs.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="&gt;&gt;tcFFmpegVideoCodecs.Name" xml:space="preserve">
<value>tcFFmpegVideoCodecs</value>
</data>
<data name="&gt;&gt;tcFFmpegVideoCodecs.Type" xml:space="preserve">
<value>System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tcFFmpegVideoCodecs.Parent" xml:space="preserve">
<value>gbCodecs</value>
</data>
<data name="&gt;&gt;tcFFmpegVideoCodecs.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<data name="btnTest.Location" type="System.Drawing.Point, System.Drawing">
<value>176, 404</value>
</data>
@ -1117,20 +1390,62 @@ Otherwise it can't keep up with recording and a lot of frame drops will happen.<
<data name="&gt;&gt;btnCopyPreview.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="lblAACQuality.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
<data name="&gt;&gt;tpAAC.Name" xml:space="preserve">
<value>tpAAC</value>
</data>
<data name="lblAACQuality.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 16</value>
<data name="&gt;&gt;tpAAC.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="lblAACQuality.Size" type="System.Drawing.Size, System.Drawing">
<value>40, 13</value>
<data name="&gt;&gt;tpAAC.Parent" xml:space="preserve">
<value>tcFFmpegAudioCodecs</value>
</data>
<data name="lblAACQuality.TabIndex" type="System.Int32, mscorlib">
<data name="&gt;&gt;tpAAC.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="lblAACQuality.Text" xml:space="preserve">
<value>Bitrate:</value>
<data name="&gt;&gt;tpVorbis.Name" xml:space="preserve">
<value>tpVorbis</value>
</data>
<data name="&gt;&gt;tpVorbis.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tpVorbis.Parent" xml:space="preserve">
<value>tcFFmpegAudioCodecs</value>
</data>
<data name="&gt;&gt;tpVorbis.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="&gt;&gt;tpMP3.Name" xml:space="preserve">
<value>tpMP3</value>
</data>
<data name="&gt;&gt;tpMP3.Type" xml:space="preserve">
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tpMP3.Parent" xml:space="preserve">
<value>tcFFmpegAudioCodecs</value>
</data>
<data name="&gt;&gt;tpMP3.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="tcFFmpegAudioCodecs.Location" type="System.Drawing.Point, System.Drawing">
<value>328, 56</value>
</data>
<data name="tcFFmpegAudioCodecs.Size" type="System.Drawing.Size, System.Drawing">
<value>312, 96</value>
</data>
<data name="tcFFmpegAudioCodecs.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="&gt;&gt;tcFFmpegAudioCodecs.Name" xml:space="preserve">
<value>tcFFmpegAudioCodecs</value>
</data>
<data name="&gt;&gt;tcFFmpegAudioCodecs.Type" xml:space="preserve">
<value>System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tcFFmpegAudioCodecs.Parent" xml:space="preserve">
<value>gbCodecs</value>
</data>
<data name="&gt;&gt;tcFFmpegAudioCodecs.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="&gt;&gt;lblAACQuality.Name" xml:space="preserve">
<value>lblAACQuality</value>
@ -1171,20 +1486,32 @@ Otherwise it can't keep up with recording and a lot of frame drops will happen.<
<data name="&gt;&gt;tpAAC.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="lblVorbisQuality.AutoSize" type="System.Boolean, mscorlib">
<data name="lblAACQuality.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="lblVorbisQuality.Location" type="System.Drawing.Point, System.Drawing">
<data name="lblAACQuality.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 16</value>
</data>
<data name="lblVorbisQuality.Size" type="System.Drawing.Size, System.Drawing">
<value>42, 13</value>
<data name="lblAACQuality.Size" type="System.Drawing.Size, System.Drawing">
<value>40, 13</value>
</data>
<data name="lblVorbisQuality.TabIndex" type="System.Int32, mscorlib">
<data name="lblAACQuality.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="lblVorbisQuality.Text" xml:space="preserve">
<value>Quality:</value>
<data name="lblAACQuality.Text" xml:space="preserve">
<value>Bitrate:</value>
</data>
<data name="&gt;&gt;lblAACQuality.Name" xml:space="preserve">
<value>lblAACQuality</value>
</data>
<data name="&gt;&gt;lblAACQuality.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;lblAACQuality.Parent" xml:space="preserve">
<value>tpAAC</value>
</data>
<data name="&gt;&gt;lblAACQuality.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="&gt;&gt;lblVorbisQuality.Name" xml:space="preserve">
<value>lblVorbisQuality</value>
@ -1225,21 +1552,33 @@ Otherwise it can't keep up with recording and a lot of frame drops will happen.<
<data name="&gt;&gt;tpVorbis.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="lblMP3Quality.AutoSize" type="System.Boolean, mscorlib">
<data name="lblVorbisQuality.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="lblMP3Quality.Location" type="System.Drawing.Point, System.Drawing">
<data name="lblVorbisQuality.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 16</value>
</data>
<data name="lblMP3Quality.Size" type="System.Drawing.Size, System.Drawing">
<data name="lblVorbisQuality.Size" type="System.Drawing.Size, System.Drawing">
<value>42, 13</value>
</data>
<data name="lblMP3Quality.TabIndex" type="System.Int32, mscorlib">
<data name="lblVorbisQuality.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="lblMP3Quality.Text" xml:space="preserve">
<data name="lblVorbisQuality.Text" xml:space="preserve">
<value>Quality:</value>
</data>
<data name="&gt;&gt;lblVorbisQuality.Name" xml:space="preserve">
<value>lblVorbisQuality</value>
</data>
<data name="&gt;&gt;lblVorbisQuality.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;lblVorbisQuality.Parent" xml:space="preserve">
<value>tpVorbis</value>
</data>
<data name="&gt;&gt;lblVorbisQuality.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="&gt;&gt;lblMP3Quality.Name" xml:space="preserve">
<value>lblMP3Quality</value>
</data>
@ -1279,26 +1618,32 @@ Otherwise it can't keep up with recording and a lot of frame drops will happen.<
<data name="&gt;&gt;tpMP3.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="tcFFmpegAudioCodecs.Location" type="System.Drawing.Point, System.Drawing">
<value>328, 56</value>
<data name="lblMP3Quality.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="tcFFmpegAudioCodecs.Size" type="System.Drawing.Size, System.Drawing">
<value>312, 96</value>
<data name="lblMP3Quality.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 16</value>
</data>
<data name="tcFFmpegAudioCodecs.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
<data name="lblMP3Quality.Size" type="System.Drawing.Size, System.Drawing">
<value>42, 13</value>
</data>
<data name="&gt;&gt;tcFFmpegAudioCodecs.Name" xml:space="preserve">
<value>tcFFmpegAudioCodecs</value>
<data name="lblMP3Quality.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;tcFFmpegAudioCodecs.Type" xml:space="preserve">
<value>System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<data name="lblMP3Quality.Text" xml:space="preserve">
<value>Quality:</value>
</data>
<data name="&gt;&gt;tcFFmpegAudioCodecs.Parent" xml:space="preserve">
<value>gbCodecs</value>
<data name="&gt;&gt;lblMP3Quality.Name" xml:space="preserve">
<value>lblMP3Quality</value>
</data>
<data name="&gt;&gt;tcFFmpegAudioCodecs.ZOrder" xml:space="preserve">
<value>5</value>
<data name="&gt;&gt;lblMP3Quality.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;lblMP3Quality.Parent" xml:space="preserve">
<value>tpMP3</value>
</data>
<data name="&gt;&gt;lblMP3Quality.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="cboVideoSource.Location" type="System.Drawing.Point, System.Drawing">
<value>184, 25</value>
@ -1444,6 +1789,78 @@ Otherwise it can't keep up with recording and a lot of frame drops will happen.<
<data name="&gt;&gt;lblAudioCodec.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="&gt;&gt;btnHelperDevicesHelp.Name" xml:space="preserve">
<value>btnHelperDevicesHelp</value>
</data>
<data name="&gt;&gt;btnHelperDevicesHelp.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;btnHelperDevicesHelp.Parent" xml:space="preserve">
<value>gbSource</value>
</data>
<data name="&gt;&gt;btnHelperDevicesHelp.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;lblHelperDevices.Name" xml:space="preserve">
<value>lblHelperDevices</value>
</data>
<data name="&gt;&gt;lblHelperDevices.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;lblHelperDevices.Parent" xml:space="preserve">
<value>gbSource</value>
</data>
<data name="&gt;&gt;lblHelperDevices.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="&gt;&gt;btnInstallHelperDevices.Name" xml:space="preserve">
<value>btnInstallHelperDevices</value>
</data>
<data name="&gt;&gt;btnInstallHelperDevices.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;btnInstallHelperDevices.Parent" xml:space="preserve">
<value>gbSource</value>
</data>
<data name="&gt;&gt;btnInstallHelperDevices.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="&gt;&gt;btnRefreshSources.Name" xml:space="preserve">
<value>btnRefreshSources</value>
</data>
<data name="&gt;&gt;btnRefreshSources.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;btnRefreshSources.Parent" xml:space="preserve">
<value>gbSource</value>
</data>
<data name="&gt;&gt;btnRefreshSources.ZOrder" xml:space="preserve">
<value>7</value>
</data>
<data name="gbSource.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 68</value>
</data>
<data name="gbSource.Size" type="System.Drawing.Size, System.Drawing">
<value>648, 92</value>
</data>
<data name="gbSource.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="gbSource.Text" xml:space="preserve">
<value>Sources</value>
</data>
<data name="&gt;&gt;gbSource.Name" xml:space="preserve">
<value>gbSource</value>
</data>
<data name="&gt;&gt;gbSource.Type" xml:space="preserve">
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;gbSource.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;gbSource.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="btnHelperDevicesHelp.Location" type="System.Drawing.Point, System.Drawing">
<value>168, 56</value>
</data>
@ -1543,30 +1960,6 @@ Otherwise it can't keep up with recording and a lot of frame drops will happen.<
<data name="&gt;&gt;btnRefreshSources.ZOrder" xml:space="preserve">
<value>7</value>
</data>
<data name="gbSource.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 68</value>
</data>
<data name="gbSource.Size" type="System.Drawing.Size, System.Drawing">
<value>648, 92</value>
</data>
<data name="gbSource.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="gbSource.Text" xml:space="preserve">
<value>Sources</value>
</data>
<data name="&gt;&gt;gbSource.Name" xml:space="preserve">
<value>gbSource</value>
</data>
<data name="&gt;&gt;gbSource.Type" xml:space="preserve">
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;gbSource.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;gbSource.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="gbCodecs.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 168</value>
</data>

View file

@ -41,12 +41,7 @@ public class ScreencastOptions
public Rectangle CaptureArea { get; set; }
public float Duration { get; set; }
public bool DrawCursor { get; set; }
public FFmpegOptions FFmpeg { get; set; }
public ScreencastOptions()
{
FFmpeg = new FFmpegOptions();
}
public FFmpegOptions FFmpeg { get; set; } = new FFmpegOptions();
public string GetFFmpegCommands()
{
@ -181,8 +176,8 @@ public string GetFFmpegArgs(bool isCustom = false)
break;
case FFmpegVideoCodec.h264_nvenc: // https://trac.ffmpeg.org/wiki/HWAccelIntro#NVENC
case FFmpegVideoCodec.hevc_nvenc:
args.AppendFormat("-preset {0} ", "default"); // TODO: Add preset option
args.AppendFormat("-b:v {0}k ", "10000"); // TODO: Add bitrate option
args.AppendFormat("-preset {0} ", FFmpeg.NVENC_preset);
args.AppendFormat("-b:v {0}k ", FFmpeg.NVENC_bitrate);
args.AppendFormat("-pix_fmt {0} ", "yuv420p");
break;
case FFmpegVideoCodec.gif: