Merge pull request #4447 from Scrxtchy/opus

Add libopus as an option for ffmpeg audio codec
This commit is contained in:
Jaex 2019-10-21 16:50:20 +03:00 committed by GitHub
commit 41c61d2bcf
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 542 additions and 399 deletions

View file

@ -211,6 +211,8 @@ public enum FFmpegAudioCodec
{
[Description("AAC")]
libvoaacenc,
[Description("Opus")]
libopus,
[Description("Vorbis")]
libvorbis,
[Description("MP3")]

View file

@ -42,6 +42,7 @@ private void InitializeComponent()
this.cbGIFDither = new System.Windows.Forms.ComboBox();
this.pbAudioCodecWarning = new System.Windows.Forms.PictureBox();
this.pbx264PresetWarning = new System.Windows.Forms.PictureBox();
this.tbOpusBitrate = new System.Windows.Forms.TrackBar();
this.lblCodec = new System.Windows.Forms.Label();
this.cboVideoCodec = new System.Windows.Forms.ComboBox();
this.lblx264Preset = new System.Windows.Forms.Label();
@ -76,6 +77,11 @@ private void InitializeComponent()
this.lblAMFQuality = new System.Windows.Forms.Label();
this.cbAMFUsage = new System.Windows.Forms.ComboBox();
this.lblAMFUsage = new System.Windows.Forms.Label();
this.tbQSV = new System.Windows.Forms.TabPage();
this.cbQSVPreset = new System.Windows.Forms.ComboBox();
this.lblQSVPreset = new System.Windows.Forms.Label();
this.nudQSVBitrate = new System.Windows.Forms.NumericUpDown();
this.lblQSVBitrate = new System.Windows.Forms.Label();
this.btnTest = new System.Windows.Forms.Button();
this.btnCopyPreview = new System.Windows.Forms.Button();
this.tcFFmpegAudioCodecs = new System.Windows.Forms.TabControl();
@ -85,6 +91,8 @@ private void InitializeComponent()
this.lblVorbisQuality = new System.Windows.Forms.Label();
this.tpMP3 = new System.Windows.Forms.TabPage();
this.lblMP3Quality = new System.Windows.Forms.Label();
this.tpOpus = new System.Windows.Forms.TabPage();
this.lblOpusQuality = new System.Windows.Forms.Label();
this.cboVideoSource = new System.Windows.Forms.ComboBox();
this.lblVideoSource = new System.Windows.Forms.Label();
this.cboAudioSource = new System.Windows.Forms.ComboBox();
@ -98,11 +106,6 @@ private void InitializeComponent()
this.btnRefreshSources = new System.Windows.Forms.Button();
this.gbCodecs = new System.Windows.Forms.GroupBox();
this.eiFFmpeg = new ShareX.HelpersLib.ExportImportControl();
this.tbQSV = new System.Windows.Forms.TabPage();
this.cbQSVPreset = new System.Windows.Forms.ComboBox();
this.lblQSVPreset = new System.Windows.Forms.Label();
this.nudQSVBitrate = new System.Windows.Forms.NumericUpDown();
this.lblQSVBitrate = new System.Windows.Forms.Label();
((System.ComponentModel.ISupportInitialize)(this.nudx264CRF)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nudXvidQscale)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.tbVorbis_qscale)).BeginInit();
@ -110,6 +113,7 @@ private void InitializeComponent()
((System.ComponentModel.ISupportInitialize)(this.tbAACBitrate)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pbAudioCodecWarning)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pbx264PresetWarning)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.tbOpusBitrate)).BeginInit();
this.gbFFmpegExe.SuspendLayout();
this.gbCommandLinePreview.SuspendLayout();
this.gbCommandLineArgs.SuspendLayout();
@ -122,14 +126,15 @@ private void InitializeComponent()
((System.ComponentModel.ISupportInitialize)(this.nudNVENCBitrate)).BeginInit();
this.tpGIF.SuspendLayout();
this.tbAMF.SuspendLayout();
this.tbQSV.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.nudQSVBitrate)).BeginInit();
this.tcFFmpegAudioCodecs.SuspendLayout();
this.tpAAC.SuspendLayout();
this.tpVorbis.SuspendLayout();
this.tpMP3.SuspendLayout();
this.tpOpus.SuspendLayout();
this.gbSource.SuspendLayout();
this.gbCodecs.SuspendLayout();
this.tbQSV.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.nudQSVBitrate)).BeginInit();
this.SuspendLayout();
//
// lblx264CRF
@ -266,6 +271,19 @@ private void InitializeComponent()
this.pbx264PresetWarning.TabStop = false;
this.ttHelpTip.SetToolTip(this.pbx264PresetWarning, resources.GetString("pbx264PresetWarning.ToolTip"));
//
// tbOpusBitrate
//
this.tbOpusBitrate.BackColor = System.Drawing.SystemColors.Window;
resources.ApplyResources(this.tbOpusBitrate, "tbOpusBitrate");
this.tbOpusBitrate.LargeChange = 1;
this.tbOpusBitrate.Maximum = 16;
this.tbOpusBitrate.Minimum = 1;
this.tbOpusBitrate.Name = "tbOpusBitrate";
this.tbOpusBitrate.TickStyle = System.Windows.Forms.TickStyle.Both;
this.ttHelpTip.SetToolTip(this.tbOpusBitrate, resources.GetString("tbOpusBitrate.ToolTip"));
this.tbOpusBitrate.Value = 4;
this.tbOpusBitrate.ValueChanged += new System.EventHandler(this.tbOpusBirate_ValueChanged);
//
// lblCodec
//
resources.ApplyResources(this.lblCodec, "lblCodec");
@ -544,6 +562,55 @@ private void InitializeComponent()
resources.ApplyResources(this.lblAMFUsage, "lblAMFUsage");
this.lblAMFUsage.Name = "lblAMFUsage";
//
// tbQSV
//
this.tbQSV.Controls.Add(this.cbQSVPreset);
this.tbQSV.Controls.Add(this.lblQSVPreset);
this.tbQSV.Controls.Add(this.nudQSVBitrate);
this.tbQSV.Controls.Add(this.lblQSVBitrate);
resources.ApplyResources(this.tbQSV, "tbQSV");
this.tbQSV.Name = "tbQSV";
this.tbQSV.UseVisualStyleBackColor = true;
//
// cbQSVPreset
//
this.cbQSVPreset.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbQSVPreset.FormattingEnabled = true;
resources.ApplyResources(this.cbQSVPreset, "cbQSVPreset");
this.cbQSVPreset.Name = "cbQSVPreset";
this.cbQSVPreset.SelectedIndexChanged += new System.EventHandler(this.cbQSVPreset_SelectedIndexChanged);
//
// lblQSVPreset
//
resources.ApplyResources(this.lblQSVPreset, "lblQSVPreset");
this.lblQSVPreset.Name = "lblQSVPreset";
//
// nudQSVBitrate
//
resources.ApplyResources(this.nudQSVBitrate, "nudQSVBitrate");
this.nudQSVBitrate.Maximum = new decimal(new int[] {
50000,
0,
0,
0});
this.nudQSVBitrate.Minimum = new decimal(new int[] {
100,
0,
0,
0});
this.nudQSVBitrate.Name = "nudQSVBitrate";
this.nudQSVBitrate.Value = new decimal(new int[] {
3000,
0,
0,
0});
this.nudQSVBitrate.ValueChanged += new System.EventHandler(this.nudQSVBitrate_ValueChanged);
//
// lblQSVBitrate
//
resources.ApplyResources(this.lblQSVBitrate, "lblQSVBitrate");
this.lblQSVBitrate.Name = "lblQSVBitrate";
//
// btnTest
//
resources.ApplyResources(this.btnTest, "btnTest");
@ -561,6 +628,7 @@ private void InitializeComponent()
// tcFFmpegAudioCodecs
//
this.tcFFmpegAudioCodecs.Controls.Add(this.tpAAC);
this.tcFFmpegAudioCodecs.Controls.Add(this.tpOpus);
this.tcFFmpegAudioCodecs.Controls.Add(this.tpVorbis);
this.tcFFmpegAudioCodecs.Controls.Add(this.tpMP3);
resources.ApplyResources(this.tcFFmpegAudioCodecs, "tcFFmpegAudioCodecs");
@ -606,6 +674,19 @@ private void InitializeComponent()
resources.ApplyResources(this.lblMP3Quality, "lblMP3Quality");
this.lblMP3Quality.Name = "lblMP3Quality";
//
// tpOpus
//
this.tpOpus.Controls.Add(this.tbOpusBitrate);
this.tpOpus.Controls.Add(this.lblOpusQuality);
resources.ApplyResources(this.tpOpus, "tpOpus");
this.tpOpus.Name = "tpOpus";
this.tpOpus.UseVisualStyleBackColor = true;
//
// lblOpusQuality
//
resources.ApplyResources(this.lblOpusQuality, "lblOpusQuality");
this.lblOpusQuality.Name = "lblOpusQuality";
//
// cboVideoSource
//
this.cboVideoSource.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
@ -707,55 +788,6 @@ 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);
//
// tbQSV
//
this.tbQSV.Controls.Add(this.cbQSVPreset);
this.tbQSV.Controls.Add(this.lblQSVPreset);
this.tbQSV.Controls.Add(this.nudQSVBitrate);
this.tbQSV.Controls.Add(this.lblQSVBitrate);
resources.ApplyResources(this.tbQSV, "tbQSV");
this.tbQSV.Name = "tbQSV";
this.tbQSV.UseVisualStyleBackColor = true;
//
// cbQSVPreset
//
this.cbQSVPreset.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbQSVPreset.FormattingEnabled = true;
resources.ApplyResources(this.cbQSVPreset, "cbQSVPreset");
this.cbQSVPreset.Name = "cbQSVPreset";
this.cbQSVPreset.SelectedIndexChanged += new System.EventHandler(this.cbQSVPreset_SelectedIndexChanged);
//
// lblQSVPreset
//
resources.ApplyResources(this.lblQSVPreset, "lblQSVPreset");
this.lblQSVPreset.Name = "lblQSVPreset";
//
// nudQSVBitrate
//
resources.ApplyResources(this.nudQSVBitrate, "nudQSVBitrate");
this.nudQSVBitrate.Maximum = new decimal(new int[] {
50000,
0,
0,
0});
this.nudQSVBitrate.Minimum = new decimal(new int[] {
100,
0,
0,
0});
this.nudQSVBitrate.Name = "nudQSVBitrate";
this.nudQSVBitrate.Value = new decimal(new int[] {
3000,
0,
0,
0});
this.nudQSVBitrate.ValueChanged += new System.EventHandler(this.nudQSVBitrate_ValueChanged);
//
// lblQSVBitrate
//
resources.ApplyResources(this.lblQSVBitrate, "lblQSVBitrate");
this.lblQSVBitrate.Name = "lblQSVBitrate";
//
// FFmpegOptionsForm
//
resources.ApplyResources(this, "$this");
@ -783,6 +815,7 @@ private void InitializeComponent()
((System.ComponentModel.ISupportInitialize)(this.tbAACBitrate)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pbAudioCodecWarning)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pbx264PresetWarning)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.tbOpusBitrate)).EndInit();
this.gbFFmpegExe.ResumeLayout(false);
this.gbFFmpegExe.PerformLayout();
this.gbCommandLinePreview.ResumeLayout(false);
@ -804,6 +837,9 @@ private void InitializeComponent()
this.tpGIF.PerformLayout();
this.tbAMF.ResumeLayout(false);
this.tbAMF.PerformLayout();
this.tbQSV.ResumeLayout(false);
this.tbQSV.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.nudQSVBitrate)).EndInit();
this.tcFFmpegAudioCodecs.ResumeLayout(false);
this.tpAAC.ResumeLayout(false);
this.tpAAC.PerformLayout();
@ -811,13 +847,12 @@ private void InitializeComponent()
this.tpVorbis.PerformLayout();
this.tpMP3.ResumeLayout(false);
this.tpMP3.PerformLayout();
this.tpOpus.ResumeLayout(false);
this.tpOpus.PerformLayout();
this.gbSource.ResumeLayout(false);
this.gbSource.PerformLayout();
this.gbCodecs.ResumeLayout(false);
this.gbCodecs.PerformLayout();
this.tbQSV.ResumeLayout(false);
this.tbQSV.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.nudQSVBitrate)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
@ -898,5 +933,8 @@ private void InitializeComponent()
private System.Windows.Forms.Label lblQSVPreset;
private System.Windows.Forms.NumericUpDown nudQSVBitrate;
private System.Windows.Forms.Label lblQSVBitrate;
private System.Windows.Forms.TabPage tpOpus;
private System.Windows.Forms.TrackBar tbOpusBitrate;
private System.Windows.Forms.Label lblOpusQuality;
}
}

