Added new subtitle format

This commit is contained in:
niksedk 2014-07-13 17:49:28 +02:00
parent 392e852e65
commit 545d7aa40d
6 changed files with 127 additions and 48 deletions

View File

@ -52,7 +52,7 @@
<RegularExpressionIsNotValid>Expresia nu este valabilă!</RegularExpressionIsNotValid>
<SubtitleSaved>Subtitrare salvată</SubtitleSaved>
<CurrentSubtitle>Subtitrarea curentă</CurrentSubtitle>
<OriginalText>Textul original</OriginalText>
<OriginalText>Text original</OriginalText>
<OpenOriginalSubtitleFile>Deschide subtitrarea originală ...</OpenOriginalSubtitleFile>
<PleaseWait>Te rog, așteaptă ...</PleaseWait>
<SessionKey>Sesiune</SessionKey>
@ -159,7 +159,7 @@ E-mail la: nikse.dk @gmail.com</AboutText1>
<ScanFolder>Explorare dosar ...</ScanFolder>
<ScanningFolder>Explorare {0} și sub-directoare pentru fișierele de subtitrare ...</ScanningFolder>
<Recursive>Include sub-directoare</Recursive>
<SetMinMsBetweenSubtitles>Setarea minimumului de milisecunde între subtitrări</SetMinMsBetweenSubtitles>
<SetMinMsBetweenSubtitles>Setarea minimului de milisecunde între subtitrări</SetMinMsBetweenSubtitles>
</BatchConvert>
<Beamer>
<Title>Proiector</Title>
@ -607,8 +607,8 @@ E-mail la: nikse.dk @gmail.com</AboutText1>
<From>De la:</From>
<To>La:</To>
<Translate>Traduce</Translate>
<PleaseWait>Te rog, așteaptă ... aceasta poate dura un timp</PleaseWait>
<PoweredByGoogleTranslate>Realizat de Google traslate</PoweredByGoogleTranslate>
<PleaseWait>Te rog, așteaptă ... poate dura un timp</PleaseWait>
<PoweredByGoogleTranslate>Realizat de Google translate</PoweredByGoogleTranslate>
<PoweredByMicrosoftTranslate>Realizat de Microsoft translate</PoweredByMicrosoftTranslate>
</GoogleTranslate>
<GoogleOrMicrosoftTranslate>
@ -693,7 +693,7 @@ E-mail la: nikse.dk @gmail.com</AboutText1>
<SaveOriginal>Salvează subtitrarea originală</SaveOriginal>
<CloseOriginal>Închide subtitrarea originală</CloseOriginal>
<OpenContainingFolder>Deschide dosar de conținut</OpenContainingFolder>
<Compare>&amp;Compară ...</Compare>
<Compare>&amp;Comparare ...</Compare>
<Statistics>Statisti&amp;că ...</Statistics>
<Plugins>Plugin-uri ...</Plugins>
<ImportOcrFromDvd>Importare subtitrare/OCR din vob/IFO (DVD) ...</ImportOcrFromDvd>
@ -947,7 +947,7 @@ E-mail la: nikse.dk @gmail.com</AboutText1>
<SetEndTimeAndGoToNext>Set. &amp;finalul&amp; și treci mai departe</SetEndTimeAndGoToNext>
<AdjustedViaEndTime>Corectează prin timpul de final {0}</AdjustedViaEndTime>
<SetEndTime>Setează f&amp;inalul</SetEndTime>
<SetstartTimeAndOffsetOfRest>Set. star&amp;tul și decalarea pauzei</SetstartTimeAndOffsetOfRest>
<SetstartTimeAndOffsetOfRest>Set. star&amp;tul și decalează pauza</SetstartTimeAndOffsetOfRest>
<SearchTextOnline>Caută text online</SearchTextOnline>
<GoogleTranslate>Traducere Google</GoogleTranslate>
<GoogleIt>Caută cu Google</GoogleIt>
@ -1336,7 +1336,7 @@ pot edita în acelasi fișier de subtitrare (colaborare)</Information>
<GetPluginsInfo1>Plugin-urile Subtitle Edit trebuie să fie descărcate în dosarul „Plugin-uri”</GetPluginsInfo1>
<GetPluginsInfo2>Alege plugin-ul și clic pe „Descărcare”</GetPluginsInfo2>
<PluginXDownloaded>Plugin-ul {0} descărcat</PluginXDownloaded>
<Download>&amp;Descărcă</Download>
<Download>&amp;Descărcare</Download>
<Remove>&amp;Elimină</Remove>
<UpdateAllX>Actualizează tot ({0})</UpdateAllX>
<UnableToDownloadPluginListX>Imposibilă descărcarea listei de plugin-uri: {0}</UnableToDownloadPluginListX>
@ -1445,7 +1445,7 @@ pot edita în acelasi fișier de subtitrare (colaborare)</Information>
<DefaultFileEncoding>Codare implicită</DefaultFileEncoding>
<AutoDetectAnsiEncoding>Auto-detectează codificare ANSI</AutoDetectAnsiEncoding>
<SubtitleLineMaximumLength>Lung. max. a unei singure linii</SubtitleLineMaximumLength>
<MaximumCharactersPerSecond>Maxim de caractere/secundă</MaximumCharactersPerSecond>
<MaximumCharactersPerSecond>Maxim de caractere/sec.</MaximumCharactersPerSecond>
<AutoWrapWhileTyping>Auto-încadrare în timpul tastării</AutoWrapWhileTyping>
<DurationMinimumMilliseconds>Durată minimă, în milisecunde</DurationMinimumMilliseconds>
<DurationMaximumMilliseconds>Durată maximă, în milisecunde</DurationMaximumMilliseconds>
@ -1648,7 +1648,7 @@ pot edita în acelasi fișier de subtitrare (colaborare)</Information>
<MainTextBoxUnbreak>Text neîntrerupt</MainTextBoxUnbreak>
<MainFileSaveAll>Salvează tot</MainFileSaveAll>
<Miscellaneous>Diverse</Miscellaneous>
<UseDoNotBreakAfterList>Folosește lista nu-întrerupe-după (ptr. auto-întrerup.)</UseDoNotBreakAfterList>
<UseDoNotBreakAfterList>Folosește lista nu-întrerupe-după (pentru auto-întrerupere)</UseDoNotBreakAfterList>
</Settings>
<ShowEarlierLater>
<Title>Arată liniile selectate mai devreme/târziu</Title>
@ -1674,12 +1674,12 @@ pot edita în acelasi fișier de subtitrare (colaborare)</Information>
<FullText>Întreg textul</FullText>
<WordNotFound>Cuvânt negăsit</WordNotFound>
<Language>Limba</Language>
<Change>Schimbare</Change>
<Change>Schimbă</Change>
<ChangeAll>Schimbă tot</ChangeAll>
<SkipOnce>Se sare peste &amp;una</SkipOnce>
<SkipAll>&amp;Se sare peste tot</SkipAll>
<SkipOnce>Sari peste &amp;una</SkipOnce>
<SkipAll>&amp;Sari peste tot</SkipAll>
<AddToUserDictionary>Adaugă la dicționarul utilizatorului</AddToUserDictionary>
<AddToNamesAndIgnoreList>Adaugă la lista numelor/suntelor (caractere identice)</AddToNamesAndIgnoreList>
<AddToNamesAndIgnoreList>Adaugă la listă nume/sunete (identice)</AddToNamesAndIgnoreList>
<AddToOcrReplaceList>Adaugă perechea la lista realocărilor OCR</AddToOcrReplaceList>
<Abort>Revocare</Abort>
<Use>Utilizare</Use>
@ -1689,7 +1689,7 @@ pot edita în acelasi fișier de subtitrare (colaborare)</Information>
<EditWholeText>Editare text integral</EditWholeText>
<EditWordOnly>Editare doar cuvânt</EditWordOnly>
<AddXToNamesEtc>Adaugă '{0}' la lista nume/etc.</AddXToNamesEtc>
<AutoFixNames>Auto-repară numele unde diferă doar caracterele (mari/mici)</AutoFixNames>
<AutoFixNames>Auto-repară nume dif. doar prin caractere (mari/mici)</AutoFixNames>
<CheckOneLetterWords>Avizează o literă necunoscută din cuvinte</CheckOneLetterWords>
<TreatINQuoteAsING>Prelucrează sfârșitul cuvântului „in” ca „ing” (numai în engleză)</TreatINQuoteAsING>
<ImageText>Imagine text</ImageText>
@ -1866,7 +1866,7 @@ pot edita în acelasi fișier de subtitrare (colaborare)</Information>
<ThreeSecondsBack>&lt; 3 sec</ThreeSecondsBack>
<PlayXSecondsAndBack>Redă {0} sec și înapoi</PlayXSecondsAndBack>
<FindText>Găsește text</FindText>
<GoToSubPosition>Trece la poziție</GoToSubPosition>
<GoToSubPosition>Treci la poziție</GoToSubPosition>
<KeepChangesTitle>Se păstrează schimbările?</KeepChangesTitle>
<KeepChangesMessage>Modificările la subtitrare au fost făcute în „Sincronizare vizuală”. Se păstrează schimbările?</KeepChangesMessage>
<SynchronizationDone>Sincronizare făcută!</SynchronizationDone>

