public static string GetMkvExtractString(MkvFile mkvFile) { string filePath = mkvFile.Path; var tracks = mkvFile.Tracks; return(GetMkvExtractString(filePath, tracks.ToArray())); }
private void btnAddFile_Click(object sender, RoutedEventArgs e) { OpenFileDialog dialog = new OpenFileDialog(); dialog.Multiselect = true; dialog.Filter = "MKV Files (*.mkv)|*.mkv"; ObservableCollection <MkvFile> items = new ObservableCollection <MkvFile>(); List <Track> intersection = new List <Track>(); if (dialog.ShowDialog() == true) { foreach (var fileName in dialog.FileNames) { // start process var proc = new Process { StartInfo = new ProcessStartInfo { FileName = SettingsHelper.GetMkvInfoPath(), Arguments = "--ui-language en \"" + fileName + "\"", UseShellExecute = false, RedirectStandardOutput = true, CreateNoWindow = true } }; proc.StartInfo.StandardOutputEncoding = Encoding.UTF8; proc.Start(); String output = null; // get output while (!proc.StandardOutput.EndOfStream) { output += proc.StandardOutput.ReadLine(); } proc.Close(); var item = new MkvFile(); item.Path = fileName; item.Name = Path.GetFileName(fileName); item.Tracks = new EbmlParser().Parse(output); item.Tracks.ForEach(x => x.Parent = item); items.Add(item); } } intersection.AddRange(items.First().Tracks); foreach (var mkvFile in items) { intersection = intersection.Intersect(mkvFile.Tracks, new TrackComparer()).ToList(); } tvFiles.ItemsSource = items; ObservableCollection <BatchTrack> batchTracks = new ObservableCollection <BatchTrack>(); foreach (var track in intersection) { batchTracks.Add(new BatchTrack { Name = string.Format("{0}, {1} ({2})", track.Type, track.Language, track.Name), Track = track }); } lbBatchTracksToExtract.ItemsSource = batchTracks; ToggleButtonState(); }