Skip to content

Commit

Permalink
Add Very basic libx265 libx264 Encoding Support #34
Browse files Browse the repository at this point in the history
  • Loading branch information
Alkl58 committed Dec 28, 2021
1 parent 1332c93 commit 2802424
Show file tree
Hide file tree
Showing 4 changed files with 107 additions and 8 deletions.
10 changes: 5 additions & 5 deletions NotEnoughAV1Encodes/MainWindow.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -270,12 +270,12 @@
<ComboBoxItem Content="aomenc (AV1)" />
<ComboBoxItem Content="rav1e (AV1)" />
<ComboBoxItem Content="svt-av1 (AV1)" />
<!--<Separator />
<Separator />
<ComboBoxItem Content="x265 (HEVC FFmpeg)" />
<ComboBoxItem Content="x264 (AVC FFmpeg)" />-->
<ComboBoxItem Content="x264 (AVC FFmpeg)" />
</ComboBox>
<Label Content="{lex:Loc LabelBitDepth}" HorizontalAlignment="Left" Margin="19,54,0,0" VerticalAlignment="Top" Width="111" />
<ComboBox x:Name="ComboBoxVideoBitDepth" SelectedIndex="{Binding BitDepth}" HorizontalAlignment="Left" Margin="135,52,0,0" VerticalAlignment="Top" Width="70" Height="30" VerticalContentAlignment="Center">
<ComboBox x:Name="ComboBoxVideoBitDepth" SelectedIndex="{Binding BitDepth}" HorizontalAlignment="Left" Margin="135,52,0,0" VerticalAlignment="Top" Width="70" Height="30" VerticalContentAlignment="Center" SelectionChanged="ComboBoxVideoBitDepth_SelectionChanged">
<ComboBoxItem Content="8" IsSelected="True" />
<ComboBoxItem Content="10" />
<ComboBoxItem Content="12" />
Expand Down Expand Up @@ -315,12 +315,12 @@
<CheckBox x:Name="CheckBoxVideoVFR" Content="VFR" HorizontalAlignment="Left" Margin="296,141,0,0" VerticalAlignment="Top"/>
</Grid>
</GroupBox>
<GroupBox x:Name="GroupBoxOptimization" Header="{lex:Loc}" Margin="0,10,10,0" Height="210" VerticalAlignment="Top" mah:ControlsHelper.ContentCharacterCasing="Normal" HorizontalAlignment="Right" Width="385">
<GroupBox x:Name="GroupBoxOptimization" Header="{lex:Loc}" Margin="0,10,10,0" Height="210" VerticalAlignment="Top" mah:ControlsHelper.ContentCharacterCasing="Normal" HorizontalAlignment="Right" Width="410">
<Grid Background="{Binding ElementName=ListBoxAudioTracks, Path=Background, UpdateSourceTrigger=PropertyChanged}">
<Label x:Name="LabelSpeed" Content="{lex:Loc}" HorizontalAlignment="Left" Margin="19,15,0,0" VerticalAlignment="Top" Width="68"/>
<Slider x:Name="SliderEncoderPreset" HorizontalAlignment="Left" Margin="104,16,0,0" VerticalAlignment="Top" Width="227" Maximum="9" SmallChange="1" Value="{Binding SpeedPreset}" TickPlacement="BottomRight" IsSnapToTickEnabled="True" ValueChanged="SliderEncoderPreset_ValueChanged"/>
<mah:ToggleSwitch x:Name="CheckBoxTwoPassEncoding" Content="{lex:Loc}" IsOn="{Binding TwoPassEncoding}" Margin="19,66,0,0" VerticalAlignment="Top" Toggled="CheckBoxTwoPassEncoding_Checked"/>
<Label Content="{Binding ElementName=SliderEncoderPreset, Path=Value, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Left" Margin="337,16,0,0" VerticalAlignment="Top"/>
<Label x:Name="LabelSpeedValue" Content="{Binding ElementName=SliderEncoderPreset, Path=Value, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Left" Margin="337,16,0,0" VerticalAlignment="Top"/>
<mah:ToggleSwitch x:Name="ToggleSwitchAdvancedSettings" Content="{lex:Loc}" IsOn="{Binding AdvancedSettings}" Height="36" Margin="19,129,0,0" VerticalAlignment="Top" Width="224"/>
<mah:ToggleSwitch x:Name="CheckBoxRealTimeMode" Content="{lex:Loc}" IsOn="{Binding AomencRTMode}" Margin="196,66,0,0" VerticalAlignment="Top" Toggled="CheckBoxRealTimeMode_Toggled" Width="169"/>

