示例#1
0
        private static ProgramArgs HandleArgs(IEnumerable<string> args)
        {
            var argList = new LinkedList<string>(args);
            var programArgs = new ProgramArgs {DeleteIntermediateFiles = true};
            while (argList.First != null)
            {
                switch (argList.First.Value.ToLower())
                {
                    case "--inputdir":
                        argList.RemoveFirst();
                        programArgs.InputDirectory = argList.First.Value;
                        argList.RemoveFirst();
                        break;
                    case "--r":
                        argList.RemoveFirst();
                        programArgs.Recursive = true;
                        break;
                    case "--k":
                        argList.RemoveFirst();
                        programArgs.KeepOriginalSubs = true;
                        break;
                    case "--title":
                        argList.RemoveFirst();
                        programArgs.Title = argList.First.Value;
                        argList.RemoveFirst();
                        break;
                    case "--v":
                    case "--verbose":
                        argList.RemoveFirst();
                        programArgs.Verbose = true;
                        break;
                    case "--delete":
                        argList.RemoveFirst();
                        programArgs.DeleteInputFiles = true;
                        break;
                    case "--keepIntermediate":
                        argList.RemoveFirst();
                        programArgs.DeleteIntermediateFiles = false;
                        break;
                    default:
                        Console.WriteLine("Invalid Parameter {0}", argList.First);
                        Exit();
                        break;

                }
            }
            return programArgs;
        }
示例#2
0
        private static void ProcessDirectory(ProgramArgs programArgs)
        {
            var files = GetAllFiles(programArgs.InputDirectory, programArgs.Recursive).ToList();

            files.ForEach(Console.WriteLine);
            foreach (var file in files)
            {
                var fileInfo = new FileInfo(file);
                var shortName = fileInfo.Name;
                var fancyName = programArgs.Title;
                if (string.IsNullOrEmpty(fancyName) && fileInfo.Directory != null)
                {
                    fancyName = fileInfo.Directory.Name;
                    fancyName = fancyName.Replace('_', ' ');
                }

                var logFileName = fancyName + ".log";
                var logFileNamePath = Path.Combine(programArgs.InputDirectory, logFileName);
                SpecialWriter.SetLogFile(logFileNamePath);

                var directory = fileInfo.DirectoryName;
                var title = shortName.Split('.')[0];
                var subConvert = new SubConverter();
                var tracks = subConvert.GetTrackInfo(file, programArgs.Verbose);

                tracks = tracks.Where(x => x.TrackType == TrackTypes.Subtitles && x.CodecId == "S_HDMV/PGS");
                if (!tracks.Any())
                {
                    SpecialWriter.WriteLine("No subtitle tracks found");
                    continue;
                }
                SpecialWriter.WriteLine("Found {0} subtitle tracks", tracks.Count());
                foreach (var s in tracks)
                {
                    SpecialWriter.WriteLine("\t Track {0} {1}", s.TrackNumber, s.TrackLanguage.LanguageName);
                }
                var trackNumbers = tracks.Select(x=>x.TrackNumber);
                if (subConvert.ExtractSubtitles(file, title, trackNumbers, directory))
                {
                    subConvert.ConvertSubtitles(title, tracks.ToArray(), directory, programArgs.Verbose);
                    subConvert.MergeTracks(file, title, trackNumbers, directory, fancyName, programArgs.KeepOriginalSubs);
                }
                RemoveFiles(title, trackNumbers, directory, programArgs.DeleteInputFiles, programArgs.DeleteIntermediateFiles);
            }
        }