View File

@ -160,7 +160,7 @@ $HorzAlign = Center
return text.Replace(Environment.NewLine, "|");
}
private static bool GetTimeCode(TimeCode timeCode, string timeString)
internal static bool GetTimeCode(TimeCode timeCode, string timeString)
{
try
{
@ -168,13 +168,7 @@ $HorzAlign = Center
timeCode.Hours = int.Parse(timeParts[0]);
timeCode.Minutes = int.Parse(timeParts[1]);
timeCode.Seconds = int.Parse(timeParts[2]);
int frames = int.Parse(timeParts[3]);
int milliseconds = (int)Math.Round(1000.0 / Configuration.Settings.General.CurrentFrameRate * frames);
if (milliseconds > 999)
milliseconds = 999;
timeCode.Milliseconds = milliseconds;
timeCode.Milliseconds = FramesToMillisecondsMax999(int.Parse(timeParts[3]));
return true;
}
catch
@ -182,5 +176,6 @@ $HorzAlign = Center
return false;
}
}
}
}

View File

@ -81,8 +81,8 @@ $HorzAlign = Center
string[] toPart = line.Substring(0, 25).Split(new[] { " ," }, StringSplitOptions.None);
Paragraph p = new Paragraph();
if (toPart.Length == 2 &&
GetTimeCode(p.StartTime, toPart[0]) &&
GetTimeCode(p.EndTime, toPart[1]))
DvdStudioPro.GetTimeCode(p.StartTime, toPart[0]) &&
DvdStudioPro.GetTimeCode(p.EndTime, toPart[1]))
{
number++;
p.Number = number;
@ -100,27 +100,5 @@ $HorzAlign = Center
}
}
private static bool GetTimeCode(TimeCode timeCode, string timeString)
{
try
{
string[] timeParts = timeString.Split(':');
timeCode.Hours = int.Parse(timeParts[0]);
timeCode.Minutes = int.Parse(timeParts[1]);
timeCode.Seconds = int.Parse(timeParts[2]);
int frames = int.Parse(timeParts[3]);
int milliseconds = (int)Math.Round(1000.0 / Configuration.Settings.General.CurrentFrameRate * frames);
if (milliseconds > 999)
milliseconds = 999;
timeCode.Milliseconds = milliseconds;
return true;
}
catch
{
return false;
}
}
}
}

