private void LoadSection(String sectionFile) { vfl.ClearSections(); SectionParser.ParseSections(sectionFile, vfl); this.Text = String.Format("Section Editor - {0}", sectionFile); RefreshSectionList(); }
public void CreateFromSections(String sectionsFile, String chaptersFile, Decimal frameRate, Boolean useChapters, Boolean isTrimFile) { //clear chapters chapterList.Clear(); //If use chapters, load chapter file if (useChapters) { if (AcHelper.GetFilename(chaptersFile, GetFileNameMode.ExtensionOnly, GetDirectoryNameMode.NoPath).ToLowerInvariant() == "xml") { Load(ChapterType.XML, chaptersFile); } else if (AcHelper.GetFilename(chaptersFile, GetFileNameMode.ExtensionOnly, GetDirectoryNameMode.NoPath).ToLowerInvariant() == "txt") { Load(ChapterType.OGM, chaptersFile); } } //Create a Videoframelist vfl = new VideoFrameList(); //Load the sections file SectionParser.ParseSections(sectionsFile, vfl); //Sanity check if (useChapters && vfl.CountSections != chapterList.Count) { throw new AcException("Error creating chapters! Sections count is different from the chapters count!"); } if (isTrimFile) { Int32 framesToDelete = 0; for (Int32 i = 0; i < vfl.CountSections; i++) { //If no chapters are loaded if (!useChapters) { //Create new empty chapter VideoChapter chap = new VideoChapter(); chapterList.Add(chap); } if (i == 0) { Int32 start = 0; Int32 end = vfl.FrameSections[i].FrameEnd; framesToDelete = vfl.FrameSections[0].FrameStart; end -= framesToDelete; chapterList[i].StartTime = VideoFrame.FrameTimeFromFrameNumber(start, frameRate, FrameFromType.FromFrameRate); chapterList[i].EndTime = VideoFrame.FrameTimeFromFrameNumber(Convert.ToDecimal(end) + 0.5m, frameRate, FrameFromType.FromFrameRate); } else { Int32 start = vfl.FrameSections[i].FrameStart; Int32 end = vfl.FrameSections[i].FrameEnd; Int32 prevEnd = vfl.FrameSections[i - 1].FrameEnd; framesToDelete += start - prevEnd - 1; start -= framesToDelete; end -= framesToDelete; chapterList[i].StartTime = VideoFrame.FrameTimeFromFrameNumber(Convert.ToDecimal(start) + 0.5m, frameRate, FrameFromType.FromFrameRate); chapterList[i].EndTime = VideoFrame.FrameTimeFromFrameNumber(Convert.ToDecimal(end) + 0.5m, frameRate, FrameFromType.FromFrameRate); } } } else { for (Int32 i = 0; i < vfl.CountSections; i++) { //If no chapters are loaded if (!useChapters) { //Create new empty chapter VideoChapter chap = new VideoChapter(); chapterList.Add(chap); } Int32 start = vfl.FrameSections[i].FrameStart; Int32 end = vfl.FrameSections[i].FrameEnd; chapterList[i].StartTime = VideoFrame.FrameTimeFromFrameNumber(Convert.ToDecimal(start) + 0.5m, frameRate, FrameFromType.FromFrameRate); chapterList[i].EndTime = VideoFrame.FrameTimeFromFrameNumber(Convert.ToDecimal(end) + 0.5m, frameRate, FrameFromType.FromFrameRate); } } }
/// <summary> /// Load sections from a sections/trims file /// </summary> /// <param name="sectionsFile"></param> public void LoadSections(String sectionsFile) { SectionParser.ParseSections(sectionsFile, this); }
private void btnSplit_Click(object sender, EventArgs e) { try { AssParser assP = new AssParser(); assP.ParseASS(txtAssFile.Text); VideoFrameList vfl = new VideoFrameList(); SectionParser.ParseSections(txtSectionsFile.Text, vfl); Decimal framerate = AcHelper.DecimalParse(txtFramerate.Text); foreach (AssDialogue assD in assP.AssContents) { Decimal timeToDelete = 0; for (Int32 currentSection = 0; currentSection < vfl.FrameSections.Count; currentSection++) { VideoFrameSection vfs = vfl.FrameSections[currentSection]; Decimal startSection = VideoFrame.GetStartTimeFromFrameNumber(vfs.FrameStart, framerate); Decimal endSection = VideoFrame.GetStartTimeFromFrameNumber(vfs.FrameEnd, framerate); //Check if the sub ends before the section if (assD.time_end_double <= startSection) { assD.deleted = true; break; } //Check if the sub starts after the section if (assD.time_start_double >= endSection) { //If its the last sections, then delete the sub if (currentSection == vfl.FrameSections.Count - 1) { assD.deleted = true; break; } else { continue; } } //Time to resync the sub if (currentSection == 0) { TimeSpan ts; timeToDelete = startSection; assD.time_start_double = assD.time_start_double - timeToDelete; ts = TimeSpan.FromMilliseconds(Convert.ToDouble(assD.time_start_double)); assD.time_start = ts.Hours.ToString("0") + ":" + ts.Minutes.ToString("00") + ":" + ts.Seconds.ToString("00") + "." + ts.Milliseconds.ToString("00"); assD.time_end_double = assD.time_end_double - timeToDelete; ts = TimeSpan.FromMilliseconds(Convert.ToDouble(assD.time_end_double)); assD.time_end = ts.Hours.ToString("0") + ":" + ts.Minutes.ToString("00") + ":" + ts.Seconds.ToString("00") + "." + ts.Milliseconds.ToString("00"); break; } else { TimeSpan ts; Decimal start = startSection; Decimal end = endSection; Decimal prevEnd = VideoFrame.GetStartTimeFromFrameNumber(vfl.FrameSections[currentSection - 1].FrameEnd, framerate); timeToDelete += start - prevEnd - VideoFrame.GetDurationFromFrameRate(framerate); assD.time_start_double = assD.time_start_double - timeToDelete; ts = TimeSpan.FromMilliseconds(Convert.ToDouble(assD.time_start_double)); assD.time_start = ts.Hours.ToString("0") + ":" + ts.Minutes.ToString("00") + ":" + ts.Seconds.ToString("00") + "." + ts.Milliseconds.ToString("00"); assD.time_end_double = assD.time_end_double - timeToDelete; ts = TimeSpan.FromMilliseconds(Convert.ToDouble(assD.time_end_double)); assD.time_end = ts.Hours.ToString("0") + ":" + ts.Minutes.ToString("00") + ":" + ts.Seconds.ToString("00") + "." + ts.Milliseconds.ToString("00"); break; } } } assP.WriteFinalAss(txtAssFile.Text.Substring(0, txtAssFile.Text.LastIndexOf(".") - 1) + ".resync.ass"); MessageBox.Show("Resync complete!", "Success!"); } catch (Exception ex) { MessageBox.Show(ex.Message, "Error!"); } }