mirror of
https://github.com/SubtitleEdit/subtitleedit.git
synced 2024-11-22 11:12:36 +01:00
Minor improvements for subtitle format auto-detect
This commit is contained in:
parent
4ab43df1e5
commit
ce46e6984f
@ -35,7 +35,7 @@ namespace Nikse.SubtitleEdit.Core.Common
|
|||||||
subtitle = subTcOnAloneLines;
|
subtitle = subTcOnAloneLines;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isJson = IsJson(lines);
|
var isJson = IsJson(lines);
|
||||||
|
|
||||||
if (subtitle.Paragraphs.Count < 2 && !isJson)
|
if (subtitle.Paragraphs.Count < 2 && !isJson)
|
||||||
{
|
{
|
||||||
|
@ -11,9 +11,8 @@ namespace Nikse.SubtitleEdit.Core.Common
|
|||||||
{
|
{
|
||||||
public Subtitle AutoGuessImport(List<string> lines)
|
public Subtitle AutoGuessImport(List<string> lines)
|
||||||
{
|
{
|
||||||
|
|
||||||
var sb = new StringBuilder();
|
var sb = new StringBuilder();
|
||||||
foreach (string s in lines)
|
foreach (var s in lines)
|
||||||
{
|
{
|
||||||
sb.Append(s);
|
sb.Append(s);
|
||||||
}
|
}
|
||||||
@ -27,8 +26,8 @@ namespace Nikse.SubtitleEdit.Core.Common
|
|||||||
var subtitle1 = new Subtitle();
|
var subtitle1 = new Subtitle();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
int count = 0;
|
var count = 0;
|
||||||
foreach (string line in allText.Split('{', '}', '[', ']'))
|
foreach (var line in allText.Split('{', '}', '[', ']'))
|
||||||
{
|
{
|
||||||
count++;
|
count++;
|
||||||
ReadParagraph(line, subtitle1);
|
ReadParagraph(line, subtitle1);
|
||||||
@ -46,8 +45,8 @@ namespace Nikse.SubtitleEdit.Core.Common
|
|||||||
var subtitle2 = new Subtitle();
|
var subtitle2 = new Subtitle();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
int count = 0;
|
var count = 0;
|
||||||
foreach (string line in allText.Split('{', '}'))
|
foreach (var line in allText.Split('{', '}'))
|
||||||
{
|
{
|
||||||
count++;
|
count++;
|
||||||
ReadParagraph(line, subtitle2);
|
ReadParagraph(line, subtitle2);
|
||||||
@ -65,7 +64,7 @@ namespace Nikse.SubtitleEdit.Core.Common
|
|||||||
var subtitle3 = new Subtitle();
|
var subtitle3 = new Subtitle();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
int count = 0;
|
var count = 0;
|
||||||
foreach (var line in Json.ReadObjectArray(allText))
|
foreach (var line in Json.ReadObjectArray(allText))
|
||||||
{
|
{
|
||||||
count++;
|
count++;
|
||||||
@ -97,7 +96,7 @@ namespace Nikse.SubtitleEdit.Core.Common
|
|||||||
return FixTimeCodeMsOrSeconds(subtitle3);
|
return FixTimeCodeMsOrSeconds(subtitle3);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Subtitle FixTimeCodeMsOrSeconds(Subtitle subtitle)
|
private static Subtitle FixTimeCodeMsOrSeconds(Subtitle subtitle)
|
||||||
{
|
{
|
||||||
if (subtitle == null || subtitle.Paragraphs.Count < 5)
|
if (subtitle == null || subtitle.Paragraphs.Count < 5)
|
||||||
{
|
{
|
||||||
@ -105,11 +104,12 @@ namespace Nikse.SubtitleEdit.Core.Common
|
|||||||
}
|
}
|
||||||
|
|
||||||
double totalDuration = 0;
|
double totalDuration = 0;
|
||||||
int msFound = 0;
|
var msFound = 0;
|
||||||
foreach (var p in subtitle.Paragraphs)
|
foreach (var p in subtitle.Paragraphs)
|
||||||
{
|
{
|
||||||
totalDuration += p.DurationTotalMilliseconds;
|
totalDuration += p.DurationTotalMilliseconds;
|
||||||
if (p.Style.Contains("\"startMs\"") ||
|
if (p.Style.Contains("\"start\"") ||
|
||||||
|
p.Style.Contains("\"startMs\"") ||
|
||||||
p.Style.Contains("\"start_ms\"") ||
|
p.Style.Contains("\"start_ms\"") ||
|
||||||
p.Style.Contains("\"startMillis\"") ||
|
p.Style.Contains("\"startMillis\"") ||
|
||||||
p.Style.Contains("\"start_millis\"") ||
|
p.Style.Contains("\"start_millis\"") ||
|
||||||
@ -173,10 +173,8 @@ namespace Nikse.SubtitleEdit.Core.Common
|
|||||||
{
|
{
|
||||||
start = start.TrimEnd('s');
|
start = start.TrimEnd('s');
|
||||||
end = end.TrimEnd('s');
|
end = end.TrimEnd('s');
|
||||||
double startSeconds;
|
if (double.TryParse(start, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out var startSeconds) &&
|
||||||
double endSeconds;
|
double.TryParse(end, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out var endSeconds))
|
||||||
if (double.TryParse(start, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out startSeconds) &&
|
|
||||||
double.TryParse(end, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out endSeconds))
|
|
||||||
{
|
{
|
||||||
var p = new Paragraph(Json.DecodeJsonText(text), startSeconds * TimeCode.BaseUnit, endSeconds * TimeCode.BaseUnit) { Extra = originalStart, Style = s };
|
var p = new Paragraph(Json.DecodeJsonText(text), startSeconds * TimeCode.BaseUnit, endSeconds * TimeCode.BaseUnit) { Extra = originalStart, Style = s };
|
||||||
subtitle.Paragraphs.Add(p);
|
subtitle.Paragraphs.Add(p);
|
||||||
@ -218,7 +216,7 @@ namespace Nikse.SubtitleEdit.Core.Common
|
|||||||
{
|
{
|
||||||
return ReadFirstMultiTag(s, new[]
|
return ReadFirstMultiTag(s, new[]
|
||||||
{
|
{
|
||||||
"end", "out",
|
"end", "out", "stop",
|
||||||
"endTime", "end_time", "endtime",
|
"endTime", "end_time", "endtime",
|
||||||
"endMillis", "end_Millis", "endmillis",
|
"endMillis", "end_Millis", "endmillis",
|
||||||
"endMs", "end_ms", "startms",
|
"endMs", "end_ms", "startms",
|
||||||
@ -251,6 +249,10 @@ namespace Nikse.SubtitleEdit.Core.Common
|
|||||||
{
|
{
|
||||||
idx = s.IndexOf("\"caption", StringComparison.OrdinalIgnoreCase);
|
idx = s.IndexOf("\"caption", StringComparison.OrdinalIgnoreCase);
|
||||||
}
|
}
|
||||||
|
if (idx < 0)
|
||||||
|
{
|
||||||
|
idx = s.IndexOf("\"sentence", StringComparison.OrdinalIgnoreCase);
|
||||||
|
}
|
||||||
|
|
||||||
if (idx < 0)
|
if (idx < 0)
|
||||||
{
|
{
|
||||||
@ -277,6 +279,15 @@ namespace Nikse.SubtitleEdit.Core.Common
|
|||||||
{
|
{
|
||||||
text = Json.ReadTag(s, "caption");
|
text = Json.ReadTag(s, "caption");
|
||||||
}
|
}
|
||||||
|
if (text == null)
|
||||||
|
{
|
||||||
|
text = Json.ReadTag(s, "sentence");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (text != null)
|
||||||
|
{
|
||||||
|
text = Json.DecodeJsonText(text);
|
||||||
|
}
|
||||||
|
|
||||||
var textLines = Json.ReadArray(s, "text");
|
var textLines = Json.ReadArray(s, "text");
|
||||||
if (textLines == null || textLines.Count == 0)
|
if (textLines == null || textLines.Count == 0)
|
||||||
@ -284,7 +295,7 @@ namespace Nikse.SubtitleEdit.Core.Common
|
|||||||
textLines = Json.ReadArray(s, "content");
|
textLines = Json.ReadArray(s, "content");
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isArray = s.Contains("[");
|
var isArray = s.Contains("[");
|
||||||
if (isArray && textLines.Any(p => p == "end_time" || p == "endTime" || p == "end" || p == "endMs" || p == "endMilliseconds" || p == "end_ms" || p == "endms" || p == "to" || p == "to_ms" || p == "toms" || p == "from" || p == "from_ms"))
|
if (isArray && textLines.Any(p => p == "end_time" || p == "endTime" || p == "end" || p == "endMs" || p == "endMilliseconds" || p == "end_ms" || p == "endms" || p == "to" || p == "to_ms" || p == "toms" || p == "from" || p == "from_ms"))
|
||||||
{
|
{
|
||||||
isArray = false;
|
isArray = false;
|
||||||
|
@ -69,6 +69,10 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
|||||||
|
|
||||||
last = ms;
|
last = ms;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_errorCount++;
|
||||||
|
}
|
||||||
|
|
||||||
index += subBufferLength;
|
index += subBufferLength;
|
||||||
}
|
}
|
||||||
|
@ -91,7 +91,7 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
|
|||||||
public override string ToText(Subtitle subtitle, string title)
|
public override string ToText(Subtitle subtitle, string title)
|
||||||
{
|
{
|
||||||
var sb = new StringBuilder(@"[");
|
var sb = new StringBuilder(@"[");
|
||||||
int count = 0;
|
var count = 0;
|
||||||
foreach (var p in subtitle.Paragraphs)
|
foreach (var p in subtitle.Paragraphs)
|
||||||
{
|
{
|
||||||
if (count > 0)
|
if (count > 0)
|
||||||
|
Loading…
Reference in New Issue
Block a user