View File

@ -0,0 +1,104 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
{
public class DvdStudioProSpaceOne : SubtitleFormat
{
static readonly Regex RegexTimeCodes = new Regex(@"^\d+:\d+:\d+:\d+,\d+:\d+:\d+:\d+, .*$", RegexOptions.Compiled);
public override string Extension
{
get { return ".STL"; }
}
public override string Name
{
get { return "DVD Studio Pro with one space"; }
}
public override bool IsTimeBased
{
get { return true; }
}
public override bool IsMine(List<string> lines, string fileName)
{
var subtitle = new Subtitle();
LoadSubtitle(subtitle, lines, fileName);
return subtitle.Paragraphs.Count > _errorCount;
}
public override string ToText(Subtitle subtitle, string title)
{
const string paragraphWriteFormat = "{0},{1}, {2}\r\n";
const string timeFormat = "{0:00}:{1:00}:{2:00}:{3:00}";
const string header = @"$VertAlign = Bottom
$Bold = FALSE
$Underlined = FALSE
$Italic = 0
$XOffset = 0
$YOffset = -5
$TextContrast = 15
$Outline1Contrast = 15
$Outline2Contrast = 13
$BackgroundContrast = 0
$ForceDisplay = FALSE
$FadeIn = 0
$FadeOut = 0
$HorzAlign = Center
";
var sb = new StringBuilder();
sb.AppendLine(header);
foreach (Paragraph p in subtitle.Paragraphs)
{
double factor = (1000.0 / Configuration.Settings.General.CurrentFrameRate);
string startTime = string.Format(timeFormat, p.StartTime.Hours, p.StartTime.Minutes, p.StartTime.Seconds, (int)Math.Round(p.StartTime.Milliseconds / factor));
string endTime = string.Format(timeFormat, p.EndTime.Hours, p.EndTime.Minutes, p.EndTime.Seconds, (int)Math.Round(p.EndTime.Milliseconds / factor));
sb.Append(string.Format(paragraphWriteFormat, startTime, endTime, DvdStudioPro.EncodeStyles(p.Text)));
}
return sb.ToString().Trim();
}
public static byte GetFrameFromMilliseconds(int milliseconds, double frameRate)
{
return (byte)Math.Round(milliseconds / (1000.0 / frameRate));
}
public override void LoadSubtitle(Subtitle subtitle, List<string> lines, string fileName)
{
_errorCount = 0;
int number = 0;
foreach (string line in lines)
{
if (line.Trim().Length > 0 && line[0] != '$' && !line.StartsWith("//"))
{
if (RegexTimeCodes.Match(line).Success)
{
string[] toPart = line.Substring(0, 24).Trim(',').Split(',');
var p = new Paragraph();
if (toPart.Length == 2 &&
DvdStudioPro.GetTimeCode(p.StartTime, toPart[0]) &&
DvdStudioPro.GetTimeCode(p.EndTime, toPart[1]))
{
number++;
p.Number = number;
string text = line.Substring(25).Trim();
p.Text = text.Replace(" | ", Environment.NewLine).Replace("|", Environment.NewLine);
p.Text = DvdStudioPro.DecodeStyles(p.Text);
subtitle.Paragraphs.Add(p);
}
}
else
{
_errorCount++;
}
}
}
}
}
}

View File

@ -48,6 +48,7 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats
new DCinemaSmpte2007(),
new DigiBeta(),
new DvdStudioPro(),
new DvdStudioProSpaceOne(),
new DvdStudioProSpace(),
new DvdSubtitle(),
new DvdSubtitleSystem(),

View File

@ -875,6 +875,7 @@
<Compile Include="Logic\StripableText.cs" />
<Compile Include="Logic\SubtitleFormats\AdobeAfterEffectsFTME.cs" />
<Compile Include="Logic\SubtitleFormats\AdobeEncore.cs" />
<Compile Include="Logic\SubtitleFormats\DvdStudioProSpaceOne.cs" />
<Compile Include="Logic\SubtitleFormats\SatBoxPng.cs" />
<Compile Include="Logic\SubtitleFormats\UnknownSubtitle73.cs" />
<Compile Include="Logic\SubtitleFormats\AdobeEncoreLineTabNewLine.cs" />