Skip to content

Commit 0c069f6

Browse files
committed
Add Import Audio Option #108
1 parent 04c288d commit 0c069f6

File tree

8 files changed

+380
-155
lines changed

8 files changed

+380
-155
lines changed

NotEnoughAV1Encodes/Audio/AudioTracks.cs

+2
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,7 @@ public class AudioTracks
1313
public List<string> Languages { get; set; }
1414
public string CustomName { get; set; }
1515
public bool PCM { get; set; }
16+
public bool External { get; set; }
17+
public string ExternalPath { get; set; }
1618
}
1719
}

NotEnoughAV1Encodes/Audio/CommandGenerator.cs

+23-10
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ public string Generate(System.Windows.Controls.ItemCollection tracks)
66
{
77
string audioCommand = "";
88
int endIndex = 0;
9+
int externalIndex = 0;
910
bool copyaudio = false;
1011
bool noaudio = true;
1112

@@ -14,7 +15,12 @@ public string Generate(System.Windows.Controls.ItemCollection tracks)
1415
// Skip Audio Track if not active
1516
if(track.Active == false) continue;
1617

17-
audioCommand += MultipleTrackCommandGenerator(int.Parse(track.Bitrate), track.Index, endIndex, track.Codec, track.Channels, track.Language, track.CustomName, track.PCM);
18+
if (track.External)
19+
{
20+
externalIndex += 1;
21+
}
22+
23+
audioCommand += MultipleTrackCommandGenerator(int.Parse(track.Bitrate), track.Index, endIndex, track.Codec, track.Channels, track.Language, track.CustomName, track.PCM, track.External, externalIndex);
1824
endIndex += 1;
1925

2026
if (track.Codec == 5)
@@ -48,26 +54,33 @@ private static string SwitchCodec(int _audioCodec, bool _pcmBluray)
4854
return audioCodeSwitch;
4955
}
5056

51-
private string MultipleTrackCommandGenerator(int _activeTrackBitrate, int _mapIndex, int _endIndex, int _activTrackCodec, int _channelLayout, string _language, string _trackName, bool _pcmBluray)
57+
private string MultipleTrackCommandGenerator(int activeTrackBitrate, int mapIndex, int endIndex, int activTrackCodec, int channelLayout, string language, string trackName, bool pcmBluray, bool external, int externalIndex)
5258
{
5359
string audioCodecCommand;
60+
5461
// Audio Mapping
55-
audioCodecCommand = " -map 0:a:" + _mapIndex + " -c:a:" + _endIndex;
62+
audioCodecCommand = " -map 0:a:" + mapIndex + " -c:a:" + endIndex;
63+
64+
if (external)
65+
{
66+
audioCodecCommand = " -map " + externalIndex + ":a:" + mapIndex + " -c:a:" + endIndex;
67+
}
68+
5669
// Codec
57-
audioCodecCommand += SwitchCodec(_activTrackCodec, _pcmBluray);
70+
audioCodecCommand += SwitchCodec(activTrackCodec, pcmBluray);
5871
// Bitrate
59-
if (_activTrackCodec != 5)
72+
if (activTrackCodec != 5)
6073
{
61-
audioCodecCommand += " -b:a:" + _endIndex + " " + _activeTrackBitrate + "k";
74+
audioCodecCommand += " -b:a:" + endIndex + " " + activeTrackBitrate + "k";
6275
}
6376
// Channel Layout
64-
audioCodecCommand += " -ac:a:" + _endIndex + " " + SetChannelLayout(_channelLayout);
77+
audioCodecCommand += " -ac:a:" + endIndex + " " + SetChannelLayout(channelLayout);
6578
// Metadata
66-
audioCodecCommand += " -metadata:s:a:" + _endIndex + " language=" + resources.MediaLanguages.Languages[_language];
79+
audioCodecCommand += " -metadata:s:a:" + endIndex + " language=" + resources.MediaLanguages.Languages[language];
6780
// Title
68-
if (_activTrackCodec != 5)
81+
if (activTrackCodec != 5)
6982
{
70-
audioCodecCommand += " -metadata:s:a:" + _endIndex + " title=" + '\u0022' + _trackName + '\u0022';
83+
audioCodecCommand += " -metadata:s:a:" + endIndex + " title=" + '\u0022' + trackName + '\u0022';
7184
}
7285
return audioCodecCommand;
7386
}

