Skip to content

Commit

Permalink
Refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
Alkl58 committed Jan 26, 2024
1 parent c90e3fb commit 08b1b37
Show file tree
Hide file tree
Showing 17 changed files with 628 additions and 502 deletions.
25 changes: 15 additions & 10 deletions NotEnoughAV1Encodes/Encoders/AMFAV1.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
namespace NotEnoughAV1Encodes.Encoders
using System.Windows;

namespace NotEnoughAV1Encodes.Encoders
{
internal class AMFAV1
internal class AMFAV1 : IEncoder
{
/*
* The implementation is pretty questionable
Expand All @@ -13,8 +15,11 @@ internal class AMFAV1
*
* It's unclear which arguments should be mixed with which.
*/
public static string GetCommand(int quality, int rc, string bitrate, int qp)
public string GetCommand()
{
// Get MainWindow instance to access UI elements
MainWindow mainWindow = Application.Current.MainWindow as MainWindow;

string command = "-c:v av1_amf";

// Speed
Expand All @@ -24,7 +29,7 @@ public static string GetCommand(int quality, int rc, string bitrate, int qp)
// quality 30 E..V.......
// high_quality 0 E..V.......
command += " -quality ";
command += quality switch
command += mainWindow.SliderEncoderPreset.Value switch
{
0 => "high_quality",
1 => "quality",
Expand All @@ -44,13 +49,13 @@ public static string GetCommand(int quality, int rc, string bitrate, int qp)
// hqvbr 5 E..V....... High Quality Variable Bitrate
// hqcbr 6 E..V....... High Quality Constant Bitrate
command += " -rc ";
command += rc switch
command += mainWindow.ComboBoxQualityModeAMFAV1.SelectedIndex switch
{
0 => "cqp -qp " + qp,
1 => "cbr -b:v " + bitrate + "k",
2 => "hqcbr -b:v " + bitrate + "k",
3 => "qvbr -b:v " + bitrate + "k -qvbr_quality_level " + qp,
4 => "hqvbr -b:v " + bitrate + "k",
0 => "cqp -qp " + mainWindow.SliderQualityAMFAV1.Value,
1 => "cbr -b:v " + mainWindow.TextBoxBitrateAMFAV1.Text + "k",
2 => "hqcbr -b:v " + mainWindow.TextBoxBitrateAMFAV1.Text + "k",
3 => "qvbr -b:v " + mainWindow.TextBoxBitrateAMFAV1.Text + "k -qvbr_quality_level " + mainWindow.SliderQualityAMFAV1.Value,
4 => "hqvbr -b:v " + mainWindow.TextBoxBitrateAMFAV1.Text + "k",
_ => ""
};

Expand Down
73 changes: 73 additions & 0 deletions NotEnoughAV1Encodes/Encoders/AOMAV1FFmpeg.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
using System.Windows;

namespace NotEnoughAV1Encodes.Encoders
{
class AOMAV1FFmpeg : IEncoder
{
public string GetCommand()
{
// Get MainWindow instance to access UI elements
MainWindow mainWindow = Application.Current.MainWindow as MainWindow;

string settings = "-c:v libaom-av1";

// Quality / Bitrate Selection
string quality = mainWindow.ComboBoxQualityMode.SelectedIndex switch
{
0 => " -crf " + mainWindow.SliderQualityAOMFFMPEG.Value + " -b:v 0",
1 => " -crf " + mainWindow.SliderQualityAOMFFMPEG.Value + " -b:v " + mainWindow.TextBoxMaxBitrateAOMFFMPEG.Text + "k",
2 => " -b:v " + mainWindow.TextBoxMinBitrateAOMFFMPEG.Text + "k",
3 => " -minrate " + mainWindow.TextBoxMinBitrateAOMFFMPEG.Text + "k -b:v " + mainWindow.TextBoxAVGBitrateAOMFFMPEG.Text + "k -maxrate " + mainWindow.TextBoxMaxBitrateAOMFFMPEG.Text + "k",
4 => " -crf {q_vmaf} -b:v 0",
_ => ""
};

// Preset
settings += quality + " -cpu-used " + mainWindow.SliderEncoderPreset.Value;

// Advanced Settings
if (mainWindow.ToggleSwitchAdvancedSettings.IsOn == false)
{
settings += " -threads 4 -tile-columns 2 -tile-rows 1 -g " + mainWindow.GenerateKeyFrameInerval();
}
else
{
settings += " -threads " + mainWindow.ComboBoxAomencThreads.Text + // Threads
" -tile-columns " + mainWindow.ComboBoxAomencTileColumns.Text + // Tile Columns
" -tile-rows " + mainWindow.ComboBoxAomencTileRows.Text + // Tile Rows
" -lag-in-frames " + mainWindow.TextBoxAomencLagInFrames.Text + // Lag in Frames
" -aq-mode " + mainWindow.ComboBoxAomencAQMode.SelectedIndex + // AQ-Mode
" -tune " + mainWindow.ComboBoxAomencTune.Text; // Tune

if (mainWindow.TextBoxAomencMaxGOP.Text != "0")
settings += " -g " + mainWindow.TextBoxAomencMaxGOP.Text; // Keyframe Interval
if (mainWindow.CheckBoxAomencRowMT.IsChecked == false)
settings += " -row-mt 0"; // Row Based Multithreading
if (mainWindow.CheckBoxAomencCDEF.IsChecked == false)
settings += " -enable-cdef 0"; // Constrained Directional Enhancement Filter
if (mainWindow.CheckBoxRealTimeMode.IsOn)
settings += " -usage realtime "; // Real Time Mode

if (mainWindow.CheckBoxAomencARNRMax.IsChecked == true)
{
settings += " -arnr-max-frames " + mainWindow.ComboBoxAomencARNRMax.Text; // ARNR Maxframes
settings += " -arnr-strength " + mainWindow.ComboBoxAomencARNRStrength.Text; // ARNR Strength
}

settings += " -aom-params " +
"tune-content=" + mainWindow.ComboBoxAomencTuneContent.Text + // Tune-Content
":sharpness=" + mainWindow.ComboBoxAomencSharpness.Text + // Sharpness (Filter)
":enable-keyframe-filtering=" + mainWindow.ComboBoxAomencKeyFiltering.SelectedIndex; // Key Frame Filtering

if (mainWindow.ComboBoxAomencColorPrimaries.SelectedIndex != 0)
settings += ":color-primaries=" + mainWindow.ComboBoxAomencColorPrimaries.Text; // Color Primaries
if (mainWindow.ComboBoxAomencColorTransfer.SelectedIndex != 0)
settings += ":transfer-characteristics=" + mainWindow.ComboBoxAomencColorTransfer.Text; // Color Transfer
if (mainWindow.ComboBoxAomencColorMatrix.SelectedIndex != 0)
settings += ":matrix-coefficients=" + mainWindow.ComboBoxAomencColorMatrix.Text; // Color Matrix
}

return settings;
}
}
}
28 changes: 28 additions & 0 deletions NotEnoughAV1Encodes/Encoders/AVCFFmpeg.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
using System.Windows;

namespace NotEnoughAV1Encodes.Encoders
{
class AVCFFmpeg : IEncoder
{
public string GetCommand()
{
// Get MainWindow instance to access UI elements
MainWindow mainWindow = Application.Current.MainWindow as MainWindow;

string settings = "-c:v libx264";

// Quality / Bitrate Selection
string quality = mainWindow.ComboBoxQualityModeX26x.SelectedIndex switch
{
0 => " -crf " + mainWindow.SliderQualityX26x.Value,
1 => " -b:v " + mainWindow.TextBoxBitrateX26x.Text + "k",
_ => ""
};

// Preset
settings += quality + " -preset " + mainWindow.GenerateMPEGEncoderSpeed();

return settings;
}
}
}
74 changes: 74 additions & 0 deletions NotEnoughAV1Encodes/Encoders/Aomenc.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
using System.IO;
using System.Windows;

namespace NotEnoughAV1Encodes.Encoders
{
class Aomenc : IEncoder
{
public string GetCommand()
{
// Get MainWindow instance to access UI elements
MainWindow mainWindow = Application.Current.MainWindow as MainWindow;

string settings = "-f yuv4mpegpipe - | " +
"\"" + Path.Combine(Directory.GetCurrentDirectory(), "Apps", "aomenc", "aomenc.exe") + "\" -";

// Quality / Bitrate Selection
string quality = mainWindow.ComboBoxQualityModeAOMENC.SelectedIndex switch
{
0 => " --cq-level=" + mainWindow.SliderQualityAOMENC.Value + " --end-usage=q",
1 => " --cq-level=" + mainWindow.SliderQualityAOMENC.Value + " --target-bitrate=" + mainWindow.TextBoxBitrateAOMENC.Text + " --end-usage=cq",
2 => " --target-bitrate=" + mainWindow.TextBoxBitrateAOMENC.Text + " --end-usage=vbr",
3 => " --target-bitrate=" + mainWindow.TextBoxBitrateAOMENC.Text + " --end-usage=cbr",
_ => ""
};

// Preset
settings += quality + " --cpu-used=" + mainWindow.SliderEncoderPreset.Value;

// Advanced Settings
if (mainWindow.ToggleSwitchAdvancedSettings.IsOn == false)
{
settings += " --threads=4 --tile-columns=2 --tile-rows=1 --kf-max-dist=" + mainWindow.GenerateKeyFrameInerval();
}
else
{
settings += " --threads=" + mainWindow.ComboBoxAomencThreads.Text + // Threads
" --tile-columns=" + mainWindow.ComboBoxAomencTileColumns.Text + // Tile Columns
" --tile-rows=" + mainWindow.ComboBoxAomencTileRows.Text + // Tile Rows
" --lag-in-frames=" + mainWindow.TextBoxAomencLagInFrames.Text + // Lag in Frames
" --sharpness=" + mainWindow.ComboBoxAomencSharpness.Text + // Sharpness (Filter)
" --aq-mode=" + mainWindow.ComboBoxAomencAQMode.SelectedIndex + // AQ-Mode
" --enable-keyframe-filtering=" + mainWindow.ComboBoxAomencKeyFiltering.SelectedIndex + // Key Frame Filtering
" --tune=" + mainWindow.ComboBoxAomencTune.Text + // Tune
" --tune-content=" + mainWindow.ComboBoxAomencTuneContent.Text; // Tune-Content

if (mainWindow.TextBoxAomencMaxGOP.Text != "0")
settings += " --kf-max-dist=" + mainWindow.TextBoxAomencMaxGOP.Text; // Keyframe Interval
if (mainWindow.CheckBoxAomencRowMT.IsChecked == false)
settings += " --row-mt=0"; // Row Based Multithreading

if (mainWindow.ComboBoxAomencColorPrimaries.SelectedIndex != 0)
settings += " --color-primaries=" + mainWindow.ComboBoxAomencColorPrimaries.Text; // Color Primaries
if (mainWindow.ComboBoxAomencColorTransfer.SelectedIndex != 0)
settings += " --transfer-characteristics=" + mainWindow.ComboBoxAomencColorTransfer.Text; // Color Transfer
if (mainWindow.ComboBoxAomencColorMatrix.SelectedIndex != 0)
settings += " --matrix-coefficients=" + mainWindow.ComboBoxAomencColorMatrix.Text; // Color Matrix

if (mainWindow.CheckBoxAomencCDEF.IsChecked == false)
settings += " --enable-cdef=0"; // Constrained Directional Enhancement Filter

if (mainWindow.CheckBoxAomencARNRMax.IsChecked == true)
{
settings += " --arnr-maxframes=" + mainWindow.ComboBoxAomencARNRMax.Text; // ARNR Maxframes
settings += " --arnr-strength=" + mainWindow.ComboBoxAomencARNRStrength.Text; // ARNR Strength
}

if (mainWindow.CheckBoxRealTimeMode.IsOn)
settings += " --rt"; // Real Time Mode
}

return settings;
}
}
}
7 changes: 7 additions & 0 deletions NotEnoughAV1Encodes/Encoders/Encoder.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
namespace NotEnoughAV1Encodes.Encoders
{
interface IEncoder
{
string GetCommand();
}
}
28 changes: 28 additions & 0 deletions NotEnoughAV1Encodes/Encoders/HEVCFFmpeg.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
using System.Windows;

namespace NotEnoughAV1Encodes.Encoders
{
class HEVCFFmpeg : IEncoder
{
public string GetCommand()
{
// Get MainWindow instance to access UI elements
MainWindow mainWindow = Application.Current.MainWindow as MainWindow;

string settings = "-c:v libx265";

// Quality / Bitrate Selection
string quality = mainWindow.ComboBoxQualityModeX26x.SelectedIndex switch
{
0 => " -crf " + mainWindow.SliderQualityX26x.Value,
1 => " -b:v " + mainWindow.TextBoxBitrateX26x.Text + "k",
_ => ""
};

// Preset
settings += quality + " -preset " + mainWindow.GenerateMPEGEncoderSpeed();

return settings;
}
}
}
43 changes: 43 additions & 0 deletions NotEnoughAV1Encodes/Encoders/NVEnc.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
using System.IO;
using System.Windows;

namespace NotEnoughAV1Encodes.Encoders
{
class NVEnc : IEncoder
{
public string GetCommand()
{
// Get MainWindow instance to access UI elements
MainWindow mainWindow = Application.Current.MainWindow as MainWindow;

string settings = "-f yuv4mpegpipe - | " +
"\"" + Path.Combine(Directory.GetCurrentDirectory(), "Apps", "nvenc", "NVEncC64.exe") + "\" --y4m -i -";

// Codec
settings += " --codec av1";

// Quality / Bitrate Selection
string quality = mainWindow.ComboBoxQualityModeQSVAV1.SelectedIndex switch
{
0 => " --cqp " + mainWindow.SliderQualityQSVAV1.Value,
1 => " --vbr " + mainWindow.TextBoxBitrateQSVAV1.Text,
2 => " --cbr " + mainWindow.TextBoxBitrateQSVAV1.Text,
_ => ""
};

// Preset
settings += quality + " --preset " + mainWindow.GenerateNVENCEncoderSpeed();

// Bit-Depth
settings += " --output-depth ";
settings += mainWindow.ComboBoxVideoBitDepthLimited.SelectedIndex switch
{
0 => "8",
1 => "10",
_ => "8"
};

return settings;
}
}
}
54 changes: 54 additions & 0 deletions NotEnoughAV1Encodes/Encoders/QSVEnc.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
using System.IO;
using System.Windows;

namespace NotEnoughAV1Encodes.Encoders
{
class QSVEnc : IEncoder
{
public string GetCommand()
{
// Get MainWindow instance to access UI elements
MainWindow mainWindow = Application.Current.MainWindow as MainWindow;

string settings = "-f yuv4mpegpipe - | " +
"\"" + Path.Combine(Directory.GetCurrentDirectory(), "Apps", "qsvenc", "QSVEncC64.exe") + "\" --y4m -i -";

// Codec
settings += " --codec av1";

// Quality / Bitrate Selection
string quality = mainWindow.ComboBoxQualityModeQSVAV1.SelectedIndex switch
{
0 => " --cqp " + mainWindow.SliderQualityQSVAV1.Value,
1 => " --icq " + mainWindow.SliderQualityQSVAV1.Value,
2 => " --vbr " + mainWindow.TextBoxBitrateQSVAV1.Text,
3 => " --cbr " + mainWindow.TextBoxBitrateQSVAV1.Text,
_ => ""
};

// Preset
settings += quality + " --quality " + mainWindow.GenerateQuickSyncEncoderSpeed();

// Bit-Depth
settings += " --output-depth ";
settings += mainWindow.ComboBoxVideoBitDepthLimited.SelectedIndex switch
{
0 => "8",
1 => "10",
_ => "8"
};

// Output Colorspace
settings += " --output-csp ";
settings += mainWindow.ComboBoxColorFormat.SelectedIndex switch
{
0 => "i420",
1 => "i422",
2 => "i444",
_ => "i420"
};

return settings;
}
}
}
Loading

0 comments on commit 08b1b37

Please sign in to comment.