private void LoadMp4Subtitle(string fileName, Trak mp4SubtitleTrack) { if (mp4SubtitleTrack.Mdia.IsVobSubSubtitle) { var subPicturesWithTimeCodes = new List<VobSubOcr.SubPicturesWithSeparateTimeCodes>(); for (int i = 0; i < mp4SubtitleTrack.Mdia.Minf.Stbl.EndTimeCodes.Count; i++) { if (mp4SubtitleTrack.Mdia.Minf.Stbl.SubPictures.Count > i) { var start = TimeSpan.FromSeconds(mp4SubtitleTrack.Mdia.Minf.Stbl.StartTimeCodes[i]); var end = TimeSpan.FromSeconds(mp4SubtitleTrack.Mdia.Minf.Stbl.EndTimeCodes[i]); subPicturesWithTimeCodes.Add(new VobSubOcr.SubPicturesWithSeparateTimeCodes(mp4SubtitleTrack.Mdia.Minf.Stbl.SubPictures[i], start, end)); } } using (var formSubOcr = new VobSubOcr()) { formSubOcr.Initialize(subPicturesWithTimeCodes, Configuration.Settings.VobSubOcr, fileName); // TODO: language??? if (formSubOcr.ShowDialog(this) == DialogResult.OK) { MakeHistoryForUndo(_language.BeforeImportFromMatroskaFile); _subtitleListViewIndex = -1; FileNew(); _subtitle.WasLoadedWithFrameNumbers = false; foreach (var p in formSubOcr.SubtitleFromOcr.Paragraphs) _subtitle.Paragraphs.Add(p); ShowSource(); SubtitleListview1.Fill(_subtitle, _subtitleAlternate); _subtitleListViewIndex = -1; SubtitleListview1.FirstVisibleIndex = -1; SubtitleListview1.SelectIndexAndEnsureVisible(0); _fileName = Path.GetFileNameWithoutExtension(fileName); _converted = true; Text = Title; Configuration.Settings.Save(); } } } else { MakeHistoryForUndo(_language.BeforeImportFromMatroskaFile); _subtitleListViewIndex = -1; FileNew(); for (int i = 0; i < mp4SubtitleTrack.Mdia.Minf.Stbl.EndTimeCodes.Count; i++) { if (mp4SubtitleTrack.Mdia.Minf.Stbl.Texts.Count > i) { var start = TimeSpan.FromSeconds(mp4SubtitleTrack.Mdia.Minf.Stbl.StartTimeCodes[i]); var end = TimeSpan.FromSeconds(mp4SubtitleTrack.Mdia.Minf.Stbl.EndTimeCodes[i]); string text = mp4SubtitleTrack.Mdia.Minf.Stbl.Texts[i]; var p = new Paragraph(text, start.TotalMilliseconds, end.TotalMilliseconds); if (p.EndTime.TotalMilliseconds - p.StartTime.TotalMilliseconds > Configuration.Settings.General.SubtitleMaximumDisplayMilliseconds) p.EndTime.TotalMilliseconds = p.StartTime.TotalMilliseconds + Configuration.Settings.General.SubtitleMaximumDisplayMilliseconds; if (mp4SubtitleTrack.Mdia.IsClosedCaption && string.IsNullOrEmpty(text)) { // do not add empty lines } else { _subtitle.Paragraphs.Add(p); } } } SetEncoding(Encoding.UTF8); ShowStatus(_language.SubtitleImportedFromMatroskaFile); _subtitle.Renumber(); _subtitle.WasLoadedWithFrameNumbers = false; if (fileName.EndsWith(".mp4", StringComparison.OrdinalIgnoreCase) || fileName.EndsWith(".m4v", StringComparison.OrdinalIgnoreCase)) { _fileName = fileName.Substring(0, fileName.Length - 4); Text = Title + " - " + _fileName; } else { Text = Title; } _fileDateTime = new DateTime(); _converted = true; SubtitleListview1.Fill(_subtitle, _subtitleAlternate); if (_subtitle.Paragraphs.Count > 0) SubtitleListview1.SelectIndexAndEnsureVisible(0); ShowSource(); } }
private static Subtitle LoadMp4SubtitleForSync(Trak mp4SubtitleTrack) { var subtitle = new Subtitle(); if (mp4SubtitleTrack.Mdia.IsVobSubSubtitle) { return subtitle; } else { for (int i = 0; i < mp4SubtitleTrack.Mdia.Minf.Stbl.EndTimeCodes.Count; i++) { if (mp4SubtitleTrack.Mdia.Minf.Stbl.Texts.Count > i) { var start = TimeSpan.FromSeconds(mp4SubtitleTrack.Mdia.Minf.Stbl.StartTimeCodes[i]); var end = TimeSpan.FromSeconds(mp4SubtitleTrack.Mdia.Minf.Stbl.EndTimeCodes[i]); string text = mp4SubtitleTrack.Mdia.Minf.Stbl.Texts[i]; var p = new Paragraph(text, start.TotalMilliseconds, end.TotalMilliseconds); if (p.EndTime.TotalMilliseconds - p.StartTime.TotalMilliseconds > Configuration.Settings.General.SubtitleMaximumDisplayMilliseconds) p.EndTime.TotalMilliseconds = p.StartTime.TotalMilliseconds + Configuration.Settings.General.SubtitleMaximumDisplayMilliseconds; if (mp4SubtitleTrack.Mdia.IsClosedCaption && string.IsNullOrEmpty(text)) { // do not add empty lines } else { subtitle.Paragraphs.Add(p); } } } } return subtitle; }