diff --git a/src/Logic/SubtitleFormats/AQTitle.cs b/src/Logic/SubtitleFormats/AQTitle.cs index b5ba2e3f9..e604aee74 100644 --- a/src/Logic/SubtitleFormats/AQTitle.cs +++ b/src/Logic/SubtitleFormats/AQTitle.cs @@ -147,7 +147,7 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats private string EncodeTimeCode(TimeCode time) { - int frames = (int)(time.TotalMilliseconds / (1000.0 / Configuration.Settings.General.CurrentFrameRate)) + 1; + int frames = MillisecondsToFrames(time.TotalMilliseconds) + 1; return frames.ToString(); } diff --git a/src/Logic/SubtitleFormats/AdobeEncore.cs b/src/Logic/SubtitleFormats/AdobeEncore.cs index 59168c1e5..85e6c98c2 100644 --- a/src/Logic/SubtitleFormats/AdobeEncore.cs +++ b/src/Logic/SubtitleFormats/AdobeEncore.cs @@ -58,8 +58,7 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats private string EncodeTimeCode(TimeCode time) { //00:03:15:22 (last is frame) - int frames = (int)(time.Milliseconds / (1000.0 / Configuration.Settings.General.CurrentFrameRate)); - return string.Format("{0:00}:{1:00}:{2:00}:{3:00}", time.Hours, time.Minutes, time.Seconds, frames); + return string.Format("{0:00}:{1:00}:{2:00}:{3:00}", time.Hours, time.Minutes, time.Seconds, MillisecondsToFrames(time.Milliseconds)); } public override void LoadSubtitle(Subtitle subtitle, List lines, string fileName) diff --git a/src/Logic/SubtitleFormats/AdobeEncoreLineTabs.cs b/src/Logic/SubtitleFormats/AdobeEncoreLineTabs.cs new file mode 100644 index 000000000..d702a7039 --- /dev/null +++ b/src/Logic/SubtitleFormats/AdobeEncoreLineTabs.cs @@ -0,0 +1,139 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Text.RegularExpressions; + +namespace Nikse.SubtitleEdit.Logic.SubtitleFormats +{ + class AdobeEncoreLineTabs : SubtitleFormat + { + public override string Extension + { + get { return ".txt"; } + } + + public override string Name + { + get { return "Adobe Encore (line/tabs)"; } + } + + public override bool HasLineNumber + { + get { return true; } + } + + public override bool IsTimeBased + { + get { return true; } + } + + public override bool IsMine(List lines, string fileName) + { + var subtitle = new Subtitle(); + + var sb = new StringBuilder(); + foreach (string line in lines) + sb.AppendLine(line); + + LoadSubtitle(subtitle, lines, fileName); + return subtitle.Paragraphs.Count > _errorCount; + } + + public override string ToText(Subtitle subtitle, string title) + { + StringBuilder sb = new StringBuilder(); + int index = 0; + foreach (Paragraph p in subtitle.Paragraphs) + { + index++; + //0002 00:01:48:22 00:01:52:17 - I need those samples, fast!//- Yes, professor. + string text = p.Text; + text = text.Replace("", "@Italic@"); + text = text.Replace("", "@Italic@"); + text = text.Replace(Environment.NewLine, "//"); + sb.AppendLine(string.Format("{0:0000}\t{1}\t{2}\t{3}", index, EncodeTimeCode(p.StartTime), EncodeTimeCode(p.EndTime), Utilities.RemoveHtmlTags(text))); + } + return sb.ToString(); + } + + private string EncodeTimeCode(TimeCode time) + { + //00:03:15:22 (last is frame) + return string.Format("{0:00}:{1:00}:{2:00}:{3:00}", time.Hours, time.Minutes, time.Seconds, MillisecondsToFrames(time.Milliseconds)); + } + + public override void LoadSubtitle(Subtitle subtitle, List lines, string fileName) + { + //0002 00:01:48:22 00:01:52:17 - I need those samples, fast!//- Yes, professor. + Paragraph p = null; + subtitle.Paragraphs.Clear(); + var regexTimeCodes = new Regex(@"^\d\d\d\d\t\d\d:\d\d:\d\d:\d\d\t\d\d:\d\d:\d\d:\d\d\t", RegexOptions.Compiled); + foreach (string line in lines) + { + string s = line.Replace(" ", "\t"); + if (regexTimeCodes.IsMatch(s)) + { + var temp = s.Split('\t'); + if (temp.Length > 1) + { + string start = temp[1]; + string end = temp[2]; + + string[] startParts = start.Split(":".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); + string[] endParts = end.Split(":".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); + if (startParts.Length == 4 && endParts.Length == 4) + { + string text = s.Remove(0, regexTimeCodes.Match(s).Length - 1).Trim(); + if (!text.Contains(Environment.NewLine)) + text = text.Replace("//", Environment.NewLine); + if (text.Contains("@Italic@")) + { + bool italicOn = false; + while (text.Contains("@Italic@")) + { + int index = text.IndexOf("@Italic@"); + string italicTag = ""; + if (italicOn) + italicTag = ""; + text = text.Remove(index, "@Italic@".Length).Insert(index, italicTag); + italicOn = !italicOn; + } + text = Utilities.FixInvalidItalicTags(text); + } + p = new Paragraph(DecodeTimeCode(startParts), DecodeTimeCode(endParts), text); + subtitle.Paragraphs.Add(p); + } + } + } + else if (line.Trim().Length == 0) + { + // skip these lines + } + else if (line.Trim().Length > 0 && p != null) + { + _errorCount++; + } + } + + subtitle.Renumber(1); + } + + private TimeCode DecodeTimeCode(string[] parts) + { + //00:00:07:12 + string hour = parts[0]; + string minutes = parts[1]; + string seconds = parts[2]; + string frames = parts[3]; + + int milliseconds = (int)((1000.0 / Configuration.Settings.General.CurrentFrameRate) * int.Parse(frames)); + if (milliseconds > 999) + milliseconds = 999; + + TimeCode tc = new TimeCode(int.Parse(hour), int.Parse(minutes), int.Parse(seconds), milliseconds); + return tc; + } + + } +} + diff --git a/src/Logic/SubtitleFormats/AdobeEncoreTabs.cs b/src/Logic/SubtitleFormats/AdobeEncoreTabs.cs index 03f5f2558..de0a8fa77 100644 --- a/src/Logic/SubtitleFormats/AdobeEncoreTabs.cs +++ b/src/Logic/SubtitleFormats/AdobeEncoreTabs.cs @@ -55,8 +55,7 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats private string EncodeTimeCode(TimeCode time) { //00:03:15:22 (last is frame) - int frames = (int) (time.Milliseconds / (1000.0 / Configuration.Settings.General.CurrentFrameRate)); - return string.Format("{0:00}:{1:00}:{2:00}:{3:00}", time.Hours, time.Minutes, time.Seconds, frames); + return string.Format("{0:00}:{1:00}:{2:00}:{3:00}", time.Hours, time.Minutes, time.Seconds, MillisecondsToFrames(time.Milliseconds)); } public override void LoadSubtitle(Subtitle subtitle, List lines, string fileName) diff --git a/src/Logic/SubtitleFormats/AdobeEncoreWithLineNumbers.cs b/src/Logic/SubtitleFormats/AdobeEncoreWithLineNumbers.cs index 8f8b5cfca..e4f2dbb4f 100644 --- a/src/Logic/SubtitleFormats/AdobeEncoreWithLineNumbers.cs +++ b/src/Logic/SubtitleFormats/AdobeEncoreWithLineNumbers.cs @@ -58,8 +58,7 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats private string EncodeTimeCode(TimeCode time) { //00:03:15:22 (last is frame) - int frames = (int)(time.Milliseconds / (1000.0 / Configuration.Settings.General.CurrentFrameRate)); - return string.Format("{0:00}:{1:00}:{2:00}:{3:00}", time.Hours, time.Minutes, time.Seconds, frames); + return string.Format("{0:00}:{1:00}:{2:00}:{3:00}", time.Hours, time.Minutes, time.Seconds, MillisecondsToFrames(time.Milliseconds)); } public override void LoadSubtitle(Subtitle subtitle, List lines, string fileName) diff --git a/src/Logic/SubtitleFormats/BdnXml.cs b/src/Logic/SubtitleFormats/BdnXml.cs index b000713ad..a5e90dbea 100644 --- a/src/Logic/SubtitleFormats/BdnXml.cs +++ b/src/Logic/SubtitleFormats/BdnXml.cs @@ -137,8 +137,7 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats private static string ConvertToTimeString(TimeCode time) { - int frames = (int)(time.Milliseconds / (1000.0 / Configuration.Settings.General.CurrentFrameRate)); - return string.Format("{0:00}:{1:00}:{2:00}:{3:00}", time.Hours, time.Minutes, time.Seconds, frames); + return string.Format("{0:00}:{1:00}:{2:00}:{3:00}", time.Hours, time.Minutes, time.Seconds, MillisecondsToFrames(time.Milliseconds)); } } diff --git a/src/Logic/SubtitleFormats/DigiBeta.cs b/src/Logic/SubtitleFormats/DigiBeta.cs index f9c161f1b..280e5172d 100644 --- a/src/Logic/SubtitleFormats/DigiBeta.cs +++ b/src/Logic/SubtitleFormats/DigiBeta.cs @@ -87,8 +87,7 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats private string EncodeTimeCode(TimeCode time) { - int frames = (int)(time.Milliseconds / (1000.0 / Configuration.Settings.General.CurrentFrameRate)); - return string.Format("{0:00}:{1:00}:{2:00}:{3:00}", time.Hours, time.Minutes, time.Seconds, frames); + return string.Format("{0:00}:{1:00}:{2:00}:{3:00}", time.Hours, time.Minutes, time.Seconds, MillisecondsToFrames(time.Milliseconds)); } private TimeCode DecodeTimeCode(string[] parts) diff --git a/src/Logic/SubtitleFormats/Eeg708.cs b/src/Logic/SubtitleFormats/Eeg708.cs index d9bcea815..b28dac578 100644 --- a/src/Logic/SubtitleFormats/Eeg708.cs +++ b/src/Logic/SubtitleFormats/Eeg708.cs @@ -120,8 +120,7 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats private string EncodeTimeCode(TimeCode time) { - int frames = (int)(time.Milliseconds / (1000.0 / Configuration.Settings.General.CurrentFrameRate)); - return string.Format("{0:00}:{1:00}:{2:00}:{3:00}", time.Hours, time.Minutes, time.Seconds, frames); + return string.Format("{0:00}:{1:00}:{2:00}:{3:00}", time.Hours, time.Minutes, time.Seconds, MillisecondsToFrames(time.Milliseconds)); } private TimeCode DecodeTimeCode(string[] parts) diff --git a/src/Logic/SubtitleFormats/Pac.cs b/src/Logic/SubtitleFormats/Pac.cs index 70f176354..06c4a56de 100644 --- a/src/Logic/SubtitleFormats/Pac.cs +++ b/src/Logic/SubtitleFormats/Pac.cs @@ -670,7 +670,7 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats if (timeCode.Hours == 7 && timeCode.Minutes == 35) highPart = "065535"; - byte frames = (byte)(timeCode.Milliseconds / (1000.0 / Configuration.Settings.General.CurrentFrameRate)); + byte frames = (byte)MillisecondsToFrames(timeCode.Milliseconds); string lowPart = string.Format("{0:00}", timeCode.Seconds) + string.Format("{0:00}", frames); int high = int.Parse(highPart); diff --git a/src/Logic/SubtitleFormats/QuickTimeText.cs b/src/Logic/SubtitleFormats/QuickTimeText.cs index 0f601e061..ce546008f 100644 --- a/src/Logic/SubtitleFormats/QuickTimeText.cs +++ b/src/Logic/SubtitleFormats/QuickTimeText.cs @@ -64,8 +64,7 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats private string EncodeTimeCode(TimeCode time) { //[00:00:07.12] - int frames = (int)(time.Milliseconds / (1000.0 / Configuration.Settings.General.CurrentFrameRate)); - return string.Format("[{0:00}:{1:00}:{2:00}.{3:00}]", time.Hours, time.Minutes, time.Seconds, frames); + return string.Format("[{0:00}:{1:00}:{2:00}.{3:00}]", time.Hours, time.Minutes, time.Seconds, MillisecondsToFrames(time.Milliseconds)); } public override void LoadSubtitle(Subtitle subtitle, List lines, string fileName) diff --git a/src/Logic/SubtitleFormats/Scenarist.cs b/src/Logic/SubtitleFormats/Scenarist.cs index 64c8faab1..345c28eb5 100644 --- a/src/Logic/SubtitleFormats/Scenarist.cs +++ b/src/Logic/SubtitleFormats/Scenarist.cs @@ -55,8 +55,7 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats private string EncodeTimeCode(TimeCode time) { //00:03:15:22 (last is frame) - int frames = (int) (time.Milliseconds / (1000.0 / Configuration.Settings.General.CurrentFrameRate)); - return string.Format("{0:00}:{1:00}:{2:00}:{3:00}", time.Hours, time.Minutes, time.Seconds, frames); + return string.Format("{0:00}:{1:00}:{2:00}:{3:00}", time.Hours, time.Minutes, time.Seconds, MillisecondsToFrames(time.Milliseconds)); } public override void LoadSubtitle(Subtitle subtitle, List lines, string fileName) diff --git a/src/Logic/SubtitleFormats/Son.cs b/src/Logic/SubtitleFormats/Son.cs index b71cc9a80..d4d577333 100644 --- a/src/Logic/SubtitleFormats/Son.cs +++ b/src/Logic/SubtitleFormats/Son.cs @@ -54,8 +54,7 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats private string EncodeTimeCode(TimeCode time) { //00:03:15:22 (last is frame) - int frames = (int)(time.Milliseconds / (1000.0 / Configuration.Settings.General.CurrentFrameRate)); - return string.Format("{0:00}:{1:00}:{2:00}:{3:00}", time.Hours, time.Minutes, time.Seconds, frames); + return string.Format("{0:00}:{1:00}:{2:00}:{3:00}", time.Hours, time.Minutes, time.Seconds, MillisecondsToFrames(time.Milliseconds)); } public override void LoadSubtitle(Subtitle subtitle, List lines, string fileName) diff --git a/src/Logic/SubtitleFormats/SonyDVDArchitectLineAndDuration.cs b/src/Logic/SubtitleFormats/SonyDVDArchitectLineAndDuration.cs new file mode 100644 index 000000000..4a93df07a --- /dev/null +++ b/src/Logic/SubtitleFormats/SonyDVDArchitectLineAndDuration.cs @@ -0,0 +1,125 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Text.RegularExpressions; + +namespace Nikse.SubtitleEdit.Logic.SubtitleFormats +{ + public class SonyDVDArchitectLineAndDuration : SubtitleFormat + { + public override string Extension + { + get { return ".txt"; } + } + + public override string Name + { + get { return "Sony DVDArchitect line/duration"; } + } + + public override bool HasLineNumber + { + get { return true; } + } + + public override bool IsTimeBased + { + get { return true; } + } + + public override bool IsMine(List lines, string fileName) + { + var subtitle = new Subtitle(); + LoadSubtitle(subtitle, lines, fileName); + return subtitle.Paragraphs.Count > _errorCount; + } + + public override string ToText(Subtitle subtitle, string title) + { + var sb = new StringBuilder(); + sb.AppendLine("Title: " + title); + sb.AppendLine("Translator: No Author"); + sb.AppendLine("Date: " + DateTime.Now.ToString("dd-MM-yyyy").Replace("-",".")); // 25.08.2011 + double milliseconds = 0; + if (subtitle.Paragraphs.Count > 0) + milliseconds = subtitle.Paragraphs[subtitle.Paragraphs.Count-1].EndTime.TotalMilliseconds; + var tc = new TimeCode(TimeSpan.FromMilliseconds(milliseconds)); + sb.AppendLine(string.Format("Duration: {0:00}:{1:00}:{2:00}:{3:00}", tc.Hours, tc.Minutes, tc.Seconds, MillisecondsToFrames(tc.Milliseconds))); // 01:20:49:12 + sb.AppendLine("Program start: 00:00:00:00"); + sb.AppendLine("Title count: " + subtitle.Paragraphs.Count); + sb.AppendLine(); + sb.AppendLine("#\tIn\tOut\tDuration"); + sb.AppendLine(); + int count = 0; + foreach (Paragraph p in subtitle.Paragraphs) + { + count++; + string text = Utilities.RemoveHtmlTags(p.Text); + sb.AppendLine(string.Format("{13}\t{0:00}:{1:00}:{2:00}:{3:00}\t{4:00}:{5:00}:{6:00}:{7:00}\t{8:00}:{9:00}:{10:00}:{11:00}\r\n{12:00}" + Environment.NewLine, + p.StartTime.Hours, p.StartTime.Minutes, p.StartTime.Seconds, MillisecondsToFrames(p.StartTime.Milliseconds), + p.EndTime.Hours, p.EndTime.Minutes, p.EndTime.Seconds, MillisecondsToFrames(p.EndTime.Milliseconds), + p.Duration.Hours, p.Duration.Minutes, p.Duration.Seconds, MillisecondsToFrames(p.Duration.Milliseconds), + text, count)); + } + return sb.ToString().Trim() + Environment.NewLine + Environment.NewLine + Environment.NewLine; + } + + public override void LoadSubtitle(Subtitle subtitle, List lines, string fileName) + { //22 00:04:19:12 00:04:21:09 00:00:01:21 + + var regex = new Regex(@"^\d+\t\d\d:\d\d:\d\d:\d\d\t\d\d:\d\d:\d\d:\d\d\t\d\d:\d\d:\d\d:\d\d$", RegexOptions.Compiled); + _errorCount = 0; + Paragraph lastParagraph = null; + int count = 0; + foreach (string line in lines) + { + string s = line; + if (s.Length > 0) + { + bool success = false; + var match = regex.Match(s); + if (s.Length > 31 && match.Success) + { + if (lastParagraph != null) + subtitle.Paragraphs.Add(lastParagraph); + + var arr = s.Split('\t'); + TimeCode start = DecodeTimeCode(arr[1]); + TimeCode end = DecodeTimeCode(arr[2]); + lastParagraph = new Paragraph(start, end, string.Empty); + success = true; + } + else if (line.Trim().Length > 0 && lastParagraph != null && Utilities.CountTagInText(lastParagraph.Text, Environment.NewLine) < 4) + { + lastParagraph.Text = (lastParagraph.Text + Environment.NewLine + line).Trim(); + success = true; + } + if (!success && count > 9) + _errorCount++; + } + count++; + } + if (lastParagraph != null) + subtitle.Paragraphs.Add(lastParagraph); + subtitle.Renumber(1); + } + + private TimeCode DecodeTimeCode(string s) + { + var parts = s.Split(':'); + + //00:00:07:12 + string hour = parts[0]; + string minutes = parts[1]; + string seconds = parts[2]; + string frames = parts[3]; + + int milliseconds = (int)((1000.0 / Configuration.Settings.General.CurrentFrameRate) * int.Parse(frames)); + if (milliseconds > 999) + milliseconds = 999; + + TimeCode tc = new TimeCode(int.Parse(hour), int.Parse(minutes), int.Parse(seconds), milliseconds); + return tc; + } + } +} diff --git a/src/Logic/SubtitleFormats/SpruceWithSpace.cs b/src/Logic/SubtitleFormats/SpruceWithSpace.cs index 34801da1a..70b378db0 100644 --- a/src/Logic/SubtitleFormats/SpruceWithSpace.cs +++ b/src/Logic/SubtitleFormats/SpruceWithSpace.cs @@ -86,10 +86,7 @@ $TapeOffset = FALSE private string EncodeTimeCode(TimeCode time) { //00:01:54:19 - - int frames = (int) (time.Milliseconds / (1000.0 / Configuration.Settings.General.CurrentFrameRate)); - - return string.Format("{0:00}:{1:00}:{2:00}:{3:00}", time.Hours, time.Minutes, time.Seconds, frames); + return string.Format("{0:00}:{1:00}:{2:00}:{3:00}", time.Hours, time.Minutes, time.Seconds, MillisecondsToFrames(time.Milliseconds)); } public override void LoadSubtitle(Subtitle subtitle, List lines, string fileName) diff --git a/src/Logic/SubtitleFormats/StructuredTitles.cs b/src/Logic/SubtitleFormats/StructuredTitles.cs index 4cdd410ac..5208eb576 100644 --- a/src/Logic/SubtitleFormats/StructuredTitles.cs +++ b/src/Logic/SubtitleFormats/StructuredTitles.cs @@ -69,8 +69,7 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats private string EncodeTimeCode(TimeCode time) { //00:03:15:22 (last is frame) - int frames = (int)(time.Milliseconds / (1000.0 / Configuration.Settings.General.CurrentFrameRate)); - return string.Format("{0:00}:{1:00}:{2:00}:{3:00}", time.Hours, time.Minutes, time.Seconds, frames); + return string.Format("{0:00}:{1:00}:{2:00}:{3:00}", time.Hours, time.Minutes, time.Seconds, MillisecondsToFrames(time.Milliseconds)); } public override void LoadSubtitle(Subtitle subtitle, List lines, string fileName) diff --git a/src/Logic/SubtitleFormats/SubtitleFormat.cs b/src/Logic/SubtitleFormats/SubtitleFormat.cs index 4ce7ebc5f..f985d53c4 100644 --- a/src/Logic/SubtitleFormats/SubtitleFormat.cs +++ b/src/Logic/SubtitleFormats/SubtitleFormat.cs @@ -17,6 +17,7 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats new SubRip(), new AbcIViewer(), new AdobeEncore(), + new AdobeEncoreLineTabs(), new AdobeEncoreTabs(), new AdobeEncoreWithLineNumbers(), new AdvancedSubStationAlpha(), @@ -50,6 +51,7 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats new ScenaristClosedCaptions(), new SonyDVDArchitect(), new SonyDVDArchitectExplicitDuration(), + new SonyDVDArchitectLineAndDuration(), new SonyDVDArchitectTabs(), new SonyDVDArchitectWithLineNumbers(), new SubStationAlpha(), @@ -157,5 +159,10 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats } } + public static int MillisecondsToFrames(double milliseconds) + { + return (int)(milliseconds / (1000.0 / Configuration.Settings.General.CurrentFrameRate)); + } + } } diff --git a/src/Logic/SubtitleFormats/UnknownSubtitle7.cs b/src/Logic/SubtitleFormats/UnknownSubtitle7.cs index 50198909b..dc3d7a609 100644 --- a/src/Logic/SubtitleFormats/UnknownSubtitle7.cs +++ b/src/Logic/SubtitleFormats/UnknownSubtitle7.cs @@ -139,8 +139,7 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats private string EncodeTimeCode(TimeCode time) { - int frames = (int)(time.Milliseconds / (1000.0 / Configuration.Settings.General.CurrentFrameRate))+1; - return string.Format("{0:00}:{1:00}:{2:00}:{3:00}", time.Hours, time.Minutes, time.Seconds, frames); + return string.Format("{0:00}:{1:00}:{2:00}:{3:00}", time.Hours, time.Minutes, time.Seconds, MillisecondsToFrames(time.Milliseconds)); } private TimeCode DecodeTimeCode(string[] parts) diff --git a/src/Logic/SubtitleFormats/Utx.cs b/src/Logic/SubtitleFormats/Utx.cs index 849a62dad..1b38816c4 100644 --- a/src/Logic/SubtitleFormats/Utx.cs +++ b/src/Logic/SubtitleFormats/Utx.cs @@ -94,8 +94,7 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats private string EncodeTimeCode(TimeCode time) { //0:03:02.15 - int frames = (int)(time.Milliseconds / (1000.0 / Configuration.Settings.General.CurrentFrameRate)); - return string.Format("{0}:{1:00}:{2:00}.{3:00}", time.Hours, time.Minutes, time.Seconds, frames); + return string.Format("{0}:{1:00}:{2:00}.{3:00}", time.Hours, time.Minutes, time.Seconds, MillisecondsToFrames(time.Milliseconds)); } private TimeCode DecodeTimeCode(string timePart) diff --git a/src/Logic/SubtitleFormats/Wsb.cs b/src/Logic/SubtitleFormats/Wsb.cs index 210d8797d..c6f165a2b 100644 --- a/src/Logic/SubtitleFormats/Wsb.cs +++ b/src/Logic/SubtitleFormats/Wsb.cs @@ -58,8 +58,7 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats private string EncodeTimeCode(TimeCode time) { //00:03:15:22 (last is frame) - int frames = (int)(time.Milliseconds / (1000.0 / Configuration.Settings.General.CurrentFrameRate)); - return string.Format("{0:00}{1:00}{2:00}{3:00}", time.Hours, time.Minutes, time.Seconds, frames); + return string.Format("{0:00}{1:00}{2:00}{3:00}", time.Hours, time.Minutes, time.Seconds, MillisecondsToFrames(time.Milliseconds)); } public override void LoadSubtitle(Subtitle subtitle, List lines, string fileName) diff --git a/src/SubtitleEdit.csproj b/src/SubtitleEdit.csproj index 11d9b2f52..db6c2a05f 100644 --- a/src/SubtitleEdit.csproj +++ b/src/SubtitleEdit.csproj @@ -576,6 +576,7 @@ + @@ -605,6 +606,7 @@ +