public bool ConvertSubtitles(string title, Track[] trackNumbers, string directory, bool verbose) { try { foreach (var track in trackNumbers) { var extractProcess = new Process { StartInfo = { FileName = Bdsup2SubPath, Arguments = String.Format("\"{0}\\{1}_track{2}.sup\" \"{0}\\{1}_track{2}_exp.sub\" /lang:{3}", directory, title, track.TrackNumber, track.TrackLanguage.BDSupCode), UseShellExecute = false, RedirectStandardOutput = true } }; extractProcess.Start(); var output = extractProcess.StandardOutput; while (output.EndOfStream == false) { var line = output.ReadLine(); if (line != null && line.ToLower().Contains("forced")) { var oldColor = Console.ForegroundColor; Console.ForegroundColor = !line.ToLower().Contains(" 0 ") ? ConsoleColor.Red : ConsoleColor.Yellow; SpecialWriter.WriteLine("track {0}: {1}", track.TrackNumber, line); Console.ForegroundColor = oldColor; } if (verbose) { SpecialWriter.WriteLine(line); } } extractProcess.WaitForExit(); } } catch(Exception e) { Console.WriteLine(e); return false; } return true; }
public IEnumerable<Track> GetTrackInfo(string file, bool verbose) { var infoProcess = new Process { StartInfo = { FileName = MkvinfoPath, Arguments = String.Format("\"{0}\"", file), UseShellExecute = false, RedirectStandardOutput = true } }; infoProcess.Start(); var output = infoProcess.StandardOutput; var tracks = new List<Track>(); Track currentTrack = null; while(output.EndOfStream == false) { var line = output.ReadLine(); if (String.IsNullOrEmpty(line)) { continue; } if (verbose) { Console.WriteLine(line); } if (line == "| + A track") { if (currentTrack != null) { tracks.Add(currentTrack); } currentTrack = new Track {TrackLanguage = Constants.Languages[0]}; continue; } if (line.StartsWith("| +") || line.StartsWith("|+")) { continue; } if (currentTrack == null) { continue; } line = line.TrimStart('|', ' ', '+'); const string trackNumber = "Track number: "; if (line.StartsWith(trackNumber)) { var space = line.LastIndexOf(' '); var rightParen = line.LastIndexOf(')'); var startIndex = space + 1; currentTrack.TrackNumber = line.Substring(startIndex, line.Length - (startIndex + 1)); //currentTrack.TrackNumber = line.Substring(trackNumber.Length, line.Length - trackNumber.Length); } const string trackType = "Track type: "; if (line.StartsWith(trackType)) { currentTrack.TrackType = GetTrackType(line); } else { const string codecId = "Codec ID: "; if (line.Contains(codecId)) { currentTrack.CodecId = line.Substring(codecId.Length, line.Length - codecId.Length); } else { const string languageString = "Language: "; if (line.StartsWith(languageString)) { var languageCode = line.Substring(languageString.Length, line.Length - languageString.Length); var language = Constants.Languages.FirstOrDefault(x => x.MKVCode == languageCode) ?? Constants.Languages[0]; currentTrack.TrackLanguage = language; } } } } if (currentTrack != null) { tracks.Add(currentTrack); } infoProcess.WaitForExit(); return tracks; }