コード例 #1
0
        public static string GetMkvExtractString(MkvFile mkvFile)
        {
            string filePath = mkvFile.Path;
            var    tracks   = mkvFile.Tracks;

            return(GetMkvExtractString(filePath, tracks.ToArray()));
        }
コード例 #2
0
        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();
        }