internal static bool BatchConvertSave(string toFormat, string offset, Encoding targetEncoding, string outputFolder, int count, ref int converted, ref int errors, IList<SubtitleFormat> formats, string fileName, Subtitle sub, SubtitleFormat format, bool overwrite, string pacCodePage) { // adjust offset if (!string.IsNullOrEmpty(offset) && (offset.StartsWith("/offset:") || offset.StartsWith("offset:"))) { string[] parts = offset.Split(":".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); if (parts.Length == 5) { try { TimeSpan ts = new TimeSpan(0, int.Parse(parts[1].TrimStart('-')), int.Parse(parts[2]), int.Parse(parts[3]), int.Parse(parts[4])); if (parts[1].StartsWith("-")) sub.AddTimeToAllParagraphs(ts.Negate()); else sub.AddTimeToAllParagraphs(ts); } catch { Console.Write(" (unable to read offset " + offset + ")"); } } } bool targetFormatFound = false; string outputFileName; foreach (SubtitleFormat sf in formats) { if (sf.Name.ToLower().Replace(" ", string.Empty) == toFormat.ToLower() || sf.Name.ToLower().Replace(" ", string.Empty) == toFormat.Replace(" ", string.Empty).ToLower()) { targetFormatFound = true; sf.BatchMode = true; outputFileName = FormatOutputFileNameForBatchConvert(fileName, sf.Extension, outputFolder, overwrite); Console.Write(string.Format("{0}: {1} -> {2}...", count, Path.GetFileName(fileName), outputFileName)); if (sf.IsFrameBased && !sub.WasLoadedWithFrameNumbers) sub.CalculateFrameNumbersFromTimeCodesNoCheck(Configuration.Settings.General.CurrentFrameRate); else if (sf.IsTimeBased && sub.WasLoadedWithFrameNumbers) sub.CalculateTimeCodesFromFrameNumbers(Configuration.Settings.General.CurrentFrameRate); File.WriteAllText(outputFileName, sub.ToText(sf), targetEncoding); if (format.GetType() == typeof(Sami) || format.GetType() == typeof(SamiModern)) { var sami = (Sami)format; foreach (string className in Sami.GetStylesFromHeader(sub.Header)) { var newSub = new Subtitle(); foreach (Paragraph p in sub.Paragraphs) { if (p.Extra != null && p.Extra.ToLower().Trim() == className.ToLower().Trim()) newSub.Paragraphs.Add(p); } if (newSub.Paragraphs.Count > 0 && newSub.Paragraphs.Count < sub.Paragraphs.Count) { string s = fileName; if (s.LastIndexOf('.') > 0) s = s.Insert(s.LastIndexOf('.'), "_" + className); else s += "_" + className + format.Extension; outputFileName = FormatOutputFileNameForBatchConvert(s, sf.Extension, outputFolder, overwrite); File.WriteAllText(outputFileName, newSub.ToText(sf), targetEncoding); } } } Console.WriteLine(" done."); } } if (!targetFormatFound) { var ebu = new Ebu(); if (ebu.Name.ToLower().Replace(" ", string.Empty) == toFormat.ToLower()) { targetFormatFound = true; outputFileName = FormatOutputFileNameForBatchConvert(fileName, ebu.Extension, outputFolder, overwrite); Console.Write(string.Format("{0}: {1} -> {2}...", count, Path.GetFileName(fileName), outputFileName)); ebu.Save(outputFileName, sub); Console.WriteLine(" done."); } } if (!targetFormatFound) { var pac = new Pac(); if (pac.Name.ToLower().Replace(" ", string.Empty) == toFormat.ToLower() || toFormat.ToLower() == "pac" || toFormat.ToLower() == ".pac") { pac.BatchMode = true; if (!string.IsNullOrEmpty(pacCodePage) && Utilities.IsInteger(pacCodePage)) pac.CodePage = Convert.ToInt32(pacCodePage); targetFormatFound = true; outputFileName = FormatOutputFileNameForBatchConvert(fileName, pac.Extension, outputFolder, overwrite); Console.Write(string.Format("{0}: {1} -> {2}...", count, Path.GetFileName(fileName), outputFileName)); pac.Save(outputFileName, sub); Console.WriteLine(" done."); } } if (!targetFormatFound) { var cavena890 = new Cavena890(); if (cavena890.Name.ToLower().Replace(" ", string.Empty) == toFormat.ToLower()) { targetFormatFound = true; outputFileName = FormatOutputFileNameForBatchConvert(fileName, cavena890.Extension, outputFolder, overwrite); Console.Write(string.Format("{0}: {1} -> {2}...", count, Path.GetFileName(fileName), outputFileName)); cavena890.Save(outputFileName, sub); Console.WriteLine(" done."); } } if (!targetFormatFound) { var cheetahCaption = new CheetahCaption(); if (cheetahCaption.Name.ToLower().Replace(" ", string.Empty) == toFormat.ToLower()) { targetFormatFound = true; outputFileName = FormatOutputFileNameForBatchConvert(fileName, cheetahCaption.Extension, outputFolder, overwrite); Console.Write(string.Format("{0}: {1} -> {2}...", count, Path.GetFileName(fileName), outputFileName)); cheetahCaption.Save(outputFileName, sub); Console.WriteLine(" done."); } } if (!targetFormatFound) { var capMakerPlus = new CapMakerPlus(); if (capMakerPlus.Name.ToLower().Replace(" ", string.Empty) == toFormat.ToLower()) { targetFormatFound = true; outputFileName = FormatOutputFileNameForBatchConvert(fileName, capMakerPlus.Extension, outputFolder, overwrite); Console.Write(string.Format("{0}: {1} -> {2}...", count, Path.GetFileName(fileName), outputFileName)); capMakerPlus.Save(outputFileName, sub); Console.WriteLine(" done."); } } if (!targetFormatFound) { Console.WriteLine(string.Format("{0}: {1} - target format '{2}' not found!", count, fileName, toFormat)); errors++; return false; } else { converted++; return true; } }
private void toolStripMenuItemExportCheetahCap_Click(object sender, EventArgs e) { var cheetahCaption = new CheetahCaption(); saveFileDialog1.Filter = cheetahCaption.Name + "|*" + cheetahCaption.Extension; saveFileDialog1.Title = _language.SaveSubtitleAs; saveFileDialog1.DefaultExt = "*" + cheetahCaption.Extension; saveFileDialog1.AddExtension = true; if (!string.IsNullOrEmpty(_videoFileName)) saveFileDialog1.FileName = Path.GetFileNameWithoutExtension(_videoFileName); else saveFileDialog1.FileName = Path.GetFileNameWithoutExtension(_fileName); if (!string.IsNullOrEmpty(openFileDialog1.InitialDirectory)) saveFileDialog1.InitialDirectory = openFileDialog1.InitialDirectory; DialogResult result = saveFileDialog1.ShowDialog(this); if (result == DialogResult.OK) { openFileDialog1.InitialDirectory = saveFileDialog1.InitialDirectory; string fileName = saveFileDialog1.FileName; string ext = Path.GetExtension(fileName).ToLower(); bool extOk = ext == cheetahCaption.Extension.ToLower(); if (!extOk) { if (fileName.EndsWith(".")) fileName = fileName.Substring(0, fileName.Length - 1); fileName += cheetahCaption.Extension; } cheetahCaption.Save(fileName, _subtitle); } }