Expand Down
94 changes: 92 additions & 2 deletions NotEnoughAV1Encodes/MainWindow.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -623,7 +623,7 @@ private void ComboBoxVideoEncoder_SelectionChanged(object sender, System.Windows
CheckBoxRealTimeMode.IsOn = false;
CheckBoxRealTimeMode.Visibility = Visibility.Collapsed;
}
else if (ComboBoxVideoEncoder.SelectedIndex == 3)
else if (ComboBoxVideoEncoder.SelectedIndex is 3)
{
//vpx-vp9 ffmpeg
TextBoxMaxBitrate.Visibility = Visibility.Visible;
Expand All @@ -636,6 +636,20 @@ private void ComboBoxVideoEncoder_SelectionChanged(object sender, System.Windows
CheckBoxRealTimeMode.IsOn = false;
CheckBoxRealTimeMode.Visibility = Visibility.Collapsed;
}
else if (ComboBoxVideoEncoder.SelectedIndex is 9 or 10)
{
//libx265 libx264 ffmpeg
TextBoxMaxBitrate.Visibility = Visibility.Collapsed;
TextBoxMinBitrate.Visibility = Visibility.Collapsed;
SliderEncoderPreset.Maximum = 9;
SliderEncoderPreset.Value = 4;
SliderQuality.Maximum = 51;
SliderQuality.Value = 18;
CheckBoxTwoPassEncoding.IsEnabled = false;
CheckBoxTwoPassEncoding.IsOn = false;
CheckBoxRealTimeMode.IsOn = false;
CheckBoxRealTimeMode.Visibility = Visibility.Collapsed;
}
}
}

Expand Down Expand Up @@ -683,13 +697,17 @@ private void SliderEncoderPreset_ValueChanged(object sender, RoutedPropertyChang
CheckBoxRealTimeMode.Visibility = Visibility.Collapsed;
}
}
if (ComboBoxVideoEncoder.SelectedIndex is 9 or 10)
{
LabelSpeedValue.Content = GenerateMPEGEncoderSpeed();
}
}