View file

@ -194,6 +194,7 @@ private void UpdateUI()
lblAACQuality.Text = string.Format(Resources.FFmpegOptionsForm_UpdateUI_Bitrate___0_k, Options.FFmpeg.AAC_bitrate);
lblVorbisQuality.Text = Resources.FFmpegOptionsForm_UpdateUI_Quality_ + " " + Options.FFmpeg.Vorbis_qscale;
lblMP3Quality.Text = Resources.FFmpegOptionsForm_UpdateUI_Quality_ + " " + Options.FFmpeg.MP3_qscale;
lblOpusQuality.Text = string.Format(Resources.FFmpegOptionsForm_UpdateUI_Bitrate___0_k, Options.FFmpeg.Opus_bitrate);
bool isValidAudioCodec = true;
FFmpegVideoCodec videoCodec = (FFmpegVideoCodec)cboVideoCodec.SelectedIndex;
@ -202,7 +203,7 @@ private void UpdateUI()
{
FFmpegAudioCodec audioCodec = (FFmpegAudioCodec)cboAudioCodec.SelectedIndex;
if (audioCodec != FFmpegAudioCodec.libvorbis)
if (audioCodec != FFmpegAudioCodec.libvorbis && audioCodec != FFmpegAudioCodec.libopus)
{
isValidAudioCodec = false;
}
@ -380,12 +381,15 @@ private void cboAudioCodec_SelectedIndexChanged(object sender, EventArgs e)
case FFmpegAudioCodec.libvoaacenc:
tcFFmpegAudioCodecs.SelectedIndex = 0;
break;
case FFmpegAudioCodec.libvorbis:
case FFmpegAudioCodec.libopus:
tcFFmpegAudioCodecs.SelectedIndex = 1;
break;
case FFmpegAudioCodec.libmp3lame:
case FFmpegAudioCodec.libvorbis:
tcFFmpegAudioCodecs.SelectedIndex = 2;
break;
case FFmpegAudioCodec.libmp3lame:
tcFFmpegAudioCodecs.SelectedIndex = 3;
break;
}
}
@ -470,6 +474,12 @@ private void tbAACBitrate_ValueChanged(object sender, EventArgs e)
UpdateUI();
}
private void tbOpusBirate_ValueChanged(object sender, EventArgs e)
{
Options.FFmpeg.Opus_bitrate = tbOpusBitrate.Value * 32;
UpdateUI();
}
private void tbVorbis_qscale_ValueChanged(object sender, EventArgs e)
{
Options.FFmpeg.Vorbis_qscale = tbVorbis_qscale.Value;

View file

@ -146,9 +146,6 @@
<data name="&gt;&gt;lblx264CRF.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="ttHelpTip.TrayLocation" type="System.Drawing.Point, System.Drawing">
<value>17, 17</value>
</data>
<data name="nudx264CRF.Location" type="System.Drawing.Point, System.Drawing">
<value>144, 12</value>
</data>
@ -162,6 +159,9 @@
<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>
@ -424,6 +424,36 @@ Otherwise it can't keep up with recording and a lot of frame drops will happen.<
<data name="&gt;&gt;pbx264PresetWarning.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="tbOpusBitrate.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Right</value>
</data>
<data name="tbOpusBitrate.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="tbOpusBitrate.Location" type="System.Drawing.Point, System.Drawing">
<value>104, 3</value>
</data>
<data name="tbOpusBitrate.Size" type="System.Drawing.Size, System.Drawing">
<value>197, 64</value>
</data>
<data name="tbOpusBitrate.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="tbOpusBitrate.ToolTip" xml:space="preserve">
<value>Default is 128k.</value>
</data>
<data name="&gt;&gt;tbOpusBitrate.Name" xml:space="preserve">
<value>tbOpusBitrate</value>
</data>
<data name="&gt;&gt;tbOpusBitrate.Type" xml:space="preserve">
<value>System.Windows.Forms.TrackBar, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tbOpusBitrate.Parent" xml:space="preserve">
<value>tpOpus</value>
</data>
<data name="&gt;&gt;tbOpusBitrate.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="lblCodec.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
@ -526,6 +556,18 @@ 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="btnDownload.Location" type="System.Drawing.Point, System.Drawing">
<value>552, 22</value>
</data>
<data name="btnDownload.Size" type="System.Drawing.Size, System.Drawing">
<value>88, 24</value>
</data>
<data name="btnDownload.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="btnDownload.Text" xml:space="preserve">
<value>Download</value>
</data>
<data name="&gt;&gt;btnDownload.Name" xml:space="preserve">
<value>btnDownload</value>
</data>
@ -538,6 +580,18 @@ Otherwise it can't keep up with recording and a lot of frame drops will happen.<
<data name="&gt;&gt;btnDownload.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="btnFFmpegBrowse.Location" type="System.Drawing.Point, System.Drawing">
<value>512, 22</value>
</data>
<data name="btnFFmpegBrowse.Size" type="System.Drawing.Size, System.Drawing">
<value>32, 24</value>
</data>
<data name="btnFFmpegBrowse.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="btnFFmpegBrowse.Text" xml:space="preserve">
<value>...</value>
</data>
<data name="&gt;&gt;btnFFmpegBrowse.Name" xml:space="preserve">
<value>btnFFmpegBrowse</value>
</data>
@ -550,6 +604,15 @@ Otherwise it can't keep up with recording and a lot of frame drops will happen.<
<data name="&gt;&gt;btnFFmpegBrowse.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="txtFFmpegPath.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 24</value>
</data>
<data name="txtFFmpegPath.Size" type="System.Drawing.Size, System.Drawing">
<value>496, 20</value>
</data>
<data name="txtFFmpegPath.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;txtFFmpegPath.Name" xml:space="preserve">
<value>txtFFmpegPath</value>
</data>
@ -586,39 +649,6 @@ Otherwise it can't keep up with recording and a lot of frame drops will happen.<
<data name="&gt;&gt;gbFFmpegExe.ZOrder" xml:space="preserve">
<value>7</value>
</data>
<data name="btnDownload.Location" type="System.Drawing.Point, System.Drawing">
<value>552, 22</value>
</data>
<data name="btnDownload.Size" type="System.Drawing.Size, System.Drawing">
<value>88, 24</value>
</data>
<data name="btnDownload.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="btnDownload.Text" xml:space="preserve">
<value>Download</value>
</data>
<data name="btnFFmpegBrowse.Location" type="System.Drawing.Point, System.Drawing">
<value>512, 22</value>
</data>
<data name="btnFFmpegBrowse.Size" type="System.Drawing.Size, System.Drawing">
<value>32, 24</value>
</data>
<data name="btnFFmpegBrowse.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="btnFFmpegBrowse.Text" xml:space="preserve">
<value>...</value>
</data>
<data name="txtFFmpegPath.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 24</value>
</data>
<data name="txtFFmpegPath.Size" type="System.Drawing.Size, System.Drawing">
<value>496, 20</value>
</data>
<data name="txtFFmpegPath.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="cbOverrideFFmpegPath.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
@ -646,6 +676,21 @@ 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="cbCustomCommands.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="cbCustomCommands.Location" type="System.Drawing.Point, System.Drawing">
<value>376, 0</value>
</data>
<data name="cbCustomCommands.Size" type="System.Drawing.Size, System.Drawing">
<value>136, 17</value>
</data>
<data name="cbCustomCommands.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="cbCustomCommands.Text" xml:space="preserve">
<value>Use custom commands</value>
</data>
<data name="&gt;&gt;cbCustomCommands.Name" xml:space="preserve">
<value>cbCustomCommands</value>
</data>
@ -658,6 +703,27 @@ Otherwise it can't keep up with recording and a lot of frame drops will happen.<
<data name="&gt;&gt;cbCustomCommands.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="txtCommandLinePreview.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="txtCommandLinePreview.Font" type="System.Drawing.Font, System.Drawing">
<value>Microsoft Sans Serif, 9.75pt</value>
</data>
<data name="txtCommandLinePreview.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 21</value>
</data>
<data name="txtCommandLinePreview.Multiline" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="txtCommandLinePreview.ScrollBars" type="System.Windows.Forms.ScrollBars, System.Windows.Forms">
<value>Vertical</value>
</data>
<data name="txtCommandLinePreview.Size" type="System.Drawing.Size, System.Drawing">
<value>632, 67</value>
</data>
<data name="txtCommandLinePreview.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;txtCommandLinePreview.Name" xml:space="preserve">
<value>txtCommandLinePreview</value>
</data>
@ -697,40 +763,16 @@ Otherwise it can't keep up with recording and a lot of frame drops will happen.<
<data name="&gt;&gt;gbCommandLinePreview.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<data name="cbCustomCommands.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
<data name="tbUserArgs.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="cbCustomCommands.Location" type="System.Drawing.Point, System.Drawing">
<value>376, 0</value>
<data name="tbUserArgs.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 24</value>
</data>
<data name="cbCustomCommands.Size" type="System.Drawing.Size, System.Drawing">
<value>136, 17</value>
<data name="tbUserArgs.Size" type="System.Drawing.Size, System.Drawing">
<value>632, 20</value>
</data>
<data name="cbCustomCommands.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="cbCustomCommands.Text" xml:space="preserve">
<value>Use custom commands</value>
</data>
<data name="txtCommandLinePreview.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="txtCommandLinePreview.Font" type="System.Drawing.Font, System.Drawing">
<value>Microsoft Sans Serif, 9.75pt</value>
</data>
<data name="txtCommandLinePreview.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 21</value>
</data>
<data name="txtCommandLinePreview.Multiline" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="txtCommandLinePreview.ScrollBars" type="System.Windows.Forms.ScrollBars, System.Windows.Forms">
<value>Vertical</value>
</data>
<data name="txtCommandLinePreview.Size" type="System.Drawing.Size, System.Drawing">
<value>632, 67</value>
</data>
<data name="txtCommandLinePreview.TabIndex" type="System.Int32, mscorlib">
<data name="tbUserArgs.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;tbUserArgs.Name" xml:space="preserve">
@ -769,18 +811,6 @@ Otherwise it can't keep up with recording and a lot of frame drops will happen.<
<data name="&gt;&gt;gbCommandLineArgs.ZOrder" xml:space="preserve">
<value>8</value>
</data>
<data name="tbUserArgs.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="tbUserArgs.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 24</value>
</data>
<data name="tbUserArgs.Size" type="System.Drawing.Size, System.Drawing">
<value>632, 20</value>
</data>
<data name="tbUserArgs.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="tpX264.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 22</value>
</data>
@ -808,6 +838,24 @@ 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="lblVP8BitrateK.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="lblVP8BitrateK.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="lblVP8BitrateK.Location" type="System.Drawing.Point, System.Drawing">
<value>220, 16</value>
</data>
<data name="lblVP8BitrateK.Size" type="System.Drawing.Size, System.Drawing">
<value>34, 13</value>
</data>
<data name="lblVP8BitrateK.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="lblVP8BitrateK.Text" xml:space="preserve">
<value>kbit/s</value>
</data>
<data name="&gt;&gt;lblVP8BitrateK.Name" xml:space="preserve">
<value>lblVP8BitrateK</value>
</data>
@ -820,6 +868,18 @@ Otherwise it can't keep up with recording and a lot of frame drops will happen.<
<data name="&gt;&gt;lblVP8BitrateK.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="nudVP8Bitrate.Location" type="System.Drawing.Point, System.Drawing">
<value>144, 12</value>
</data>
<data name="nudVP8Bitrate.Size" type="System.Drawing.Size, System.Drawing">
<value>72, 20</value>
</data>
<data name="nudVP8Bitrate.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="nudVP8Bitrate.TextAlign" type="System.Windows.Forms.HorizontalAlignment, System.Windows.Forms">
<value>Center</value>
</data>
<data name="&gt;&gt;nudVP8Bitrate.Name" xml:space="preserve">
<value>nudVP8Bitrate</value>
</data>
@ -832,6 +892,21 @@ Otherwise it can't keep up with recording and a lot of frame drops will happen.<
<data name="&gt;&gt;nudVP8Bitrate.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="lblVP8Bitrate.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="lblVP8Bitrate.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 16</value>
</data>
<data name="lblVP8Bitrate.Size" type="System.Drawing.Size, System.Drawing">
<value>80, 13</value>
</data>
<data name="lblVP8Bitrate.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="lblVP8Bitrate.Text" xml:space="preserve">
<value>Variable bitrate:</value>
</data>
<data name="&gt;&gt;lblVP8Bitrate.Name" xml:space="preserve">
<value>lblVP8Bitrate</value>
</data>
@ -892,6 +967,15 @@ Otherwise it can't keep up with recording and a lot of frame drops will happen.<
<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>
@ -904,6 +988,21 @@ Otherwise it can't keep up with recording and a lot of frame drops will happen.<
<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>
@ -916,6 +1015,18 @@ Otherwise it can't keep up with recording and a lot of frame drops will happen.<
<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>
@ -928,6 +1039,21 @@ Otherwise it can't keep up with recording and a lot of frame drops will happen.<
<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>
@ -967,6 +1093,24 @@ Otherwise it can't keep up with recording and a lot of frame drops will happen.<
<data name="&gt;&gt;tpNVENC.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="lblGIFDither.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="lblGIFDither.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="lblGIFDither.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 40</value>
</data>
<data name="lblGIFDither.Size" type="System.Drawing.Size, System.Drawing">
<value>81, 13</value>
</data>
<data name="lblGIFDither.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="lblGIFDither.Text" xml:space="preserve">
<value>Dithering mode:</value>
</data>
<data name="&gt;&gt;lblGIFDither.Name" xml:space="preserve">
<value>lblGIFDither</value>
</data>
@ -979,6 +1123,21 @@ Otherwise it can't keep up with recording and a lot of frame drops will happen.<
<data name="&gt;&gt;lblGIFDither.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="lblGIFStatsMode.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="lblGIFStatsMode.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 16</value>
</data>
<data name="lblGIFStatsMode.Size" type="System.Drawing.Size, System.Drawing">
<value>72, 13</value>
</data>
<data name="lblGIFStatsMode.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="lblGIFStatsMode.Text" xml:space="preserve">
<value>Palette mode:</value>
</data>
<data name="&gt;&gt;lblGIFStatsMode.Name" xml:space="preserve">
<value>lblGIFStatsMode</value>
</data>
@ -1300,135 +1459,6 @@ Otherwise it can't keep up with recording and a lot of frame drops will happen.<
<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>
<data name="lblVP8BitrateK.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="lblVP8BitrateK.Location" type="System.Drawing.Point, System.Drawing">
<value>220, 16</value>
</data>
<data name="lblVP8BitrateK.Size" type="System.Drawing.Size, System.Drawing">
<value>34, 13</value>
</data>
<data name="lblVP8BitrateK.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="lblVP8BitrateK.Text" xml:space="preserve">
<value>kbit/s</value>
</data>
<data name="nudVP8Bitrate.Location" type="System.Drawing.Point, System.Drawing">
<value>144, 12</value>
</data>
<data name="nudVP8Bitrate.Size" type="System.Drawing.Size, System.Drawing">
<value>72, 20</value>
</data>
<data name="nudVP8Bitrate.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="nudVP8Bitrate.TextAlign" type="System.Windows.Forms.HorizontalAlignment, System.Windows.Forms">
<value>Center</value>
</data>
<data name="lblVP8Bitrate.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="lblVP8Bitrate.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 16</value>
</data>
<data name="lblVP8Bitrate.Size" type="System.Drawing.Size, System.Drawing">
<value>80, 13</value>
</data>
<data name="lblVP8Bitrate.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="lblVP8Bitrate.Text" xml:space="preserve">
<value>Variable bitrate:</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="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="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="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="lblGIFDither.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="lblGIFDither.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="lblGIFDither.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 40</value>
</data>
<data name="lblGIFDither.Size" type="System.Drawing.Size, System.Drawing">
<value>81, 13</value>
</data>
<data name="lblGIFDither.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="lblGIFDither.Text" xml:space="preserve">
<value>Dithering mode:</value>
</data>
<data name="lblGIFStatsMode.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="lblGIFStatsMode.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 16</value>
</data>
<data name="lblGIFStatsMode.Size" type="System.Drawing.Size, System.Drawing">
<value>72, 13</value>
</data>
<data name="lblGIFStatsMode.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="lblGIFStatsMode.Text" xml:space="preserve">
<value>Palette mode:</value>
</data>
<data name="btnTest.Location" type="System.Drawing.Point, System.Drawing">
<value>176, 404</value>
</data>
@ -1477,62 +1507,20 @@ 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>4</value>
</data>
<data name="&gt;&gt;tpAAC.Name" xml:space="preserve">
<value>tpAAC</value>
<data name="lblAACQuality.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<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 name="lblAACQuality.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 16</value>
</data>
<data name="&gt;&gt;tpAAC.Parent" xml:space="preserve">
<value>tcFFmpegAudioCodecs</value>
<data name="lblAACQuality.Size" type="System.Drawing.Size, System.Drawing">
<value>40, 13</value>
</data>
<data name="&gt;&gt;tpAAC.ZOrder" xml:space="preserve">
<data name="lblAACQuality.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<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 name="lblAACQuality.Text" xml:space="preserve">
<value>Bitrate:</value>
</data>
<data name="&gt;&gt;lblAACQuality.Name" xml:space="preserve">
<value>lblAACQuality</value>
@ -1561,20 +1549,32 @@ Otherwise it can't keep up with recording and a lot of frame drops will happen.<
<data name="tpAAC.Text" xml:space="preserve">
<value>AAC</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="lblVorbisQuality.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="lblVorbisQuality.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>
<data name="lblVorbisQuality.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="lblVorbisQuality.Text" xml:space="preserve">
<value>Quality:</value>
</data>
<data name="&gt;&gt;lblVorbisQuality.Name" xml:space="preserve">
<value>lblVorbisQuality</value>
@ -1603,19 +1603,31 @@ Otherwise it can't keep up with recording and a lot of frame drops will happen.<
<data name="tpVorbis.Text" xml:space="preserve">
<value>Vorbis</value>
</data>
<data name="lblVorbisQuality.AutoSize" type="System.Boolean, mscorlib">
<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="lblMP3Quality.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="lblVorbisQuality.Location" type="System.Drawing.Point, System.Drawing">
<data name="lblMP3Quality.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 16</value>
</data>
<data name="lblVorbisQuality.Size" type="System.Drawing.Size, System.Drawing">
<data name="lblMP3Quality.Size" type="System.Drawing.Size, System.Drawing">
<value>42, 13</value>
</data>
<data name="lblVorbisQuality.TabIndex" type="System.Int32, mscorlib">
<data name="lblMP3Quality.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="lblVorbisQuality.Text" xml:space="preserve">
<data name="lblMP3Quality.Text" xml:space="preserve">
<value>Quality:</value>
</data>
<data name="&gt;&gt;lblMP3Quality.Name" xml:space="preserve">
@ -1645,20 +1657,95 @@ Otherwise it can't keep up with recording and a lot of frame drops will happen.<
<data name="tpMP3.Text" xml:space="preserve">
<value>MP3</value>
</data>
<data name="lblMP3Quality.AutoSize" type="System.Boolean, mscorlib">
<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="lblOpusQuality.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="lblMP3Quality.Location" type="System.Drawing.Point, System.Drawing">
<data name="lblOpusQuality.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="lblOpusQuality.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 16</value>
</data>
<data name="lblMP3Quality.Size" type="System.Drawing.Size, System.Drawing">
<value>42, 13</value>
<data name="lblOpusQuality.Size" type="System.Drawing.Size, System.Drawing">
<value>40, 13</value>
</data>
<data name="lblMP3Quality.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
<data name="lblOpusQuality.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="lblMP3Quality.Text" xml:space="preserve">
<value>Quality:</value>
<data name="lblOpusQuality.Text" xml:space="preserve">
<value>Bitrate:</value>
</data>
<data name="&gt;&gt;lblOpusQuality.Name" xml:space="preserve">
<value>lblOpusQuality</value>
</data>
<data name="&gt;&gt;lblOpusQuality.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;lblOpusQuality.Parent" xml:space="preserve">
<value>tpOpus</value>
</data>
<data name="&gt;&gt;lblOpusQuality.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="tpOpus.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 22</value>
</data>
<data name="tpOpus.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="tpOpus.Size" type="System.Drawing.Size, System.Drawing">
<value>304, 70</value>
</data>
<data name="tpOpus.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="tpOpus.Text" xml:space="preserve">
<value>Opus</value>
</data>
<data name="&gt;&gt;tpOpus.Name" xml:space="preserve">
<value>tpOpus</value>
</data>
<data name="&gt;&gt;tpOpus.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;tpOpus.Parent" xml:space="preserve">
<value>tcFFmpegAudioCodecs</value>
</data>
<data name="&gt;&gt;tpOpus.ZOrder" xml:space="preserve">
<value>3</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="cboVideoSource.Location" type="System.Drawing.Point, System.Drawing">
<value>184, 25</value>
@ -1804,6 +1891,18 @@ 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="btnHelperDevicesHelp.Location" type="System.Drawing.Point, System.Drawing">
<value>168, 56</value>
</data>
<data name="btnHelperDevicesHelp.Size" type="System.Drawing.Size, System.Drawing">
<value>24, 23</value>
</data>
<data name="btnHelperDevicesHelp.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
</data>
<data name="btnHelperDevicesHelp.Text" xml:space="preserve">
<value>?</value>
</data>
<data name="&gt;&gt;btnHelperDevicesHelp.Name" xml:space="preserve">
<value>btnHelperDevicesHelp</value>
</data>
@ -1816,6 +1915,21 @@ Otherwise it can't keep up with recording and a lot of frame drops will happen.<
<data name="&gt;&gt;btnHelperDevicesHelp.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="lblHelperDevices.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="lblHelperDevices.Location" type="System.Drawing.Point, System.Drawing">
<value>200, 61</value>
</data>
<data name="lblHelperDevices.Size" type="System.Drawing.Size, System.Drawing">
<value>396, 13</value>
</data>
<data name="lblHelperDevices.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="lblHelperDevices.Text" xml:space="preserve">
<value>Installs "screen-capture-recorder" and "virtual-audio-capturer" video/audio source.</value>
</data>
<data name="&gt;&gt;lblHelperDevices.Name" xml:space="preserve">
<value>lblHelperDevices</value>
</data>
@ -1828,6 +1942,18 @@ Otherwise it can't keep up with recording and a lot of frame drops will happen.<
<data name="&gt;&gt;lblHelperDevices.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="btnInstallHelperDevices.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 56</value>
</data>
<data name="btnInstallHelperDevices.Size" type="System.Drawing.Size, System.Drawing">
<value>152, 23</value>
</data>
<data name="btnInstallHelperDevices.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="btnInstallHelperDevices.Text" xml:space="preserve">
<value>Install recorder devices</value>
</data>
<data name="&gt;&gt;btnInstallHelperDevices.Name" xml:space="preserve">
<value>btnInstallHelperDevices</value>
</data>
@ -1840,6 +1966,18 @@ Otherwise it can't keep up with recording and a lot of frame drops will happen.<
<data name="&gt;&gt;btnInstallHelperDevices.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="btnRefreshSources.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 24</value>
</data>
<data name="btnRefreshSources.Size" type="System.Drawing.Size, System.Drawing">
<value>88, 23</value>
</data>
<data name="btnRefreshSources.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="btnRefreshSources.Text" xml:space="preserve">
<value>Refresh</value>
</data>
<data name="&gt;&gt;btnRefreshSources.Name" xml:space="preserve">
<value>btnRefreshSources</value>
</data>
@ -1876,57 +2014,6 @@ Otherwise it can't keep up with recording and a lot of frame drops will happen.<
<data name="&gt;&gt;gbSource.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="btnHelperDevicesHelp.Location" type="System.Drawing.Point, System.Drawing">
<value>168, 56</value>
</data>
<data name="btnHelperDevicesHelp.Size" type="System.Drawing.Size, System.Drawing">
<value>24, 23</value>
</data>
<data name="btnHelperDevicesHelp.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
</data>
<data name="btnHelperDevicesHelp.Text" xml:space="preserve">
<value>?</value>
</data>
<data name="lblHelperDevices.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="lblHelperDevices.Location" type="System.Drawing.Point, System.Drawing">
<value>200, 61</value>
</data>
<data name="lblHelperDevices.Size" type="System.Drawing.Size, System.Drawing">
<value>396, 13</value>
</data>
<data name="lblHelperDevices.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="lblHelperDevices.Text" xml:space="preserve">
<value>Installs "screen-capture-recorder" and "virtual-audio-capturer" video/audio source.</value>
</data>
<data name="btnInstallHelperDevices.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 56</value>
</data>
<data name="btnInstallHelperDevices.Size" type="System.Drawing.Size, System.Drawing">
<value>152, 23</value>
</data>
<data name="btnInstallHelperDevices.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="btnInstallHelperDevices.Text" xml:space="preserve">
<value>Install recorder devices</value>
</data>
<data name="btnRefreshSources.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 24</value>
</data>
<data name="btnRefreshSources.Size" type="System.Drawing.Size, System.Drawing">
<value>88, 23</value>
</data>
<data name="btnRefreshSources.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="btnRefreshSources.Text" xml:space="preserve">
<value>Refresh</value>
</data>
<data name="gbCodecs.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 168</value>
</data>
@ -1964,7 +2051,7 @@ Otherwise it can't keep up with recording and a lot of frame drops will happen.<
<value>eiFFmpeg</value>
</data>
<data name="&gt;&gt;eiFFmpeg.Type" xml:space="preserve">
<value>ShareX.HelpersLib.ExportImportControl, ShareX.HelpersLib, Version=12.4.2.0, Culture=neutral, PublicKeyToken=null</value>
<value>ShareX.HelpersLib.ExportImportControl, ShareX.HelpersLib, Version=13.0.2.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;eiFFmpeg.Parent" xml:space="preserve">
<value>$this</value>
@ -1972,12 +2059,12 @@ Otherwise it can't keep up with recording and a lot of frame drops will happen.<
<data name="&gt;&gt;eiFFmpeg.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="$this.Localizable" type="System.Boolean, mscorlib">
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</data>
<data name="$this.TrayHeight" type="System.Int32, mscorlib">
</metadata>
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>60</value>
</data>
</metadata>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 13</value>
</data>

View file

@ -58,6 +58,7 @@ public class FFmpegOptions
// Audio
public int AAC_bitrate { get; set; } = 128; // kbit/s
public int Opus_bitrate { get; set; } = 128; //kbit/s
public int Vorbis_qscale { get; set; } = 3;
public int MP3_qscale { get; set; } = 4;
@ -123,6 +124,8 @@ public string Extension
{
case FFmpegAudioCodec.libvoaacenc:
return "m4a";
case FFmpegAudioCodec.libopus:
return "opus";
case FFmpegAudioCodec.libvorbis:
return "ogg";
case FFmpegAudioCodec.libmp3lame:

View file

@ -230,6 +230,9 @@ public string GetFFmpegArgs(bool isCustom = false)
case FFmpegAudioCodec.libvoaacenc: // http://trac.ffmpeg.org/wiki/Encode/AAC
args.AppendFormat("-c:a aac -strict -2 -ac 2 -b:a {0}k ", FFmpeg.AAC_bitrate); // -ac 2 required otherwise failing with 7.1
break;
case FFmpegAudioCodec.libopus: // https://www.ffmpeg.org/ffmpeg-codecs.html#libopus-1
args.AppendFormat("-c:a libopus -b:a {0}k ", FFmpeg.Opus_bitrate);
break;
case FFmpegAudioCodec.libvorbis: // http://trac.ffmpeg.org/wiki/TheoraVorbisEncodingGuide
args.AppendFormat("-c:a libvorbis -qscale:a {0} ", FFmpeg.Vorbis_qscale);
break;