public override void LoadSubtitle(Subtitle subtitle, List<string> lines, string fileName) { _errorCount = 0; subtitle.Paragraphs.Clear(); var mp4Parser = new MP4Parser(fileName); var dfxpStrings = mp4Parser.GetMdatsAsStrings(); foreach (var xmlAsString in dfxpStrings) { try { var sub = new Subtitle(); var mdatLines = xmlAsString.SplitToLines(); sub.ReloadLoadSubtitle(mdatLines, null, new TimedText()); if (sub.Paragraphs.Count == 0) continue; // merge lines with same time codes sub = Forms.MergeLinesWithSameTimeCodes.Merge(sub, new List<int>(), out _, true, false, 1000, "en", new List<int>(), new Dictionary<int, bool>(), new Subtitle()); // adjust to last exisiting sub var lastSub = subtitle.GetParagraphOrDefault(subtitle.Paragraphs.Count - 1); if (lastSub != null) sub.AddTimeToAllParagraphs(lastSub.EndTime.TimeSpan); subtitle.Paragraphs.AddRange(sub.Paragraphs); } catch { _errorCount++; } } }
public override void LoadSubtitle(Subtitle subtitle, List <string> lines, string fileName) { _errorCount = 0; subtitle.Paragraphs.Clear(); var mp4Parser = new MP4Parser(fileName); var dfxpStrings = mp4Parser.GetMdatsAsStrings(); SubtitleFormat format = new TimedText10(); foreach (var xmlAsString in dfxpStrings) { try { if (xmlAsString.Length < 80) { continue; } if (xmlAsString.IndexOf('\0') >= 0) { _errorCount++; continue; } var sub = new Subtitle(); var mdatLines = xmlAsString.SplitToLines(25_000); format = sub.ReloadLoadSubtitle(mdatLines, null, format); if (sub.Paragraphs.Count == 0) { continue; } // merge lines with same time codes sub = Forms.MergeLinesWithSameTimeCodes.Merge(sub, new List <int>(), out _, true, false, 1000, "en", new List <int>(), new Dictionary <int, bool>(), new Subtitle()); // adjust to last exisiting sub var lastSub = subtitle.GetParagraphOrDefault(subtitle.Paragraphs.Count - 1); if (lastSub != null && sub.Paragraphs.Count > 0 && lastSub.StartTime.TotalMilliseconds > sub.Paragraphs[0].StartTime.TotalMilliseconds) { sub.AddTimeToAllParagraphs(lastSub.EndTime.TimeSpan); } subtitle.Paragraphs.AddRange(sub.Paragraphs); } catch { _errorCount++; } } var merged = MergeLinesSameTextUtils.MergeLinesWithSameTextInSubtitle(subtitle, false, 250); if (merged.Paragraphs.Count < subtitle.Paragraphs.Count) { subtitle.Paragraphs.Clear(); subtitle.Paragraphs.AddRange(merged.Paragraphs); } subtitle.Renumber(); }