private void ComboBoxQualityMode_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
{
if (TextBoxAVGBitrate != null)
{
if (ComboBoxVideoEncoder.SelectedIndex is 1 or 2 or 6 or 7)
if (ComboBoxVideoEncoder.SelectedIndex is 1 or 2 or 6 or 7 or 9 or 10)
{
if (ComboBoxQualityMode.SelectedIndex is 1 or 3)
{
Expand Down Expand Up @@ -742,6 +760,14 @@ private void ComboBoxQualityMode_SelectionChanged(object sender, System.Windows.
}
}

private void ComboBoxVideoBitDepth_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
{
if (ComboBoxVideoEncoder.SelectedIndex == 10 && ComboBoxVideoBitDepth.SelectedIndex == 2)
{
ComboBoxVideoBitDepth.SelectedIndex = 1;
}
}

private void CheckBoxCustomVideoSettings_Toggled(object sender, RoutedEventArgs e)
{
if (CheckBoxCustomVideoSettings.IsOn)
Expand Down Expand Up @@ -1063,6 +1089,14 @@ private string GenerateEncoderCommand()
{
return _settings + GenerateSvtAV1Command();
}
else if (ComboBoxVideoEncoder.SelectedIndex == 9)
{
return _settings + GenerateHEVCFFmpegCommand();
}
else if (ComboBoxVideoEncoder.SelectedIndex == 10)
{
return _settings + GenerateAVCFFmpegCommand();
}

return "";
}
Expand Down Expand Up @@ -1465,6 +1499,62 @@ private string GenerateSvtAV1Command()
return _settings;
}

private string GenerateHEVCFFmpegCommand()
{
string _settings = "-c:v libx265";

if (ComboBoxQualityMode.SelectedIndex == 0)
{
_settings += " -crf " + SliderQuality.Value;
}
else if (ComboBoxQualityMode.SelectedIndex == 2)
{
_settings += " -b:v " + TextBoxAVGBitrate.Text + "k";
}

_settings += " -preset ";
_settings += GenerateMPEGEncoderSpeed();

return _settings;
}

private string GenerateAVCFFmpegCommand()
{
string _settings = "-c:v libx264";

if (ComboBoxQualityMode.SelectedIndex == 0)
{
_settings += " -crf " + SliderQuality.Value;
}
else if (ComboBoxQualityMode.SelectedIndex == 2)
{
_settings += " -b:v " + TextBoxAVGBitrate.Text + "k";
}

_settings += " -preset ";
_settings += GenerateMPEGEncoderSpeed();

return _settings;
}

private string GenerateMPEGEncoderSpeed()
{
return SliderEncoderPreset.Value switch
{
0 => "placebo",
1 => "veryslow",
2 => "slower",
3 => "slow",
4 => "medium",
5 => "fast",
6 => "faster",
7 => "veryfast",
8 => "superfast",
9 => "ultrafast",
_ => "medium",
};
}

private string GenerateKeyFrameInerval()
{
int seconds = 10;
Expand Down
4 changes: 4 additions & 0 deletions NotEnoughAV1Encodes/Video/VideoEncode.cs
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,10 @@ public void Encode(int _workerCount, List<string> VideoChunks, Queue.QueueElemen
if (queueElement.EncodingMethod is 7) { passesSettings = " --passes 1 --output "; }
ChunkOutput = passesSettings + "\"" + Path.Combine(Global.Temp, "NEAV1E", queueElement.UniqueIdentifier, "Video", index.ToString("D6") + ".ivf") + "\"";
}
if (queueElement.EncodingMethod is 9 or 10)
{
ChunkOutput = "\"" + Path.Combine(Global.Temp, "NEAV1E", queueElement.UniqueIdentifier, "Video", index.ToString("D6") + ".mp4") + "\"";
}
}
else if (queueElement.Passes == 2)
{
Expand Down
7 changes: 6 additions & 1 deletion NotEnoughAV1Encodes/Video/VideoMuxer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,16 @@ public void Concat(Queue.QueueElement queueElement)
Global.Logger("DEBUG - VideoMuxer.Concat() => Reading Chunk Directory by *.webm files", queueElement.Output + ".log");
sortedChunks = Directory.GetFiles(Path.Combine(Global.Temp, "NEAV1E", queueElement.UniqueIdentifier, "Video"), "*.webm").OrderBy(f => f);
}
else if (queueElement.EncodingMethod > 4)
else if (queueElement.EncodingMethod > 4 && queueElement.EncodingMethod < 9)
{
Global.Logger("DEBUG - VideoMuxer.Concat() => Reading Chunk Directory by *.ivf files", queueElement.Output + ".log");
sortedChunks = Directory.GetFiles(Path.Combine(Global.Temp, "NEAV1E", queueElement.UniqueIdentifier, "Video"), "*.ivf").OrderBy(f => f);
}
else if (queueElement.EncodingMethod is 9 or 10)
{
Global.Logger("DEBUG - VideoMuxer.Concat() => Reading Chunk Directory by *.mp4 files", queueElement.Output + ".log");
sortedChunks = Directory.GetFiles(Path.Combine(Global.Temp, "NEAV1E", queueElement.UniqueIdentifier, "Video"), "*.mp4").OrderBy(f => f);
}

using (StreamWriter outputFile = new StreamWriter(Path.Combine(Global.Temp, "NEAV1E", queueElement.UniqueIdentifier, "chunks.txt")))
{
Expand Down

0 comments on commit 2802424

Please sign in to comment.