static void Main(string[] args) { if (args.Length == 0) { Console.WriteLine ("usage: ann2srt input.xml > output.srt"); Console.WriteLine ("Converts YouTube's XML annotations to SRT files VLC (and others) will accept as subtitles"); return; } // The parsed subtitles List<SubtitleLine> subtitles = new List<SubtitleLine> (); // Open document XDocument doc = null; try { using (StreamReader oReader = new StreamReader (args [0], Encoding.UTF8)) { doc = XDocument.Load (oReader); } } catch (System.IO.FileNotFoundException e) { Console.WriteLine ("Couldn't find the file."); Console.WriteLine (e); return; } catch (Exception e) { Console.WriteLine ("Error reading the file. Full exception:"); Console.WriteLine (e); return; } // Fetch all <annotation>'s var annotations = from anns in doc.Descendants ("annotation") select anns; // Iterate over them, parsing them foreach (var annotation in annotations) { if (annotation.Element ("TEXT") == null) continue; SubtitleLine subtitleLine = new SubtitleLine (); subtitleLine.Text = annotation.Element ("TEXT").Value.Replace ("\n", ""); subtitleLine.StartTime = FormatTime (annotation.Element ("segment").Element ("movingRegion").Descendants ("rectRegion").ToList () [0].Attribute ("t").Value); subtitleLine.EndTime = FormatTime (annotation.Element ("segment").Element ("movingRegion").Descendants ("rectRegion").ToList () [1].Attribute ("t").Value); subtitles.Add (subtitleLine); } // Output SRT file string output = ""; int subtitleNumber = 1; foreach (SubtitleLine subtitleLine in subtitles.OrderBy(s => s.StartTime)) { output = output + subtitleNumber++; output = output + "\n" + subtitleLine.StartTime + " --> " + subtitleLine.EndTime; output = output + "\n" + subtitleLine.Text; output = output + "\n\n"; } // Show output Console.WriteLine (output); }
static void Main(string[] args) { if (args.Length == 0) { Console.WriteLine("usage: ann2srt input.xml > output.srt"); Console.WriteLine("Converts YouTube's XML annotations to SRT files VLC (and others) will accept as subtitles"); return; } // The parsed subtitles List <SubtitleLine> subtitles = new List <SubtitleLine> (); // Open document XDocument doc = null; try { using (StreamReader oReader = new StreamReader(args [0], Encoding.UTF8)) { doc = XDocument.Load(oReader); } } catch (System.IO.FileNotFoundException e) { Console.WriteLine("Couldn't find the file."); Console.WriteLine(e); return; } catch (Exception e) { Console.WriteLine("Error reading the file. Full exception:"); Console.WriteLine(e); return; } // Fetch all <annotation>'s var annotations = from anns in doc.Descendants("annotation") select anns; // Iterate over them, parsing them foreach (var annotation in annotations) { if (annotation.Element("TEXT") == null) { continue; } SubtitleLine subtitleLine = new SubtitleLine(); subtitleLine.Text = annotation.Element("TEXT").Value.Replace("\n", ""); subtitleLine.StartTime = FormatTime(annotation.Element("segment").Element("movingRegion").Descendants("rectRegion").ToList() [0].Attribute("t").Value); subtitleLine.EndTime = FormatTime(annotation.Element("segment").Element("movingRegion").Descendants("rectRegion").ToList() [1].Attribute("t").Value); subtitles.Add(subtitleLine); } // Output SRT file string output = ""; int subtitleNumber = 1; foreach (SubtitleLine subtitleLine in subtitles.OrderBy(s => s.StartTime)) { output = output + subtitleNumber++; output = output + "\n" + subtitleLine.StartTime + " --> " + subtitleLine.EndTime; output = output + "\n" + subtitleLine.Text; output = output + "\n\n"; } // Show output Console.WriteLine(output); }