NotEnoughAV1Encodes/Audio/EncodeAudio.cs

+8-1
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,20 @@ public void Encode(Queue.QueueElement queueElement, CancellationToken _token)
1616

1717
Global.Logger("INFO - EncodeAudio.Encode() => Command: " + queueElement.AudioCommand, queueElement.Output + ".log");
1818

19+
string externalInput = "";
20+
foreach (AudioTracks audioTrack in queueElement.VideoDB.AudioTracks)
21+
{
22+
if (!audioTrack.External) continue;
23+
externalInput += " -i \"" + audioTrack.ExternalPath + "\"";
24+
}
25+
1926
Process processAudio = new();
2027
ProcessStartInfo startInfo = new()
2128
{
2229
WindowStyle = ProcessWindowStyle.Hidden,
2330
FileName = "cmd.exe",
2431
WorkingDirectory = Path.Combine(Directory.GetCurrentDirectory(), "Apps", "FFmpeg"),
25-
Arguments = "/C ffmpeg.exe -i \"" + queueElement.VideoDB.InputPath + "\" -vn -sn -map_metadata -1 " + queueElement.AudioCommand + " \"" + Path.Combine(Global.Temp, "NEAV1E", queueElement.UniqueIdentifier, "Audio", "audio.mkv") + "\"",
32+
Arguments = "/C ffmpeg.exe -i \"" + queueElement.VideoDB.InputPath + "\" " + externalInput + " -vn -sn -map_metadata -1 " + queueElement.AudioCommand + " \"" + Path.Combine(Global.Temp, "NEAV1E", queueElement.UniqueIdentifier, "Audio", "audio.mkv") + "\"",
2633
RedirectStandardError = true,
2734
RedirectStandardInput = true,
2835
CreateNoWindow = true

NotEnoughAV1Encodes/MainWindow.xaml

+9
Original file line numberDiff line numberDiff line change
@@ -1103,6 +1103,15 @@
11031103
<Label x:Name="LabelNoAudioFound" Content="{lex:Loc}" HorizontalContentAlignment="Center" FontSize="20" />
11041104
</Grid>
11051105
</ListBoxItem>
1106+
<ListBox.ContextMenu>
1107+
<ContextMenu>
1108+
<MenuItem x:Name="AudioTracksImport" Header="{lex:Loc}" Click="AudioTracksImport_Click">
1109+
<MenuItem.Icon>
1110+
<Image Source="resources/img/folder.png" Height="20" Width="20"></Image>
1111+
</MenuItem.Icon>
1112+
</MenuItem>
1113+
</ContextMenu>
1114+
</ListBox.ContextMenu>
11061115
<ListBox.ItemContainerStyle>
11071116
<Style TargetType="ListBoxItem">
11081117
<Setter Property="Background" Value="{Binding ElementName=ListBoxAudioTracks, Path=Background, UpdateSourceTrigger=PropertyChanged}"></Setter>

NotEnoughAV1Encodes/MainWindow.xaml.cs

+32
Original file line numberDiff line numberDiff line change
@@ -685,6 +685,38 @@ private void ListBoxQueue_KeyDown(object sender, KeyEventArgs e)
685685
DeleteQueueItems();
686686
}
687687
}
688+
689+
private void AudioTracksImport_Click(object sender, RoutedEventArgs e)
690+
{
691+
OpenFileDialog openAudioFilesDialog = new()
692+
{
693+
Filter = "Audio Files|*.mp3;*.aac;*.flac;*.m4a;*.ogg;*.opus;*.wav;*.wma|All Files|*.*",
694+
Multiselect = true
695+
};
696+
697+
bool? result = openAudioFilesDialog.ShowDialog();
698+
if (result == true)
699+
{
700+
List<Audio.AudioTracks> AudioTracks = new();
701+
if (ListBoxAudioTracks.ItemsSource != null)
702+
{
703+
AudioTracks = (List<Audio.AudioTracks>) ListBoxAudioTracks.ItemsSource;
704+
}
705+
foreach (string file in openAudioFilesDialog.FileNames)
706+
{
707+
Debug.WriteLine(file);
708+
AudioTracks.Add(videoDB.ParseMediaInfoAudio(file, PresetSettings));
709+
}
710+
711+
try { ListBoxAudioTracks.Items.Clear(); } catch { }
712+
try { ListBoxAudioTracks.ItemsSource = null; } catch { }
713+
try { ListBoxSubtitleTracks.Items.Clear(); } catch { }
714+
try { ListBoxSubtitleTracks.ItemsSource = null; } catch { }
715+
716+
videoDB.AudioTracks = AudioTracks;
717+
ListBoxAudioTracks.ItemsSource = AudioTracks;
718+
}
719+
}
688720
#endregion
689721

690722
#region UI Functions

NotEnoughAV1Encodes/Video/VideoDB.cs

+77
Original file line numberDiff line numberDiff line change
@@ -166,5 +166,82 @@ public void ParseMediaInfo(VideoSettings settings)
166166
InputFileName = Path.GetFileName(InputPath);
167167
}
168168
}
169+
170+
public Audio.AudioTracks ParseMediaInfoAudio(string inputPath, VideoSettings settings)
171+
{
172+
Audio.AudioTracks audioTrack = new();
173+
174+
audioTrack.External = true;
175+
audioTrack.ExternalPath = inputPath;
176+
177+
MediaInfo mediaInfo = new();
178+
mediaInfo.Open(inputPath);
179+
180+
try
181+
{
182+
int i = 0;
183+
184+
bool pcm = false;
185+
try { pcm = mediaInfo.Get(StreamKind.Audio, i, "Format") == "PCM" && mediaInfo.Get(StreamKind.Audio, i, "MuxingMode") == "Blu-ray"; } catch { }
186+
187+
string name = Path.GetFileNameWithoutExtension(inputPath);
188+
189+
int channels = 1;
190+
try { channels = int.Parse(mediaInfo.Get(StreamKind.Audio, i, "Channels")); } catch { }
191+
192+
int bitrate = 128;
193+
int codec = 0;
194+
switch (channels)
195+
{
196+
case 1:
197+
channels = 0;
198+
bitrate = settings.AudioBitrateMono;
199+
codec = settings.AudioCodecMono;
200+
break;
201+
case 2:
202+
channels = 1;
203+
bitrate = settings.AudioBitrateStereo;
204+
codec = settings.AudioCodecStereo;
205+
break;
206+
case 6:
207+
channels = 2;
208+
bitrate = settings.AudioBitrateSixChannel;
209+
codec = settings.AudioCodecSixChannel;
210+
break;
211+
case 8:
212+
channels = 3;
213+
bitrate = settings.AudioBitrateEightChannel;
214+
codec = settings.AudioCodecEightChannel;
215+
break;
216+
default:
217+
break;
218+
}
219+
220+
string lang = "und";
221+
try
222+
{
223+
lang = mediaInfo.Get(StreamKind.Audio, i, "Language/String3");
224+
if (!resources.MediaLanguages.Languages.ContainsValue(lang))
225+
{
226+
lang = "und";
227+
}
228+
lang = resources.MediaLanguages.Languages.FirstOrDefault(x => x.Value == lang).Key;
229+
}
230+
catch { }
231+
232+
audioTrack.Active = true;
233+
audioTrack.Index = i;
234+
audioTrack.Codec = codec;
235+
audioTrack.Bitrate = bitrate.ToString();
236+
audioTrack.Languages = resources.MediaLanguages.LanguageKeys;
237+
audioTrack.Language = lang;
238+
audioTrack.CustomName = name;
239+
audioTrack.Channels = channels;
240+
audioTrack.PCM = pcm;
241+
}
242+
catch { }
243+
244+
return audioTrack;
245+
}
169246
}
170247
}

0 commit comments

Comments
 (0)