From 4c1e5129aef0f7a1da2dd2c44ecefc15b292f394 Mon Sep 17 00:00:00 2001 From: niksedk Date: Tue, 16 Nov 2010 16:16:57 +0000 Subject: [PATCH] Added Bluray sup import (thx to open source project bdsup2sub) + ocr git-svn-id: https://subtitleedit.googlecode.com/svn/trunk@152 99eadd0c-20b8-1223-b5c4-2a2b2df33de2 --- src/Forms/Main.Designer.cs | 10 + src/Forms/Main.cs | 85 +- src/Forms/Main.resx | 82 +- src/Forms/OCRSpellCheck.Designer.cs | 26 +- src/Forms/VobSubOcr.cs | 185 +- src/Logic/BluRaySup/BluRaySupPalette.cs | 468 ++++ src/Logic/BluRaySup/BluRaySupParser.cs | 660 ++++++ src/Logic/BluRaySup/BluRaySupPicture.cs | 403 ++++ src/Logic/BluRaySup/Core.cs | 87 + src/Logic/BluRaySup/ToolBox.cs | 98 + src/Logic/ImageSplitter.cs | 9 + .../SubtitleFormats/UleadSubtitleFormat.cs | 6 +- src/Resources/da-DK.xml | 9 +- src/Resources/da-DK.xml.zip | Bin 19402 -> 19496 bytes src/Resources/es-ES.xml | 5 + src/Resources/es-ES.xml.zip | Bin 20706 -> 20827 bytes src/Resources/fr-FR.xml | 2051 +++++++++-------- src/Resources/fr-FR.xml.zip | Bin 20423 -> 20587 bytes src/Resources/pl-PL.xml | 5 + src/Resources/pl-PL.xml.zip | Bin 21114 -> 21218 bytes src/Resources/ro-RO.xml | 5 + src/Resources/ro-RO.xml.zip | Bin 19970 -> 20081 bytes src/Resources/sr-Cyrl-CS.xml | 16 +- src/Resources/sr-Cyrl-CS.xml.zip | Bin 23130 -> 23277 bytes src/Resources/sr-Latn-CS.xml | 16 +- src/Resources/sr-Latn-CS.xml.zip | Bin 20069 -> 20308 bytes src/Resources/sv-SE.xml | 5 + src/Resources/sv-SE.xml.zip | Bin 19550 -> 19657 bytes src/SubtitleEdit.csproj | 9 +- 29 files changed, 3114 insertions(+), 1126 deletions(-) create mode 100644 src/Logic/BluRaySup/BluRaySupPalette.cs create mode 100644 src/Logic/BluRaySup/BluRaySupParser.cs create mode 100644 src/Logic/BluRaySup/BluRaySupPicture.cs create mode 100644 src/Logic/BluRaySup/Core.cs create mode 100644 src/Logic/BluRaySup/ToolBox.cs diff --git a/src/Forms/Main.Designer.cs b/src/Forms/Main.Designer.cs index c0d8161ad..6b79cf3b4 100644 --- a/src/Forms/Main.Designer.cs +++ b/src/Forms/Main.Designer.cs @@ -73,6 +73,7 @@ this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); this.toolStripMenuItemImportDvdSubtitles = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItemSubIdx = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItemImportBluRaySup = new System.Windows.Forms.ToolStripMenuItem(); this.matroskaImportStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItemManualAnsi = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItemImportText = new System.Windows.Forms.ToolStripMenuItem(); @@ -656,6 +657,7 @@ this.toolStripSeparator1, this.toolStripMenuItemImportDvdSubtitles, this.toolStripMenuItemSubIdx, + this.toolStripMenuItemImportBluRaySup, this.matroskaImportStripMenuItem, this.toolStripMenuItemManualAnsi, this.toolStripMenuItemImportText, @@ -742,6 +744,13 @@ this.toolStripMenuItemSubIdx.Text = "Import/OCR VobSub (sub/idx) subtitle..."; this.toolStripMenuItemSubIdx.Click += new System.EventHandler(this.ToolStripMenuItemSubIdxClick1); // + // toolStripMenuItemImportBluRaySup + // + this.toolStripMenuItemImportBluRaySup.Name = "toolStripMenuItemImportBluRaySup"; + this.toolStripMenuItemImportBluRaySup.Size = new System.Drawing.Size(334, 22); + this.toolStripMenuItemImportBluRaySup.Text = "Import/OCR BluRay sup file..."; + this.toolStripMenuItemImportBluRaySup.Click += new System.EventHandler(this.toolStripMenuItemImportBluRaySup_Click); + // // matroskaImportStripMenuItem // this.matroskaImportStripMenuItem.Name = "matroskaImportStripMenuItem"; @@ -3137,6 +3146,7 @@ private System.Windows.Forms.TrackBar trackBarWaveFormPosition; private System.Windows.Forms.Label labelVideoInfo; private System.Windows.Forms.ToolStripMenuItem showhideWaveFormToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemImportBluRaySup; } } diff --git a/src/Forms/Main.cs b/src/Forms/Main.cs index af8247b4c..ba3f4ef60 100644 --- a/src/Forms/Main.cs +++ b/src/Forms/Main.cs @@ -14,6 +14,7 @@ using Nikse.SubtitleEdit.Logic.Enums; using Nikse.SubtitleEdit.Logic.SubtitleFormats; using Nikse.SubtitleEdit.Logic.VideoPlayers; using Nikse.SubtitleEdit.Logic.VobSub; +using Nikse.SubtitleEdit.Logic.BluRaySup; namespace Nikse.SubtitleEdit.Forms { @@ -139,6 +140,8 @@ namespace Nikse.SubtitleEdit.Forms labelVideoInfo.Text = string.Empty; Text = Title; timeUpDownStartTime.TimeCode = new TimeCode(0, 0, 0, 0); + checkBoxAutoRepeatOn.Checked = Configuration.Settings.General.AutoRepeatOn; + checkBoxAutoContinue.Checked = Configuration.Settings.General.AutoContinueOn; SetFormatToSubRip(); @@ -450,6 +453,10 @@ namespace Nikse.SubtitleEdit.Forms toolStripMenuItemCompare.Text = _language.Menu.File.Compare; toolStripMenuItemImportDvdSubtitles.Text = _language.Menu.File.ImportOcrFromDvd; toolStripMenuItemSubIdx.Text = _language.Menu.File.ImportOcrVobSubSubtitle; + + //toolStripMenuItemImportBluRaySup.Visible = false; //TODO: add blu ray sup import/ocr + toolStripMenuItemImportBluRaySup.Text = _language.Menu.File.ImportBluRaySupFile; + matroskaImportStripMenuItem.Text = _language.Menu.File.ImportSubtitleFromMatroskaFile; toolStripMenuItemManualAnsi.Text = _language.Menu.File.ImportSubtitleWithManualChosenEncoding; toolStripMenuItemImportText.Text = _language.Menu.File.ImportText; @@ -843,8 +850,9 @@ namespace Nikse.SubtitleEdit.Forms fileName), Title, MessageBoxButtons.YesNoCancel) != DialogResult.Yes) return; } - - MakeHistoryForUndo(string.Format(_language.BeforeLoadOf, Path.GetFileName(fileName))); + + if (_subtitle.HistoryItems.Count > 0 || _subtitle.Paragraphs.Count > 0) + MakeHistoryForUndo(string.Format(_language.BeforeLoadOf, Path.GetFileName(fileName))); SubtitleFormat format = _subtitle.LoadSubtitle(fileName, out encoding, encoding); @@ -3454,6 +3462,9 @@ namespace Nikse.SubtitleEdit.Forms //TODO: save in adjust all lines ...Configuration.Settings.General.DefaultAdjustMilliseconds = (int)timeUpDownAdjust.TimeCode.TotalMilliseconds; + Configuration.Settings.General.AutoRepeatOn = checkBoxAutoRepeatOn.Checked; + Configuration.Settings.General.AutoContinueOn = checkBoxAutoContinue.Checked; + Configuration.Settings.Save(); } } @@ -4078,6 +4089,7 @@ namespace Nikse.SubtitleEdit.Forms _fileName = Path.ChangeExtension(vobSubOcr.FileName, ".srt"); Text = Title + " - " + _fileName; + _converted = true; Configuration.Settings.Save(); } @@ -4169,7 +4181,12 @@ namespace Nikse.SubtitleEdit.Forms private void Main_KeyDown(object sender, KeyEventArgs e) { - if (e.KeyCode == Keys.Right && e.Modifiers == Keys.Control) + if (e.Modifiers == Keys.Control && e.KeyCode == Keys.Z) + { + ShowHistoryforUndoToolStripMenuItemClick(null, null); + e.SuppressKeyPress = true; + } + else if (e.KeyCode == Keys.Right && e.Modifiers == Keys.Control) { if (!textBoxListViewText.Focused) { @@ -4282,6 +4299,13 @@ namespace Nikse.SubtitleEdit.Forms e.SuppressKeyPress = true; } } + else if (e.Modifiers == Keys.None && e.KeyCode == Keys.F6) + { + if (mediaPlayer.VideoPlayer != null) + { + GotoSubPositionAndPause(); + } + } else if (e.Modifiers == Keys.None && e.KeyCode == Keys.F7) { if (mediaPlayer.VideoPlayer != null) @@ -4324,6 +4348,7 @@ namespace Nikse.SubtitleEdit.Forms } else if (e.Modifiers == Keys.None && e.KeyCode == Keys.F12) { + StopAutoDuration(); buttonSetEnd_Click(null, null); e.SuppressKeyPress = true; } @@ -4347,6 +4372,7 @@ namespace Nikse.SubtitleEdit.Forms } else if (e.Modifiers == Keys.None && e.KeyCode == Keys.F12) { + StopAutoDuration(); buttonSetEnd_Click(null, null); e.SuppressKeyPress = true; } @@ -6291,5 +6317,58 @@ namespace Nikse.SubtitleEdit.Forms } } + private void toolStripMenuItemImportBluRaySup_Click(object sender, EventArgs e) + { + if (ContinueNewOrExit()) + { + openFileDialog1.Title = _language.OpenBluRaySupFile; + openFileDialog1.FileName = string.Empty; + openFileDialog1.Filter = _language.BluRaySupFiles + "|*.sup"; + if (openFileDialog1.ShowDialog(this) == DialogResult.OK) + { + ImportAndOcrBluRaySup(openFileDialog1.FileName); + } + } + } + + private void ImportAndOcrBluRaySup(string fileName) + { + StringBuilder log = new StringBuilder(); + var subtitles = BluRaySupParser.ParseBluRaySup(fileName, log); + if (subtitles.Count > 0) + { + var vobSubOcr = new VobSubOcr(); + vobSubOcr.Initialize(subtitles, Configuration.Settings.VobSubOcr); + vobSubOcr.FileName = Path.GetFileName(fileName); + if (vobSubOcr.ShowDialog(this) == DialogResult.OK) + { + MakeHistoryForUndo(_language.BeforeImportingBluRaySupFile); + + _subtitle.Paragraphs.Clear(); + SetCurrentFormat(new SubRip().FriendlyName); + _subtitle.WasLoadedWithFrameNumbers = false; + _subtitle.CalculateFrameNumbersFromTimeCodes(CurrentFrameRate); + foreach (Paragraph p in vobSubOcr.SubtitleFromOcr.Paragraphs) + { + _subtitle.Paragraphs.Add(p); + } + + ShowSource(); + SubtitleListview1.Fill(_subtitle, _subtitleAlternate); + _change = true; + _subtitleListViewIndex = -1; + SubtitleListview1.FirstVisibleIndex = -1; + SubtitleListview1.SelectIndexAndEnsureVisible(0); + + _fileName = Path.ChangeExtension(vobSubOcr.FileName, ".srt"); + Text = Title + " - " + _fileName; + _converted = true; + + Configuration.Settings.Save(); + } + } + } + + } } \ No newline at end of file diff --git a/src/Forms/Main.resx b/src/Forms/Main.resx index 94b65953e..21ead9cd3 100644 --- a/src/Forms/Main.resx +++ b/src/Forms/Main.resx @@ -291,47 +291,47 @@ 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 RK5CYII= diff --git a/src/Forms/OCRSpellCheck.Designer.cs b/src/Forms/OCRSpellCheck.Designer.cs index 1982fb971..6d1bb1973 100644 --- a/src/Forms/OCRSpellCheck.Designer.cs +++ b/src/Forms/OCRSpellCheck.Designer.cs @@ -63,7 +63,7 @@ // buttonAbort // this.buttonAbort.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.buttonAbort.Location = new System.Drawing.Point(512, 404); + this.buttonAbort.Location = new System.Drawing.Point(623, 442); this.buttonAbort.Name = "buttonAbort"; this.buttonAbort.Size = new System.Drawing.Size(85, 21); this.buttonAbort.TabIndex = 24; @@ -86,9 +86,9 @@ this.groupBoxSuggestions.Controls.Add(this.buttonUseSuggestionAlways); this.groupBoxSuggestions.Controls.Add(this.buttonUseSuggestion); this.groupBoxSuggestions.Controls.Add(this.listBoxSuggestions); - this.groupBoxSuggestions.Location = new System.Drawing.Point(320, 211); + this.groupBoxSuggestions.Location = new System.Drawing.Point(320, 249); this.groupBoxSuggestions.Name = "groupBoxSuggestions"; - this.groupBoxSuggestions.Size = new System.Drawing.Size(277, 187); + this.groupBoxSuggestions.Size = new System.Drawing.Size(388, 187); this.groupBoxSuggestions.TabIndex = 32; this.groupBoxSuggestions.TabStop = false; this.groupBoxSuggestions.Text = "Suggestions"; @@ -96,7 +96,7 @@ // buttonUseSuggestionAlways // this.buttonUseSuggestionAlways.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.buttonUseSuggestionAlways.Location = new System.Drawing.Point(180, 16); + this.buttonUseSuggestionAlways.Location = new System.Drawing.Point(291, 16); this.buttonUseSuggestionAlways.Name = "buttonUseSuggestionAlways"; this.buttonUseSuggestionAlways.Size = new System.Drawing.Size(87, 21); this.buttonUseSuggestionAlways.TabIndex = 33; @@ -107,7 +107,7 @@ // buttonUseSuggestion // this.buttonUseSuggestion.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.buttonUseSuggestion.Location = new System.Drawing.Point(95, 16); + this.buttonUseSuggestion.Location = new System.Drawing.Point(206, 16); this.buttonUseSuggestion.Name = "buttonUseSuggestion"; this.buttonUseSuggestion.Size = new System.Drawing.Size(79, 21); this.buttonUseSuggestion.TabIndex = 32; @@ -122,7 +122,7 @@ this.listBoxSuggestions.FormattingEnabled = true; this.listBoxSuggestions.Location = new System.Drawing.Point(6, 39); this.listBoxSuggestions.Name = "listBoxSuggestions"; - this.listBoxSuggestions.Size = new System.Drawing.Size(261, 134); + this.listBoxSuggestions.Size = new System.Drawing.Size(372, 134); this.listBoxSuggestions.TabIndex = 30; // // GroupBoxEditWord @@ -135,7 +135,7 @@ this.GroupBoxEditWord.Controls.Add(this.textBoxWord); this.GroupBoxEditWord.Controls.Add(this.buttonSkipOnce); this.GroupBoxEditWord.Controls.Add(this.buttonAddToNames); - this.GroupBoxEditWord.Location = new System.Drawing.Point(12, 211); + this.GroupBoxEditWord.Location = new System.Drawing.Point(12, 249); this.GroupBoxEditWord.Name = "GroupBoxEditWord"; this.GroupBoxEditWord.Size = new System.Drawing.Size(302, 187); this.GroupBoxEditWord.TabIndex = 33; @@ -217,7 +217,7 @@ this.groupBoxEditWholeText.Controls.Add(this.buttonSkipText); this.groupBoxEditWholeText.Controls.Add(this.buttonChangeWholeText); this.groupBoxEditWholeText.Controls.Add(this.textBoxWholeText); - this.groupBoxEditWholeText.Location = new System.Drawing.Point(12, 210); + this.groupBoxEditWholeText.Location = new System.Drawing.Point(12, 248); this.groupBoxEditWholeText.Name = "groupBoxEditWholeText"; this.groupBoxEditWholeText.Size = new System.Drawing.Size(302, 188); this.groupBoxEditWholeText.TabIndex = 37; @@ -261,7 +261,7 @@ this.groupBoxTextAsImage.Controls.Add(this.pictureBoxText); this.groupBoxTextAsImage.Location = new System.Drawing.Point(12, 12); this.groupBoxTextAsImage.Name = "groupBoxTextAsImage"; - this.groupBoxTextAsImage.Size = new System.Drawing.Size(585, 114); + this.groupBoxTextAsImage.Size = new System.Drawing.Size(696, 152); this.groupBoxTextAsImage.TabIndex = 34; this.groupBoxTextAsImage.TabStop = false; this.groupBoxTextAsImage.Text = "Image text"; @@ -273,7 +273,7 @@ | System.Windows.Forms.AnchorStyles.Right))); this.pictureBoxText.Location = new System.Drawing.Point(6, 18); this.pictureBoxText.Name = "pictureBoxText"; - this.pictureBoxText.Size = new System.Drawing.Size(573, 89); + this.pictureBoxText.Size = new System.Drawing.Size(684, 127); this.pictureBoxText.TabIndex = 32; this.pictureBoxText.TabStop = false; // @@ -284,9 +284,9 @@ this.groupBoxText.Controls.Add(this.richTextBoxParagraph); this.groupBoxText.Controls.Add(this.buttonEditWholeText); this.groupBoxText.Controls.Add(this.buttonEditWord); - this.groupBoxText.Location = new System.Drawing.Point(12, 132); + this.groupBoxText.Location = new System.Drawing.Point(12, 170); this.groupBoxText.Name = "groupBoxText"; - this.groupBoxText.Size = new System.Drawing.Size(585, 72); + this.groupBoxText.Size = new System.Drawing.Size(696, 72); this.groupBoxText.TabIndex = 38; this.groupBoxText.TabStop = false; this.groupBoxText.Text = "Text"; @@ -326,7 +326,7 @@ // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(609, 435); + this.ClientSize = new System.Drawing.Size(720, 473); this.Controls.Add(this.groupBoxText); this.Controls.Add(this.groupBoxTextAsImage); this.Controls.Add(this.buttonAbort); diff --git a/src/Forms/VobSubOcr.cs b/src/Forms/VobSubOcr.cs index 9d9302947..47dc2e55b 100644 --- a/src/Forms/VobSubOcr.cs +++ b/src/Forms/VobSubOcr.cs @@ -82,6 +82,11 @@ namespace Nikse.SubtitleEdit.Forms List _vobSubMergedPackist; List _palette; + // BluRay sup + List _bluRaySubtitlesOriginal; + List _bluRaySubtitles; + Nikse.SubtitleEdit.Logic.BluRaySup.BluRaySupPalette _defaultPaletteInfo; + // Tesseract OCR //tessnet2.Tesseract _tesseractOcrEngine; // object _tesseractOcrEngine; @@ -220,6 +225,40 @@ namespace Nikse.SubtitleEdit.Forms checkBoxCustomFourColors.Checked = true; } + internal void Initialize(List subtitles, VobSubOcrSettings vobSubOcrSettings) + { + buttonOK.Enabled = false; + buttonCancel.Enabled = false; + buttonStartOcr.Enabled = false; + buttonStop.Enabled = false; + buttonNewCharacterDatabase.Enabled = false; + buttonEditCharacterDatabase.Enabled = false; + labelStatus.Text = string.Empty; + progressBar1.Visible = false; + progressBar1.Maximum = 100; + progressBar1.Value = 0; + numericUpDownPixelsIsSpace.Value = 11; // vobSubOcrSettings.XOrMorePixelsMakesSpace; + _vobSubOcrSettings = vobSubOcrSettings; + + InitializeModi(); + InitializeTesseract(); + LoadImageCompareCharacterDatabaseList(); + + if (Configuration.Settings.VobSubOcr.LastOcrMethod == "BitmapCompare" && comboBoxOcrMethod.Items.Count > 1) + comboBoxOcrMethod.SelectedIndex = 1; + else if (Configuration.Settings.VobSubOcr.LastOcrMethod == "MODI" && comboBoxOcrMethod.Items.Count > 2) + comboBoxOcrMethod.SelectedIndex = 2; + else + comboBoxOcrMethod.SelectedIndex = 0; + + _bluRaySubtitlesOriginal = subtitles; + + groupBoxImagePalette.Visible = false; + + Text = Configuration.Settings.Language.VobSubOcr.TitleBluRay; + } + + private void LoadImageCompareCharacterDatabaseList() { @@ -324,6 +363,45 @@ namespace Nikse.SubtitleEdit.Forms return true; } + private void LoadBluRaySup() + { + _subtitle = new Subtitle(); + + _bluRaySubtitles = new List(); + int max = _bluRaySubtitlesOriginal.Count; + for (int i = 0; i < max; i++) + { + var x = _bluRaySubtitlesOriginal[i]; + if ((checkBoxShowOnlyForced.Checked && x.IsForced) || + checkBoxShowOnlyForced.Checked == false) + { + _bluRaySubtitles.Add(x); + Paragraph p = new Paragraph(); + p.StartTime = new TimeCode(TimeSpan.FromMilliseconds((x.StartTime + 45) / 90.0)); + p.EndTime = new TimeCode(TimeSpan.FromMilliseconds((x.EndTime + 45) / 90.0)); + _subtitle.Paragraphs.Add(p); + } + } + _subtitle.Renumber(1); + + FixShortDisplayTimes(_subtitle); + + subtitleListView1.Fill(_subtitle); + subtitleListView1.SelectIndexAndEnsureVisible(0); + + numericUpDownStartNumber.Maximum = max; + if (numericUpDownStartNumber.Maximum > 0 && numericUpDownStartNumber.Minimum <= 1) + numericUpDownStartNumber.Value = 1; + + buttonOK.Enabled = true; + buttonCancel.Enabled = true; + buttonStartOcr.Enabled = true; + buttonStop.Enabled = false; + buttonNewCharacterDatabase.Enabled = true; + buttonEditCharacterDatabase.Enabled = true; + buttonStartOcr.Focus(); + } + private void LoadVobRip() { _subtitle = new Subtitle(); @@ -385,7 +463,21 @@ namespace Nikse.SubtitleEdit.Forms private Bitmap GetSubtitleBitmap(int index) { - if (checkBoxCustomFourColors.Checked) + if (_bluRaySubtitlesOriginal != null) + { + if (_bluRaySubtitles[index].Palettes.Count == 0 && _defaultPaletteInfo == null) + { + for (int i = 0; i < _bluRaySubtitlesOriginal.Count; i++) + { + if (_bluRaySubtitlesOriginal[i].Palettes.Count > 0) + { + _defaultPaletteInfo = _bluRaySubtitlesOriginal[i].DecodePalette(null); + } + } + } + return _bluRaySubtitles[index].DecodeImage(_defaultPaletteInfo); + } + else if (checkBoxCustomFourColors.Checked) { Color pattern = pictureBoxPattern.BackColor; Color emphasis1 = pictureBoxEmphasis1.BackColor; @@ -405,22 +497,36 @@ namespace Nikse.SubtitleEdit.Forms private long GetSubtitleStartTimeMilliseconds(int index) { - return (long)_vobSubMergedPackist[index].StartTime.TotalMilliseconds; + if (_bluRaySubtitlesOriginal != null) + return (_bluRaySubtitles[index].StartTime + 45) / 90; + else + return (long)_vobSubMergedPackist[index].StartTime.TotalMilliseconds; } private long GetSubtitleEndTimeMilliseconds(int index) { - return (long)_vobSubMergedPackist[index].EndTime.TotalMilliseconds; - } + if (_bluRaySubtitlesOriginal != null) + return (_bluRaySubtitles[index].EndTime + 45) / 90; + else + return (long)_vobSubMergedPackist[index].EndTime.TotalMilliseconds; + } + + private int GetSubtitleCount() + { + if (_bluRaySubtitlesOriginal != null) + return _bluRaySubtitles.Count; + else + return _vobSubMergedPackist.Count; + } private void ShowSubtitleImage(int index) { - int numberOfImages = _vobSubMergedPackist.Count; + int numberOfImages = GetSubtitleCount(); if (index < numberOfImages) { groupBoxSubtitleImage.Text = string.Format(Configuration.Settings.Language.VobSubOcr.SubtitleImageXofY, index + 1, numberOfImages); - pictureBoxSubtitleImage.Image = GetSubtitleBitmap(index); // SubtitleCreator.SUP.GetBitmap(index); + pictureBoxSubtitleImage.Image = GetSubtitleBitmap(index); pictureBoxSubtitleImage.Refresh(); } else @@ -476,7 +582,10 @@ namespace Nikse.SubtitleEdit.Forms if (smallestIndex >= 0) { double differencePercentage = smallestDifference * 100.0 / (target.Width * target.Height); - if (differencePercentage < _vobSubOcrSettings.AllowDifferenceInPercent) // should be around 1.0... + double maxDiff= _vobSubOcrSettings.AllowDifferenceInPercent; // should be around 1.0 for vob/sub... + if (_bluRaySubtitlesOriginal != null) + maxDiff = 14; // let bluray sup have a 14% diff + if (differencePercentage < maxDiff) //_vobSubOcrSettings.AllowDifferenceInPercent) // should be around 1.0... { XmlNode node = _compareDoc.DocumentElement.SelectSingleNode("FileName[.='" + _compareBitmaps[smallestIndex].Name + "']"); if (node != null) @@ -789,28 +898,46 @@ namespace Nikse.SubtitleEdit.Forms private void FormVobSubOcr_Shown(object sender, EventArgs e) { - _vobSubMergedPackistOriginal = new List(); - bool hasIdxTimeCodes = false; - bool hasForcedSubtitles = false; - foreach (var x in _vobSubMergedPackist) + if (_bluRaySubtitlesOriginal != null) { - _vobSubMergedPackistOriginal.Add(x); - if (x.IdxLine != null) - hasIdxTimeCodes = true; - if (x.SubPicture.Forced) - hasForcedSubtitles = true; + LoadBluRaySup(); + bool hasForcedSubtitles = false; + foreach (var x in _bluRaySubtitlesOriginal) + { + if (x.IsForced) + { + hasForcedSubtitles = true; + break; + } + } + checkBoxShowOnlyForced.Enabled = hasForcedSubtitles; + checkBoxUseTimeCodesFromIdx.Visible = false; + } + else + { + _vobSubMergedPackistOriginal = new List(); + bool hasIdxTimeCodes = false; + bool hasForcedSubtitles = false; + foreach (var x in _vobSubMergedPackist) + { + _vobSubMergedPackistOriginal.Add(x); + if (x.IdxLine != null) + hasIdxTimeCodes = true; + if (x.SubPicture.Forced) + hasForcedSubtitles = true; + } + checkBoxUseTimeCodesFromIdx.CheckedChanged -= checkBoxUseTimeCodesFromIdx_CheckedChanged; + checkBoxUseTimeCodesFromIdx.Visible = hasIdxTimeCodes; + checkBoxUseTimeCodesFromIdx.Checked = hasIdxTimeCodes; + checkBoxUseTimeCodesFromIdx.CheckedChanged += checkBoxUseTimeCodesFromIdx_CheckedChanged; + checkBoxShowOnlyForced.Enabled = hasForcedSubtitles; + LoadVobRip(); } - checkBoxUseTimeCodesFromIdx.CheckedChanged -= checkBoxUseTimeCodesFromIdx_CheckedChanged; - checkBoxUseTimeCodesFromIdx.Visible = hasIdxTimeCodes; - checkBoxUseTimeCodesFromIdx.Checked = hasIdxTimeCodes; - checkBoxUseTimeCodesFromIdx.CheckedChanged += checkBoxUseTimeCodesFromIdx_CheckedChanged; - checkBoxShowOnlyForced.Enabled = hasForcedSubtitles; - LoadVobRip(); } private void ButtonOkClick(object sender, EventArgs e) { - if (Configuration.Settings.VobSubOcr.XOrMorePixelsMakesSpace != (int)numericUpDownPixelsIsSpace.Value) + if (Configuration.Settings.VobSubOcr.XOrMorePixelsMakesSpace != (int)numericUpDownPixelsIsSpace.Value && _bluRaySubtitlesOriginal == null) { Configuration.Settings.VobSubOcr.XOrMorePixelsMakesSpace = (int)numericUpDownPixelsIsSpace.Value; Configuration.Settings.Save(); @@ -843,7 +970,7 @@ namespace Nikse.SubtitleEdit.Forms _abort = false; - int max = _vobSubMergedPackist.Count; + int max = GetSubtitleCount(); progressBar1.Maximum = max; progressBar1.Value = 0; @@ -1093,6 +1220,8 @@ namespace Nikse.SubtitleEdit.Forms subtitleListView1.SetBackgroundColor(index, Color.Orange); else if (wordsNotFound == 1) subtitleListView1.SetBackgroundColor(index, Color.Yellow); + else if (line.Trim().Length == 0) + subtitleListView1.SetBackgroundColor(index, Color.Orange); else subtitleListView1.SetBackgroundColor(index, Color.Green); } @@ -1107,6 +1236,8 @@ namespace Nikse.SubtitleEdit.Forms subtitleListView1.SetBackgroundColor(index, Color.Orange); else if (badWords > 0) subtitleListView1.SetBackgroundColor(index, Color.Yellow); + else if (line.Trim().Length == 0) + subtitleListView1.SetBackgroundColor(index, Color.Orange); else subtitleListView1.SetBackgroundColor(index, Color.Green); } @@ -1598,7 +1729,10 @@ namespace Nikse.SubtitleEdit.Forms { Subtitle oldSubtitle = new Subtitle(_subtitle); subtitleListView1.BeginUpdate(); - LoadVobRip(); + if (_bluRaySubtitlesOriginal != null) + LoadBluRaySup(); + else + LoadVobRip(); for (int i = 0; i < _subtitle.Paragraphs.Count; i++) { Paragraph current = _subtitle.Paragraphs[i]; @@ -1634,5 +1768,6 @@ namespace Nikse.SubtitleEdit.Forms subtitleListView1.EndUpdate(); } + } } diff --git a/src/Logic/BluRaySup/BluRaySupPalette.cs b/src/Logic/BluRaySup/BluRaySupPalette.cs new file mode 100644 index 000000000..58ba93e16 --- /dev/null +++ b/src/Logic/BluRaySup/BluRaySupPalette.cs @@ -0,0 +1,468 @@ +/* + * Copyright 2009 Volker Oth (0xdeadbeef) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * NOTE: Converted to C# and modified by Nikse.dk@gmail.com + */ + +namespace Nikse.SubtitleEdit.Logic.BluRaySup +{ + + public class BluRaySupPalette + { + /** Number of palette entries */ + private int size; + /** Byte buffer for RED info */ + private byte[] r; + /** Byte buffer for GREEN info */ + private byte[] g; + /** Byte buffer for BLUE info */ + private byte[] b; + /** Byte buffer for alpha info */ + private byte[] a; + /** Byte buffer for Y (luminance) info */ + private byte[] y; + /** Byte buffer for Cb (chrominance blue) info */ + private byte[] cb; + /** Byte buffer for Cr (chrominance red) info */ + private byte[] cr; + /** Use BT.601 color model instead of BT.709 */ + private bool useBT601; + + /** + * Convert YCBCr color info to RGB + * @param y 8 bit luminance + * @param cb 8 bit chrominance blue + * @param cr 8 bit chrominance red + * @return Integer array with red, blue, green component (in this order) + */ + static int[] YCbCr2Rgb(int y, int cb, int cr, bool useBt601) + { + int[] rgb = new int[3]; + double y1, r, g, b; + + y -= 16; + cb -= 128; + cr -= 128; + + y1 = y * 1.164383562; + if (useBt601) + { + /* BT.601 for YCbCr 16..235 -> RGB 0..255 (PC) */ + r = y1 + cr * 1.596026317; + g = y1 - cr * 0.8129674985 - cb * 0.3917615979; + b = y1 + cb * 2.017232218; + } + else + { + /* BT.709 for YCbCr 16..235 -> RGB 0..255 (PC) */ + r = y1 + cr * 1.792741071; + g = y1 - cr * 0.5329093286 - cb * 0.2132486143; + b = y1 + cb * 2.112401786; + } + rgb[0] = (int)(r + 0.5); + rgb[1] = (int)(g + 0.5); + rgb[2] = (int)(b + 0.5); + for (int i = 0; i < 3; i++) + { + if (rgb[i] < 0) + rgb[i] = 0; + else if (rgb[i] > 255) + rgb[i] = 255; + } + return rgb; + } + + /** + * Convert RGB color info to YCBCr + * @param r 8 bit red component + * @param g 8 bit green component + * @param b 8 bit blue component + * @return Integer array with luminance (Y), chrominance blue (Cb), chrominance red (Cr) (in this order) + */ + static int[] Rgb2YCbCr(int r, int g, int b, bool useBt601) + { + int[] yCbCr = new int[3]; + double y, cb, cr; + + if (useBt601) + { + /* BT.601 for RGB 0..255 (PC) -> YCbCr 16..235 */ + y = r * 0.299 * 219 / 255 + g * 0.587 * 219 / 255 + b * 0.114 * 219 / 255; + cb = -r * 0.168736 * 224 / 255 - g * 0.331264 * 224 / 255 + b * 0.5 * 224 / 255; + cr = r * 0.5 * 224 / 255 - g * 0.418688 * 224 / 255 - b * 0.081312 * 224 / 255; + } + else + { + /* BT.709 for RGB 0..255 (PC) -> YCbCr 16..235 */ + y = r * 0.2126 * 219 / 255 + g * 0.7152 * 219 / 255 + b * 0.0722 * 219 / 255; + cb = -r * 0.2126 / 1.8556 * 224 / 255 - g * 0.7152 / 1.8556 * 224 / 255 + b * 0.5 * 224 / 255; + cr = r * 0.5 * 224 / 255 - g * 0.7152 / 1.5748 * 224 / 255 - b * 0.0722 / 1.5748 * 224 / 255; + } + yCbCr[0] = 16 + (int)(y + 0.5); + yCbCr[1] = 128 + (int)(cb + 0.5); + yCbCr[2] = 128 + (int)(cr + 0.5); + for (int i = 0; i < 3; i++) + { + if (yCbCr[i] < 16) + yCbCr[i] = 16; + else + { + if (i == 0) + { + if (yCbCr[i] > 235) + yCbCr[i] = 235; + } + else + { + if (yCbCr[i] > 240) + yCbCr[i] = 240; + } + } + } + return yCbCr; + } + + /** + * Ctor - initializes palette with transparent black (RGBA: 0x00000000) + * @param palSize Number of palette entries + * @param use601 Use BT.601 instead of BT.709 + */ + public BluRaySupPalette(int palSize, bool use601) + { + size = palSize; + useBT601 = use601; + r = new byte[size]; + g = new byte[size]; + b = new byte[size]; + a = new byte[size]; + y = new byte[size]; + cb = new byte[size]; + cr = new byte[size]; + + // set at least all alpha values to invisible + int[] yCbCr = Rgb2YCbCr(0, 0, 0, useBT601); + for (int i = 0; i < palSize; i++) + { + a[i] = 0; + r[i] = 0; + g[i] = 0; + b[i] = 0; + y[i] = (byte)yCbCr[0]; + cb[i] = (byte)yCbCr[1]; + cr[i] = (byte)yCbCr[2]; + } + } + + /** + * Ctor - initializes palette with transparent black (RGBA: 0x00000000) + * @param palSize Number of palette entries + */ + public BluRaySupPalette(int palSize) + : this(palSize, false) + { + + } + + /** + * Ctor - construct palette from red, green blue and alpha buffers + * @param red Byte buffer containing the red components + * @param green Byte buffer containing the green components + * @param blue Byte buffer containing the blue components + * @param alpha Byte buffer containing the alpha components + * @param use601 Use BT.601 instead of BT.709 + */ + public BluRaySupPalette(byte[] red, byte[] green, byte[] blue, byte[] alpha, bool use601) + { + size = red.Length; + useBT601 = use601; + r = new byte[size]; + g = new byte[size]; + b = new byte[size]; + a = new byte[size]; + y = new byte[size]; + cb = new byte[size]; + cr = new byte[size]; + + int[] yCbCr; + for (int i = 0; i < size; i++) + { + a[i] = alpha[i]; + r[i] = red[i]; + g[i] = green[i]; + b[i] = blue[i]; + yCbCr = Rgb2YCbCr(r[i] & 0xff, g[i] & 0xff, b[i] & 0xff, useBT601); + y[i] = (byte)yCbCr[0]; + cb[i] = (byte)yCbCr[1]; + cr[i] = (byte)yCbCr[2]; + } + } + + /** + * Ctor - construct palette from red, green blue and alpha buffers + * @param red Byte buffer containing the red components + * @param green Byte buffer containing the green components + * @param blue Byte buffer containing the blue components + * @param alpha Byte buffer containing the alpha components + */ + public BluRaySupPalette(byte[] red, byte[] green, byte[] blue, byte[] alpha) + : this(red, green, blue, alpha, false) + { + } + + /** + * Ctor - construct new (independent) palette from existing one + * @param p Palette to copy values from + */ + public BluRaySupPalette(BluRaySupPalette p) + { + size = p.GetSize(); + useBT601 = p.UsesBt601(); + r = new byte[size]; + g = new byte[size]; + b = new byte[size]; + a = new byte[size]; + y = new byte[size]; + cb = new byte[size]; + cr = new byte[size]; + + for (int i = 0; i < size; i++) + { + a[i] = p.a[i]; + r[i] = p.r[i]; + g[i] = p.g[i]; + b[i] = p.b[i]; + y[i] = p.y[i]; + cb[i] = p.cb[i]; + cr[i] = p.cr[i]; + } + } + + /** + * Set palette index "index" to color "c" in ARGB format + * @param index Palette index + * @param c Color in ARGB format + */ + public void SetArgb(int index, int c) + { + int a1 = (c >> 24) & 0xff; + int r1 = (c >> 16) & 0xff; + int g1 = (c >> 8) & 0xff; + int b1 = c & 0xff; + SetRgb(index, r1, g1, b1); + SetAlpha(index, a1); + } + + /** + * Return palette entry at index as Integer in ARGB format + * @param index Palette index + * @return Palette entry at index as Integer in ARGB format + */ + public int GetArgb(int index) + { + return ((a[index] & 0xff) << 24) | ((r[index] & 0xff) << 16) | ((g[index] & 0xff) << 8) | (b[index] & 0xff); + } + + /** + * Set palette entry (RGB mode) + * @param index Palette index + * @param red 8bit red component + * @param green 8bit green component + * @param blue 8bit blue component + */ + public void SetRgb(int index, int red, int green, int blue) + { + r[index] = (byte)red; + g[index] = (byte)green; + b[index] = (byte)blue; + // create yCbCr + int[] yCbCr = Rgb2YCbCr(red, green, blue, useBT601); + y[index] = (byte)yCbCr[0]; + cb[index] = (byte)yCbCr[1]; + cr[index] = (byte)yCbCr[2]; + } + + /** + * Set palette entry (YCbCr mode) + * @param index Palette index + * @param yn 8bit Y component + * @param cbn 8bit Cb component + * @param crn 8bit Cr component + */ + public void SetYCbCr(int index, int yn, int cbn, int crn) + { + y[index] = (byte)yn; + cb[index] = (byte)cbn; + cr[index] = (byte)crn; + // create RGB + int[] rgb = YCbCr2Rgb(yn, cbn, crn, useBT601); + r[index] = (byte)rgb[0]; + g[index] = (byte)rgb[1]; + b[index] = (byte)rgb[2]; + } + + /** + * Set alpha channel + * @param index Palette index + * @param alpha 8bit alpha channel value + */ + public void SetAlpha(int index, int alpha) + { + a[index] = (byte)alpha; + } + + /** + * Get alpha channel + * @param index Palette index + * @return 8bit alpha channel value + */ + public int GetAlpha(int index) + { + return a[index] & 0xff; + } + + /** + * Return byte array of alpha channel components + * @return Byte array of alpha channel components (don't modify!) + */ + public byte[] GetAlpha() + { + return a; + } + + /** + * Get Integer array containing 8bit red, green, blue components (in this order) + * @param index Palette index + * @return Integer array containing 8bit red, green, blue components (in this order) + */ + public int[] GetRgb(int index) + { + int[] rgb = new int[3]; + rgb[0] = r[index] & 0xff; + rgb[1] = g[index] & 0xff; + rgb[2] = b[index] & 0xff; + return rgb; + } + + /** + * Get Integer array containing 8bit Y, Cb, Cr components (in this order) + * @param index Palette index + * @return Integer array containing 8bit Y, Cb, Cr components (in this order) + */ + public int[] GetYCbCr(int index) + { + int[] yCbCr = new int[3]; + yCbCr[0] = y[index] & 0xff; + yCbCr[1] = cb[index] & 0xff; + yCbCr[2] = cr[index] & 0xff; + return yCbCr; + } + + /** + * Return byte array of red components + * @return Byte array of red components (don't modify!) + */ + public byte[] GetR() + { + return r; + } + + /** + * Return byte array of green components + * @return Byte array of green components (don't modify!) + */ + public byte[] GetG() + { + return g; + } + + /** + * Return byte array of blue components + * @return Byte array of blue components (don't modify!) + */ + public byte[] GetB() + { + return b; + } + + /** + * Return byte array of Y components + * @return Byte array of Y components (don't modify!) + */ + public byte[] GetY() + { + return y; + } + + /** + * Return byte array of Cb components + * @return Byte array of Cb components (don't modify!) + */ + public byte[] GetCb() + { + return cb; + } + + /** + * Return byte array of Cr components + * @return Byte array of Cr components (don't modify!) + */ + public byte[] GetCr() + { + return cr; + } + + /** + * Get size of palette (number of entries) + * @return Size of palette (number of entries) + */ + public int GetSize() + { + return size; + } + + /** + * Return index of most transparent palette entry or the index of the first completely transparent color + * @return Index of most transparent palette entry or the index of the first completely transparent color + */ + public int GetTransparentIndex() + { + // find (most) transparent index in palette + int transpIdx = 0; + int minAlpha = 0x100; + for (int i = 0; i < size; i++) + { + if ((a[i] & 0xff) < minAlpha) + { + minAlpha = a[i] & 0xff; + transpIdx = i; + if (minAlpha == 0) + break; + } + } + return transpIdx; + } + + /** + * Get: use of BT.601 color model instead of BT.709 + * @return True if BT.601 is used + */ + public bool UsesBt601() + { + return useBT601; + } + + } +} + diff --git a/src/Logic/BluRaySup/BluRaySupParser.cs b/src/Logic/BluRaySup/BluRaySupParser.cs new file mode 100644 index 000000000..3d6e20cd7 --- /dev/null +++ b/src/Logic/BluRaySup/BluRaySupParser.cs @@ -0,0 +1,660 @@ +/* + * Copyright 2009 Volker Oth (0xdeadbeef) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * NOTE: Converted to C# and modified by Nikse.dk@gmail.com + */ + +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; + +namespace Nikse.SubtitleEdit.Logic.BluRaySup +{ + public static class BluRaySupParser + { + + private class SupSegment + { + /// + /// Type of segment + /// + public int Type; + + /// + /// segment size in bytes + /// + public int Size; + + /// + /// segment PTS time stamp + /// + public long PtsTimestamp; + + /// + /// segment DTS time stamp + /// + public long DtsTimestamp; + } + + + /** PGS composition state */ + private enum CompositionState + { + /** normal: doesn't have to be complete */ + Normal, + /** acquisition point */ + AcquPoint, + /** epoch start - clears the screen */ + EpochStart, + /** epoch continue */ + EpochContinue, + /** unknown value */ + Invalid + } + + private static byte[] packetHeader = + { + 0x50, 0x47, // 0: "PG" + 0x00, 0x00, 0x00, 0x00, // 2: PTS - presentation time stamp + 0x00, 0x00, 0x00, 0x00, // 6: DTS - decoding time stamp + 0x00, // 10: segment_type + 0x00, 0x00, // 11: segment_length (bytes following till next PG) + }; + + private static byte[] headerPCSStart = + { + 0x00, 0x00, 0x00, 0x00, // 0: video_width, video_height + 0x10, // 4: hi nibble: frame_rate (0x10=24p), lo nibble: reserved + 0x00, 0x00, // 5: composition_number (increased by start and end header) + (byte)0x80, // 7: composition_state (0x80: epoch start) + 0x00, // 8: palette_update_flag (0x80), 7bit reserved + 0x00, // 9: palette_id_ref (0..7) + 0x01, // 10: number_of_composition_objects (0..2) + 0x00, 0x00, // 11: 16bit object_id_ref + 0x00, // 13: window_id_ref (0..1) + 0x00, // 14: object_cropped_flag: 0x80, forced_on_flag = 0x040, 6bit reserved + 0x00, 0x00, 0x00, 0x00 // 15: composition_object_horizontal_position, composition_object_vertical_position + }; + + private static byte[] headerPCSEnd = + { + 0x00, 0x00, 0x00, 0x00, // 0: video_width, video_height + 0x10, // 4: hi nibble: frame_rate (0x10=24p), lo nibble: reserved + 0x00, 0x00, // 5: composition_number (increased by start and end header) + 0x00, // 7: composition_state (0x00: normal) + 0x00, // 8: palette_update_flag (0x80), 7bit reserved + 0x00, // 9: palette_id_ref (0..7) + 0x00, // 10: number_of_composition_objects (0..2) + }; + + private static byte[] headerODSFirst = + { + 0x00, 0x00, // 0: object_id + 0x00, // 2: object_version_number + (byte)0xC0, // 3: first_in_sequence (0x80), last_in_sequence (0x40), 6bits reserved + 0x00, 0x00, 0x00, // 4: object_data_length - full RLE buffer length (including 4 bytes size info) + 0x00, 0x00, 0x00, 0x00, // 7: object_width, object_height + }; + + private static byte[] headerODSNext = + { + 0x00, 0x00, // 0: object_id + 0x00, // 2: object_version_number + (byte)0x40, // 3: first_in_sequence (0x80), last_in_sequence (0x40), 6bits reserved + }; + + private static byte[] headerWDS = + { + 0x01, // 0 : number of windows (currently assumed 1, 0..2 is legal) + 0x00, // 1 : window id (0..1) + 0x00, 0x00, 0x00, 0x00, // 2 : x-ofs, y-ofs + 0x00, 0x00, 0x00, 0x00 // 6 : width, height + }; + + + /// + /// Parses a BluRay sup file + /// + /// BluRay sup file name + /// Parsing info is logged here + /// List of BluRaySupPictures + public static List ParseBluRaySup(string fileName, StringBuilder log) + { + using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return ParseBluRaySup(fs, log); + } + } + + /// + /// Can be used with e.g. MemoryStream or FileStream + /// + /// memory stream containing sup data + /// Text parser log + public static List ParseBluRaySup(Stream ms, StringBuilder log) + { + SupSegment segment; + BluRaySupPicture pic = null; + BluRaySupPicture picLast = null; + BluRaySupPicture picTmp = null; + List subPictures = new List(); + int odsCtr = 0; + int pdsCtr = 0; + int odsCtrOld = 0; + int pdsCtrOld = 0; + int compNum = -1; + int compNumOld = -1; + int compCount = 0; + long ptsPcs = 0; + bool paletteUpdate = false; + CompositionState cs = CompositionState.Invalid; + ms.Position = 0; + long position = 0; + int i = 0; + const int headerSize = 13; + byte[] buffer; + while (position < ms.Length) + { + string[] so = new string[1]; // hack to return string + + ms.Seek(position, SeekOrigin.Begin); + buffer = new byte[headerSize]; + ms.Read(buffer, 0, buffer.Length); + segment = ReadSegment(buffer, log); + position += headerSize; + buffer = new byte[segment.Size]; + ms.Read(buffer, 0, buffer.Length); + log.Append(i + ": "); + switch (segment.Type) + { + case 0x14: // Palette + log.AppendLine(string.Format("0x14 - Palette - PDS offset={0} size={1}", position, segment.Size)); + + if (compNum != compNumOld) + { + if (pic != null) + { + so[0] = null; + int ps = ParsePds(buffer, segment, pic, so); + if (ps >= 0) + { + log.AppendLine(", " + so[0]); + if (ps > 0) // don't count empty palettes + pdsCtr++; + } + else + { + log.AppendLine(); + log.AppendLine(so[0]); + } + } + else + { + log.AppendLine(); + log.AppendLine("missing PTS start -> ignored"); + } + } + else + { + log.AppendLine(", comp # unchanged -> ignored"); + } + break; + + case 0x15: // Image bitmap data + log.AppendLine(string.Format("0x15 - bitmap data - ODS offset={0} size={1}", position, segment.Size)); + + if (compNum != compNumOld) + { + if (!paletteUpdate) + { + if (pic != null) + { + so[0] = null; + if (ParseOds(buffer, segment, pic, so)) + odsCtr++; + if (so[0] != null) + log.Append(", " + so[0]); + log.AppendLine(", img size: " + pic.Width + "*" + pic.Height); + } + else + { + log.AppendLine(); + log.AppendLine("missing PTS start -> ignored"); + } + } + else + { + log.AppendLine(); + log.AppendLine("palette update only -> ignored"); + } + } + else + { + log.AppendLine(", comp # unchanged -> ignored"); + } + break; + + case 0x16: + log.AppendLine(string.Format("0x16 - Time codes, offset={0} size={1}", position, segment.Size)); + + compNum = BigEndianInt16(buffer, 5); + cs = GetCompositionState(buffer[7]); + paletteUpdate = buffer[8] == 0x80; + ptsPcs = segment.PtsTimestamp; + if (segment.Size >= 0x13) + compCount = 1; // could be also 2, but we'll ignore this for the moment + else + compCount = 0; + if (cs == CompositionState.Invalid) + { + log.AppendLine("Illegal composition state at offset " + position); + } + else if (cs == CompositionState.EpochStart) + { + //new frame + if (subPictures.Count > 0 && (odsCtr == 0 || pdsCtr == 0)) + { + log.AppendLine("missing PDS/ODS: last epoch is discarded"); + subPictures.RemoveAt(subPictures.Count - 1); + compNumOld = compNum - 1; + if (subPictures.Count > 0) + picLast = subPictures[subPictures.Count - 1]; + else + picLast = null; + } + else + picLast = pic; + + pic = new BluRaySupPicture(); + subPictures.Add(pic); // add to list + pic.StartTime = segment.PtsTimestamp; + log.AppendLine("#> " + (subPictures.Count) + " (" + ToolBox.PtsToTimeString(pic.StartTime) + ")"); + + so[0] = null; + ParsePcs(segment, pic, so, buffer); + // fix end time stamp of previous pic if still missing + if (picLast != null && picLast.EndTime == 0) + picLast.EndTime = pic.StartTime; + + if (so[0] != null) + log.AppendLine(", " + so[0]); + else + log.AppendLine(); + log.Append(Environment.NewLine + "PTS start: " + ToolBox.PtsToTimeString(pic.StartTime)); + log.AppendLine(", screen size: " + pic.Width + "*" + pic.Height); + odsCtr = 0; + pdsCtr = 0; + odsCtrOld = 0; + pdsCtrOld = 0; + picTmp = null; + } + else + { + if (pic == null) + { + log.AppendLine(" Missing start of epoch at offset " + position); + break; + } + log.Append("PCS ofs:" + ToolBox.ToHex(buffer, 0, 8) + ", "); + switch (cs) + { + case CompositionState.EpochContinue: + log.AppendLine(" CONT, "); + break; + case CompositionState.AcquPoint: + log.AppendLine(" ACQU, "); + break; + case CompositionState.Normal: + log.AppendLine(" NORM, "); + break; + } + log.AppendLine("size: " + segment.Size + ", comp#: " + compNum + ", forced: " + pic.IsForced); + if (compNum != compNumOld) + { + so[0] = null; + // store state to be able to revert to it + picTmp = new BluRaySupPicture(pic); // deep copy + picTmp.EndTime = ptsPcs; + // create new pic + ParsePcs(segment, pic, so, buffer); + } + if (so[0] != null) + log.AppendLine(", " + so[0]); + log.AppendLine(", pal update: " + paletteUpdate); + log.AppendLine("PTS: " + ToolBox.PtsToTimeString(segment.PtsTimestamp)); + } + break; + + case 0x17: + log.AppendLine(string.Format("0x17 - WDS offset={0} size={1}", position, segment.Size)); + + int x = BigEndianInt16(buffer, 2); + int y = BigEndianInt16(buffer, 4); + int width = BigEndianInt16(buffer, 6); + int height = BigEndianInt16(buffer, 8); + + log.AppendLine(string.Format("width:{0}, height:{1}", width, height)); + break; + + case 0x80: + log.AppendLine(string.Format("0x18 - END offset={0} size={1}", position, segment.Size)); + + // decide whether to store this last composition section as caption or merge it + if (cs == CompositionState.EpochStart) + { + if (compCount > 0 && odsCtr > odsCtrOld && compNum != compNumOld && IsPictureMergable(picLast, pic)) + { + // the last start epoch did not contain any (new) content + // and should be merged to the previous frame + subPictures.RemoveAt(subPictures.Count - 1); + pic = picLast; + if (subPictures.Count > 0) + picLast = subPictures[subPictures.Count - 1]; + else + picLast = null; + log.AppendLine("#< caption merged"); + } + } + else + { + long startTime = 0; + if (pic != null) + { + startTime = pic.StartTime; // store + pic.StartTime = ptsPcs; // set for testing merge + } + + if (compCount > 0 && odsCtr > odsCtrOld && compNum != compNumOld && !IsPictureMergable(picTmp, pic)) + { + // last PCS should be stored as separate caption + if (odsCtr - odsCtrOld > 1 || pdsCtr - pdsCtrOld > 1) + log.AppendLine("multiple PDS/ODS definitions: result may be erratic"); + // replace pic with picTmp (deepCopy created before new PCS) + subPictures[subPictures.Count - 1] = picTmp; // replace in list + picLast = picTmp; + subPictures.Add(pic); // add to list + log.AppendLine("#< " + (subPictures.Count) + " (" + ToolBox.PtsToTimeString(pic.StartTime) + ")"); + odsCtrOld = odsCtr; + } + else + { + if (pic != null) + { + // merge with previous pic + pic.StartTime = startTime; // restore + pic.EndTime = ptsPcs; + // for the unlikely case that forced flag changed during one captions + if (picTmp != null && picTmp.IsForced) + pic.IsForced = true; + + if (pdsCtr > pdsCtrOld || paletteUpdate) + log.AppendLine("palette animation: result may be erratic\n"); + } + else + log.AppendLine("end without at least one epoch start"); + + } + } + + pdsCtrOld = pdsCtr; + compNumOld = compNum; + break; + default: + log.AppendLine(string.Format("0x?? - END offset={0} UNKOWN SEGMENT TYPE={1}", position, segment.Type)); + break; + } + log.AppendLine(); + position += segment.Size; + i++; + } + return subPictures; + } + + /// + /// Checks if two SubPicture object can be merged because the time gap between them is rather small + /// and the embedded objects seem to be identical + /// + /// first SubPicture object (earlier) + /// 2nd SubPicture object (later) + /// return true if the SubPictures can be merged + private static bool IsPictureMergable(BluRaySupPicture a, BluRaySupPicture b) + { + bool eq = false; + if (a != null && b != null) + { + if (a.EndTime == 0 || b.StartTime - a.EndTime < Core.GetMergePtSdiff()) + { + ImageObject ao = a.ObjectIdImage; + ImageObject bo = b.ObjectIdImage; + if (ao != null && bo != null) + if (ao.BufferSize == bo.BufferSize && ao.Width == bo.Width && ao.Height == bo.Height) + eq = true; + } + } + return eq; + } + + /// + /// Parse an PCS packet which contains width/height info + /// + /// object containing info about the current segment + /// SubPicture object containing info about the current caption + /// reference to message string + /// Raw data buffer, starting right after segment + private static void ParsePcs(SupSegment segment, BluRaySupPicture pic, string[] msg, byte[] buffer) + { + if (segment.Size >= 4) + { + pic.Width = BigEndianInt16(buffer, 0); // video_width + pic.Height = BigEndianInt16(buffer, 2); // video_height + int type = buffer[4]; // hi nibble: frame_rate, lo nibble: reserved + int num = BigEndianInt16(buffer, 5); // composition_number + // skipped: + // 8bit composition_state: 0x00: normal, 0x40: acquisition point + // 0x80: epoch start, 0xC0: epoch continue, 6bit reserved + // 8bit palette_update_flag (0x80), 7bit reserved + int palId = buffer[9]; // 8bit palette_id_ref + int coNum = buffer[10]; // 8bit number_of_composition_objects (0..2) + if (coNum > 0) + { + // composition_object: + int objId = BigEndianInt16(buffer, 11); // 16bit object_id_ref + msg[0] = "palID: " + palId + ", objID: " + objId; + if (pic.ImageObjects == null) + pic.ImageObjects = new List(); + ImageObject imgObj; + if (objId >= pic.ImageObjects.Count) + { + imgObj = new ImageObject(); + pic.ImageObjects.Add(imgObj); + } + else + imgObj = pic.GetImageObject(objId); + imgObj.PaletteId = palId; + pic.ObjectId = objId; + + // skipped: 8bit window_id_ref + if (segment.Size >= 0x13) + { + pic.FramesPerSecondType = type; + // object_cropped_flag: 0x80, forced_on_flag = 0x040, 6bit reserved + int forcedCropped = buffer[14]; + pic.CompositionNumber = num; + pic.IsForced = ((forcedCropped & 0x40) == 0x40); + imgObj.XOffset = BigEndianInt16(buffer, 15); // composition_object_horizontal_position + imgObj.YOffset = BigEndianInt16(buffer, 17); // composition_object_vertical_position + // if (object_cropped_flag==1) + // 16bit object_cropping_horizontal_position + // 16bit object_cropping_vertical_position + // 16bit object_cropping_width + // object_cropping_height + } + } + } + } + + /// + /// parse an ODS packet which contain the image data + /// + /// raw byte date, starting right after segment + /// object containing info about the current segment + /// SubPicture object containing info about the current caption + /// reference to message string + /// true if this is a valid new object (neither invalid nor a fragment) + private static bool ParseOds(byte[] buffer, SupSegment segment, BluRaySupPicture pic, string[] msg) + { + ImageObjectFragment info; + + int objId = BigEndianInt16(buffer, 0); // 16bit object_id + int objVer = buffer[2]; // 16bit object_id nikse - index 2 or 1??? + int objSeq = buffer[3]; // 8bit first_in_sequence (0x80), + // last_in_sequence (0x40), 6bits reserved + bool first = (objSeq & 0x80) == 0x80; + bool last = (objSeq & 0x40) == 0x40; + + if (pic.ImageObjects == null) + pic.ImageObjects = new List(); + ImageObject imgObj; + if (objId >= pic.ImageObjects.Count) + { + imgObj = new ImageObject(); + pic.ImageObjects.Add(imgObj); + } + else + imgObj = pic.GetImageObject(objId); + + if (imgObj.Fragments == null || first) + { // 8bit object_version_number + // skipped: + // 24bit object_data_length - full RLE buffer length (including 4 bytes size info) + int width = BigEndianInt16(buffer, 7); // object_width + int height = BigEndianInt16(buffer, 9); // object_height + + if (width <= pic.Width && height <= pic.Height) + { + imgObj.Fragments = new List(); + info = new ImageObjectFragment(); + info.ImagePacketSize = segment.Size - 11; // Image packet size (image bytes) + info.ImageBuffer = new byte[info.ImagePacketSize]; + Buffer.BlockCopy(buffer, 11, info.ImageBuffer, 0, info.ImagePacketSize); + imgObj.Fragments.Add(info); + imgObj.BufferSize = info.ImagePacketSize; + imgObj.Height = height; + imgObj.Width = width; + msg[0] = "ID: " + objId + ", update: " + objVer + ", seq: " + (first ? "first" : "") + + ((first && last) ? "/" : "") + (last ? "" + "last" : ""); + return true; + } + System.Diagnostics.Debug.Print("Invalid image size - ignored"); + return false; + } + // object_data_fragment + // skipped: + // 16bit object_id + // 8bit object_version_number + // 8bit first_in_sequence (0x80), last_in_sequence (0x40), 6bits reserved + info = new ImageObjectFragment(); + info.ImagePacketSize = segment.Size - 4; + info.ImageBuffer = new byte[info.ImagePacketSize]; + Buffer.BlockCopy(buffer, 4, info.ImageBuffer, 0, info.ImagePacketSize); + imgObj.Fragments.Add(info); + imgObj.BufferSize += info.ImagePacketSize; // total size (may contain several packets) + msg[0] = "ID: " + objId + ", update: " + objVer + ", seq: " + (first ? "first" : "") + ((first && last) ? "/" : "") + (last ? "" + "last" : ""); + return false; + } + + private static CompositionState GetCompositionState(byte type) + { + switch (type) + { + case 0x00: + return CompositionState.Normal; + case 0x40: + return CompositionState.AcquPoint; + case 0x80: + return CompositionState.EpochStart; + case 0xC0: + return CompositionState.EpochContinue; + default: + return CompositionState.Invalid; + } + } + + private static int BigEndianInt16(byte[] buffer, int index) + { + return (buffer[index + 1]) + (buffer[index + 0] << 8); + } + + private static uint BigEndianInt32(byte[] buffer, int index) + { + return (uint)((buffer[index + 3]) + (buffer[index + 2] << 8) + (buffer[index + 1] << 0x10) + (buffer[index + 0] << 0x18)); + } + + private static SupSegment ReadSegment(byte[] buffer, StringBuilder log) + { + SupSegment segment = new SupSegment(); + if (buffer[0] == 0x50 && buffer[1] == 0x47) // 80 + 71 - P G + { + segment.PtsTimestamp = BigEndianInt32(buffer, 2); // read PTS + segment.DtsTimestamp = BigEndianInt32(buffer, 6); // read PTS + segment.Type = buffer[10]; + segment.Size = BigEndianInt16(buffer, 11); + } + else + { + log.AppendLine("Unable to read segment - PG missing!"); + } + return segment; + } + + /// + /// parse an PDS packet which contain palette info + /// + /// Buffer of raw byte data, starting right after segment + /// object containing info about the current segment + /// SubPicture object containing info about the current caption + /// reference to message string + /// number of valid palette entries (-1 for fault) + private static int ParsePds(byte[] buffer, SupSegment segment, BluRaySupPicture pic, string[] msg) + { + int paletteId = buffer[0]; // 8bit palette ID (0..7) + // 8bit palette version number (incremented for each palette change) + int paletteUpdate = buffer[1]; + if (pic.Palettes == null) + { + pic.Palettes = new List>(); + for (int i = 0; i < 8; i++) + pic.Palettes.Add(new List()); + } + if (paletteId > 7) + { + msg[0] = "Illegal palette id at offset " + ToolBox.ToHex(buffer, 0, 8); + return -1; + } + List al = pic.Palettes[paletteId]; + if (al == null) + al = new List(); + PaletteInfo p = new PaletteInfo(); + p.PaletteSize = (segment.Size - 2) / 5; + p.PaletteBuffer = new byte[p.PaletteSize * 5]; + Buffer.BlockCopy(buffer, 2, p.PaletteBuffer, 0, p.PaletteSize * 5); // save palette buffer in palette object + al.Add(p); + msg[0] = "ID: " + paletteId + ", update: " + paletteUpdate + ", " + p.PaletteSize + " entries"; + return p.PaletteSize; + } + + } +} diff --git a/src/Logic/BluRaySup/BluRaySupPicture.cs b/src/Logic/BluRaySup/BluRaySupPicture.cs new file mode 100644 index 000000000..3991b70b6 --- /dev/null +++ b/src/Logic/BluRaySup/BluRaySupPicture.cs @@ -0,0 +1,403 @@ +/* + * Copyright 2009 Volker Oth (0xdeadbeef) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * NOTE: Converted to C# and modified by Nikse.dk@gmail.com + */ + +using System; +using System.Collections.Generic; +using System.Drawing; + +namespace Nikse.SubtitleEdit.Logic.BluRaySup +{ + + public class BluRaySupPicture + { + /// + /// screen width + /// + public int Width { get; set; } + + /// + /// screen height + /// + public int Height { get; set; } + + /// + /// start time in milliseconds + /// + public long StartTime { get; set; } + + /// + /// end time in milliseconds + /// + public long EndTime { get; set; } + + /// + /// if true, this is a forced subtitle + /// + public bool IsForced { get; set; } + + /// + /// composition number - increased at start and end PCS + /// + public int CompositionNumber { get; set; } + + /// + /// objectID used in decoded object + /// + public int ObjectId { get; set; } + + /// + /// list of ODS packets containing image info + /// + public List ImageObjects; + + /// + /// width of subtitle window (might be larger than image) + /// + public int WindowWidth { get; set; } + + /// + /// height of subtitle window (might be larger than image) + /// + public int WindowHeight { get; set; } + + /// + /// upper left corner of subtitle window x + /// + public int WindowXOffset { get; set; } + + /// + /// upper left corner of subtitle window y + /// + public int WindowYOffset { get; set; } + + /// + /// FPS type (e.g. 0x10 = 24p) + /// + public int FramesPerSecondType { get; set; } + + /** list of (list of) palette info - there are up to 8 palettes per epoch, each can be updated several times */ + public List> Palettes; + + public BluRaySupPicture(BluRaySupPicture subPicture) + { + Width = subPicture.Width; + Height = subPicture.Height; + StartTime = subPicture.StartTime; + EndTime = subPicture.EndTime; + IsForced = subPicture.IsForced; + CompositionNumber = subPicture.CompositionNumber; + + ObjectId = subPicture.ObjectId; + ImageObjects = new List(); + foreach (ImageObject io in subPicture.ImageObjects) + ImageObjects.Add(io); + WindowWidth = subPicture.WindowWidth; + WindowHeight = subPicture.WindowHeight; + WindowXOffset = subPicture.WindowXOffset; + WindowYOffset = subPicture.WindowYOffset; + FramesPerSecondType = subPicture.FramesPerSecondType; + Palettes = new List>(); + foreach (List palette in subPicture.Palettes) + { + List p = new List(); + foreach (PaletteInfo pi in palette) + { + p.Add(new PaletteInfo(pi)); + } + Palettes.Add(p); + } + } + + public BluRaySupPicture() + { + } + + public ImageObject GetImageObject(int index) + { + return ImageObjects[index]; + } + + internal ImageObject ObjectIdImage + { + get + { + return ImageObjects[ObjectId]; + } + } + + + /// + /// decode palette from the input stream + /// + /// SubPicture object containing info about the current caption + /// Palette object + public BluRaySupPalette DecodePalette(BluRaySupPalette defaultPalette) + { + BluRaySupPicture pic = this; + bool fadeOut = false; + if (pic.Palettes.Count == 0 || pic.ObjectIdImage.PaletteId >= pic.Palettes.Count) + { + System.Diagnostics.Debug.Print("Palette not found in objectID=" + pic.ObjectId + " PaletteId=" + pic.ObjectIdImage.PaletteId + "!"); + if (defaultPalette == null) + return new BluRaySupPalette(256, Core.UsesBt601()); + else + return new BluRaySupPalette(defaultPalette); + } + List pl = pic.Palettes[pic.ObjectIdImage.PaletteId]; + BluRaySupPalette palette = new BluRaySupPalette(256, Core.UsesBt601()); + // by definition, index 0xff is always completely transparent + // also all entries must be fully transparent after initialization + + for (int j = 0; j < pl.Count; j++) + { + PaletteInfo p = pl[j]; + int index = 0; + + for (int i = 0; i < p.PaletteSize; i++) + { + // each palette entry consists of 5 bytes + int palIndex = p.PaletteBuffer[index]; + int y = p.PaletteBuffer[++index]; + int cr, cb; + if (Core.GetSwapCrCb()) + { + cb = p.PaletteBuffer[++index]; + cr = p.PaletteBuffer[++index]; + } + else + { + cr = p.PaletteBuffer[++index]; + cb = p.PaletteBuffer[++index]; + } + int alpha = p.PaletteBuffer[++index]; + + int alphaOld = palette.GetAlpha(palIndex); + // avoid fading out + if (alpha >= alphaOld) + { + if (alpha < Core.GetAlphaCrop()) + {// to not mess with scaling algorithms, make transparent color black + y = 16; + cr = 128; + cb = 128; + } + palette.SetAlpha(palIndex, alpha); + } + else fadeOut = true; + + palette.SetYCbCr(palIndex, y, cb, cr); + index++; + } + } + if (fadeOut) + System.Diagnostics.Debug.Print("fade out detected -> patched palette\n"); + return palette; + } + + /// + /// Decode caption from the input stream + /// + /// SubPicture object containing info about the caption + /// index of the transparent color + /// bitmap of the decoded caption + public Bitmap DecodeImage(BluRaySupPalette defaultPalette) + { + int w = ObjectIdImage.Width; + int h = ObjectIdImage.Height; + + if (w > Width || h > Height) + throw new Exception("Subpicture too large: " + w + "x" + h); + + //Bitmap bm = new Bitmap(w, h); + FastBitmap bm = new FastBitmap(new Bitmap(w, h)); + bm.LockImage(); + BluRaySupPalette pal = DecodePalette(defaultPalette); + + int index = 0; + int ofs = 0; + int xpos = 0; + + // just for multi-packet support, copy all of the image data in one common buffer + byte[] buf = new byte[ObjectIdImage.BufferSize]; + foreach (ImageObjectFragment fragment in ObjectIdImage.Fragments) + { + Buffer.BlockCopy(fragment.ImageBuffer, 0, buf, index, fragment.ImagePacketSize); + index += fragment.ImagePacketSize; + } + + + index = 0; + do + { + int b = buf[index++] & 0xff; + if (b == 0) + { + b = buf[index++] & 0xff; + if (b == 0) + { + // next line + ofs = (ofs / w) * w; + if (xpos < w) + ofs += w; + xpos = 0; + } + else + { + int size; + if ((b & 0xC0) == 0x40) + { + // 00 4x xx -> xxx zeroes + size = ((b - 0x40) << 8) + (buf[index++] & 0xff); + for (int i = 0; i < size; i++) + PutPixel(bm, ofs++, 0, pal); + xpos += size; + } + else if ((b & 0xC0) == 0x80) + { + // 00 8x yy -> x times value y + size = (b - 0x80); + b = buf[index++] & 0xff; + for (int i = 0; i < size; i++) + PutPixel(bm, ofs++, b, pal); + xpos += size; + } + else if ((b & 0xC0) != 0) + { + // 00 cx yy zz -> xyy times value z + size = ((b - 0xC0) << 8) + (buf[index++] & 0xff); + b = buf[index++] & 0xff; + for (int i = 0; i < size; i++) + PutPixel(bm, ofs++, b, pal); + xpos += size; + } + else + { + // 00 xx -> xx times 0 + for (int i = 0; i < b; i++) + PutPixel(bm, ofs++, 0, pal); + xpos += b; + } + } + } + else + { + PutPixel(bm, ofs++, b, pal); + xpos++; + } + } while (index < buf.Length); + + bm.UnlockImage(); + return bm.GetBitmap(); + } + + private static void PutPixel(FastBitmap bmp, int index, int color, BluRaySupPalette palette) + { + int x = index % bmp.Width; + int y = index / bmp.Width; + if (color > 0 && x < bmp.Width && y < bmp.Height) + bmp.SetPixel(x, y, Color.FromArgb(palette.GetArgb(color))); + } + + + } + + public class ImageObject + { + /// + /// list of ODS packets containing image info + /// + public List Fragments; + + /// + /// palette identifier + /// + public int PaletteId { get; set; } + + /// + /// overall size of RLE buffer (might be spread over several packages) + /// + public int BufferSize { get; set; } + + /// + /// with of subtitle image + /// + public int Width { get; set; } + + /// + /// height of subtitle image + /// + public int Height { get; set; } + + /// + /// upper left corner of subtitle x + /// + public int XOffset { get; set; } + + /// + /// upper left corner of subtitle y + /// + public int YOffset { get; set; } + } + + + /// + /// contains offset and size of one fragment containing (parts of the) RLE buffer + /// + public class ImageObjectFragment + { + /// + /// size of this part of the RLE buffer + /// + public int ImagePacketSize { get; set; } + + /// + /// Buffer for raw image data fragment + /// + public byte[] ImageBuffer { get; set; } + } + + + /// + /// contains offset and size of one update of a palette + /// + public class PaletteInfo + { + /// + /// number of palette entries + /// + public int PaletteSize { get; set; } + + /// + /// raw palette data + /// + public byte[] PaletteBuffer { get; set; } + + public PaletteInfo() + { + } + + public PaletteInfo(PaletteInfo paletteInfo) + { + PaletteSize = paletteInfo.PaletteSize; + PaletteBuffer = new byte[paletteInfo.PaletteBuffer.Length]; + Buffer.BlockCopy(paletteInfo.PaletteBuffer, 0, PaletteBuffer, 0, PaletteBuffer.Length); + } + } + + +} diff --git a/src/Logic/BluRaySup/Core.cs b/src/Logic/BluRaySup/Core.cs new file mode 100644 index 000000000..6d7649d9a --- /dev/null +++ b/src/Logic/BluRaySup/Core.cs @@ -0,0 +1,87 @@ +/* + * Copyright 2009 Volker Oth (0xdeadbeef) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * NOTE: Converted to C# and modified by Nikse.dk@gmail.com + */ +namespace Nikse.SubtitleEdit.Logic.BluRaySup +{ + public static class Core + { + + /** Use BT.601 color model instead of BT.709 */ + private const bool UseBt601 = false; + + /** Flag that defines whether to swap Cr/Cb components when loading a SUP */ + private const bool SwapCrCb = false; + + /** Alpha threshold for cropping */ + private const int AlphaCrop = 14; + + /** Two equal captions are merged of they are closer than 200ms (0.2*90000 = 18000) */ + private const int MergePtSdiff = 18000; + + /** Frames per seconds for 24p (23.976) */ + public static double Fps24P = 24000.0 / 1001; + /** Frames per seconds for wrong 24P (23.975) */ + public static double Fps23975 = 23.975; + /** Frames per seconds for 24Hz (24.0) */ + public static double Fps24Hz = 24.0; + /** Frames per seconds for PAL progressive (25.0) */ + public static double FpsPal = 25.0; + /** Frames per seconds for NTSC progressive (29.97) */ + public static double FpsNtsc = 30000.0 / 1001; + /** Frames per seconds for PAL interlaced (50.0) */ + public static double FpsPalI = 50.0; + /** Frames per seconds for NTSC interlaced (59.94) */ + public static double FpsNtscI = 60000.0 / 1001; + + /** + * Get maximum time difference for merging captions. + * @return Maximum time difference for merging captions + */ + public static int GetMergePtSdiff() + { + return MergePtSdiff; + } + + /** + * Get: use of BT.601 color model instead of BT.709. + * @return True if BT.601 is used + */ + public static bool UsesBt601() + { + return UseBt601; + } + + /** + * Get flag that defines whether to swap Cr/Cb components when loading a SUP. + * @return True: swap cr/cb + */ + public static bool GetSwapCrCb() + { + return SwapCrCb; + } + + /** + * Get alpha threshold for cropping. + * @return Alpha threshold for cropping + */ + public static int GetAlphaCrop() + { + return AlphaCrop; + } + + } +} diff --git a/src/Logic/BluRaySup/ToolBox.cs b/src/Logic/BluRaySup/ToolBox.cs new file mode 100644 index 000000000..04ab2d437 --- /dev/null +++ b/src/Logic/BluRaySup/ToolBox.cs @@ -0,0 +1,98 @@ +/* + * Copyright 2009 Volker Oth (0xdeadbeef) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * NOTE: Converted to C# and modified by Nikse.dk@gmail.com + */ +using System.Text; + +namespace Nikse.SubtitleEdit.Logic.BluRaySup +{ + public static class ToolBox + { + + /// + /// Convert bytes to a C-style hex string with leading zeroes + /// + public static string ToHex(byte[] buffer, int index, int digits) + { + var sb = new StringBuilder(); + for (int i = index; i < index + digits; i++) + { + string s = string.Format("{0:X}", buffer[i]); + if (s.Length < 2) + sb.Append("0"); + sb.Append(s); + } + return "0x" + sb; + } + + /// + /// Convert a long integer to a C-style hex string with leading zeroes + /// + public static string ToHex(int number, int index, int digits) + { + string s = string.Format("{0:X}", number); + if (s.Length < digits) + s.PadLeft(digits, '0'); + return "0x" + s; + } + + + /// + /// Convert an integer to a string with leading zeroes + /// + /// Integer value to convert + /// Number of digits to display - note that a 32bit number can have only 10 digits + /// String version of integer with trailing zeroes + public static string ZeroTrim(int i, int digits) + { + string s = i.ToString(); + return s.PadLeft(digits, '0'); + } + + /** + * Convert time in milliseconds to array containing hours, minutes, seconds and milliseconds + * @param ms Time in milliseconds + * @return Array containing hours, minutes, seconds and milliseconds (in this order) + */ + public static int[] MillisecondsToTime(long ms) + { + int[] time = new int[4]; + // time[0] = hours + time[0] = (int)(ms / (60 * 60 * 1000)); + ms -= time[0] * 60 * 60 * 1000; + // time[1] = minutes + time[1] = (int)(ms / (60 * 1000)); + ms -= time[1] * 60 * 1000; + // time[2] = seconds + time[2] = (int)(ms / 1000); + ms -= time[2] * 1000; + time[3] = (int)ms; + return time; + } + + /** + * Convert time in 90kHz ticks to string hh:mm:ss.ms + * @param pts Time in 90kHz resolution + * @return String in format hh:mm:ss:ms + */ + public static string PtsToTimeString(long pts) + { + int[] time = MillisecondsToTime((pts + 45) / 90); + return ZeroTrim(time[0], 2) + ":" + ZeroTrim(time[1], 2) + ":" + ZeroTrim(time[2], 2) + "." + ZeroTrim(time[3], 3); + } + + } +} \ No newline at end of file diff --git a/src/Logic/ImageSplitter.cs b/src/Logic/ImageSplitter.cs index 224fc2a29..117783846 100644 --- a/src/Logic/ImageSplitter.cs +++ b/src/Logic/ImageSplitter.cs @@ -8,6 +8,13 @@ namespace Nikse.SubtitleEdit.Logic { public static bool IsColorClose(Color a, Color b, int tolerance) { + if (a.A < 120 && b.A < 120) + return true; // transparent + + if (a.A > 250 && a.R > 90 && a.G > 90 && a.B > 90 && + b.A > 250 && b.R > 90 && b.G > 90 && b.B > 90) + return true; // dark, non transparent + int diff = (a.R + a.G + a.B) - (b.R + b.G + b.B); return diff < tolerance && diff > -tolerance; } @@ -131,7 +138,9 @@ namespace Nikse.SubtitleEdit.Logic for (int y = 1; y < bmp1.Height; y++) { if (!IsColorClose(bmp1.GetPixel(x, y), bmp2.GetPixel(x, y), 20)) + { different++; + } } } return different; diff --git a/src/Logic/SubtitleFormats/UleadSubtitleFormat.cs b/src/Logic/SubtitleFormats/UleadSubtitleFormat.cs index 2568be17d..30ee4b61e 100644 --- a/src/Logic/SubtitleFormats/UleadSubtitleFormat.cs +++ b/src/Logic/SubtitleFormats/UleadSubtitleFormat.cs @@ -45,12 +45,10 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats #Subtitle text begin"; const string Footer = @"#Subtitle text end - #Subtitle text attribute begin -#/R:1,856 /FP:8 /FS:24 +#/R:1,{0} /FP:8 /FS:24 #Subtitle text attribute end"; - StringBuilder sb = new StringBuilder(); sb.AppendLine(Header); int index = 0; @@ -63,7 +61,7 @@ namespace Nikse.SubtitleEdit.Logic.SubtitleFormats sb.AppendLine(Utilities.RemoveHtmlTags(p.Text)); index++; } - sb.AppendLine(Footer); + sb.AppendLine(string.Format(Footer, subtitle.Paragraphs.Count)); return sb.ToString(); } diff --git a/src/Resources/da-DK.xml b/src/Resources/da-DK.xml index 1c3f7051b..96efbe8da 100644 --- a/src/Resources/da-DK.xml +++ b/src/Resources/da-DK.xml @@ -372,6 +372,7 @@ Sammenlign... Import/OCR undertekster fra VOB/IFO (dvd) ... Importer/OCR VobSub (sub/idx) undertekst... + Importer/OCR BluRay sup fil... Importer undertekster fra Matroska fil... Importer undertekst med manuel valgt tegnsæt... Importer tekst... @@ -672,7 +673,10 @@ Fortsæt? Header ikke gyldig VobSub fil: {0} Åbn VobSub (sub/idx) undertekst... VobSub undertekst filer - Før import af VobSub undertekster + Åbn BluRay sup fil... + BluRay sup filer + Før import af VobSub undertekst + Før import af BluRay sup undertekst Før vis udvalgte linjer tidligere/senere Vis tidligere/senere udført på udvalgte linjer Dobbelt ord via regex {0} @@ -973,7 +977,8 @@ Fortsæt? Billede - Importer/OCR VobSub (sub/idx) undertekster + Importer/OCR VobSub (sub/idx) undertekst + Importer/OCR BluRay (.sup) undertekst OCR-metoden OCR via Microsoft Office Document Imaging (MODI). Kræver MS Office OCR via Tesseract diff --git a/src/Resources/da-DK.xml.zip b/src/Resources/da-DK.xml.zip index f4f186a7a50e17f907d7cf654834d1a8f111683f..5eef89dec14c06551513b7f5e48a5cf8bfb2b4fe 100644 GIT binary patch delta 9291 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 delta 9198 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 E0IEx12LJ#7 diff --git a/src/Resources/es-ES.xml b/src/Resources/es-ES.xml index 5061d4250..3dca95fb7 100644 --- a/src/Resources/es-ES.xml +++ b/src/Resources/es-ES.xml @@ -371,6 +371,7 @@ de inicio del próximo texto &Comparar... Importar/OCR subtítulo desde vob/ifo (dvd) ... Importar/subtítuloOCR VobSub (sub/idx)... + Importar/subtítuloOCR BluRay (.sup)... Importar subtítulo desde archivo Matroska... Importar subtítulo de modo manual eligiendo codificador... Importar texto... @@ -671,7 +672,10 @@ Continuar? Encabezado de archivoVobSub inválido: {0} Abrir subtítulo VobSub (sub/idx)... Subtítulos de archivos VobSub + Abrir subtítulo BluRay (.sup)... + Subtítulos de archivos BluRay Antes de importar subtítulos VobSub + Antes de importar subtítulos BluRay Antes de mostrar las líneas seleccionadas antes/después Mostrar el antes/después realizado sobre las líneas seleccionadas @@ -975,6 +979,7 @@ Continuar? Importar/subtítuloOCR VobSub (sub/idx) + Importar/subtítuloOCR BluRay (.sup) método OCR OCR vía Microsoft Office Document Imaging (MODI). MS Office requerido OCR a traves de Tesseract diff --git a/src/Resources/es-ES.xml.zip b/src/Resources/es-ES.xml.zip index 434fa87c853c402cc246fcdf3fc10c5552b75c39..ea4882ceb3f4275123510d4c2d1fe91147d3c550 100644 GIT binary patch delta 13390 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 delta 13249 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 - - - Subtitle Edit - 3.0 - Traduction française par zwim (zwim@free.fr) - fr-FR - &OK - A&nnuler - Activer - Aucun - Aperçu - Fichiers sous-titre - Tous fichiers - Fichiers vidéo - Ouvrir sous-titre... - Ouvrir fichier vidéo... - Pas de vidéo chargée - Info vidéo - Position / durée : {0} - Temps initial - Temps final - Durée - Numéro - Texte - heure:min:sec:msec - Gras - Italique - Visible - Cadence de trame - Nom - Nom du fichier : {0} ({1}) - Résolution : {0} - cadence de trame : {0:0.0###} - Trames au total : {0:#,##0.##} - Encodage vidéo : {0} - Longueur des lignes : - Longueur totale : {0} - Longueur totale : {0} (coupez la ligne!) - Indisponible - Chevauchement ligne préc. ({0:#,##0.###}) - Chevauchement ({0:#,##0.###}) - Chevauchement suivant ({0:#,##0.###}) - Négatif - Expression régulière invalide ! - Sous-titre sauvegardé - Sous-titre courant - Texte original - Ouvrir fichier sous-titre original... - Patientez... - - - A propos de Subtitle Edit + + + + Subtitle Edit + 3.0 + Traduction française par zwim (zwim@free.fr) + fr-FR + &OK + A&nnuler + Activer + Aucun + Aperçu + Fichiers sous-titre + Tous fichiers + Fichiers vidéo + Ouvrir sous-titre... + Ouvrir fichier vidéo... + Pas de vidéo chargée + Info vidéo + Position / durée : {0} + Temps initial + Temps final + Durée + Numéro + Texte + heure:min:sec:msec + Gras + Italique + Visible + Cadence de trame + Nom + Nom du fichier : {0} ({1}) + Résolution : {0} + cadence de trame : {0:0.0###} + Trames au total : {0:#,##0.##} + Encodage vidéo : {0} + Longueur des lignes : + Longueur totale : {0} + Longueur totale : {0} (coupez la ligne!) + Indisponible + Chevauchement ligne préc. ({0:#,##0.###}) + Chevauchement ({0:#,##0.###}) + Chevauchement suivant ({0:#,##0.###}) + Négatif + Expression régulière invalide ! + Sous-titre sauvegardé + Sous-titre courant + Texte original + Ouvrir fichier sous-titre original... + Patientez... + + + A propos de Subtitle Edit Subtitle Edit est un logiciel gratuit distribué sous licence publique GNU. Vous pouvez le distribuer, le modifier et l'utiliser librement. @@ -60,976 +60,981 @@ Visitez www.nikse.dk pour obtenir la dernière version. Les suggestions sont plus que bienvenues. -Email : mailto:nikse.dk@gmail.com - - - Ajouter à la liste noms/etc - Ajouter à la liste noms/bruit (sensible à la casse) - - - Générer forme à partir des données - Fichier vidéo source: - Générer forme à partir des données - Ceci peut prendre quelques minutes - patientez - VLC Media Player introuvable - Subtitle Edit a besoin de VLC media player 1.1.x ou suivant pour extraire les données audio - Voulez-vous aller sur le site de VLC media player? - Génération du fichier des pics... - Extraction audio: {0:0.0} secondes - Extraction audio: {0}:{1:00} secondes - - - Ajuster les durées - Ajuster selon - Secondes - Pourcentage - Ajouter des secondes - Déterminer en % de la durée - Note : L'instant d'affichage ne recouvre pas le temps initial du texte suivant - Veuillez sélectionner une valeur dans la liste déroulante - - Veuillez choisir - - - - Lignes sélectionnées équilibrées auto - Enlever les retours à la ligne dans la sélection - Ligne# - Avant - Après - Lignes trouvées : {0} - Seulement les lignes coupées plus longues de - Seulement les lignes non-coupées plus courtes de - - - Changer la casse - Changer la casse en - Casse normale. Les phrases commencent par une majuscule. - Fixer la casse des noms (via Dictionaries\NamesEtc.xml) - Fixer seulement la casse des noms (via Dictionaries\NamesEtc.xml) - Changer seulement les lignes en majuscules. - TOUT EN MAJUSCULE - Tout en minuscule - - - Changer la casse - Noms - Noms trouvés dans le sous-titre : {0} - Activé - Nom - Ligne# - Avant - Après - Lignes trouvées : {0} - - - Changer la cadence de trame - Convertir la cadence de trame du sous-titre - Vitesse de départ - Vitesse désirée - - - Choisissez l'encodage - Page de code - Afficher nom - Choisissez un encodage - - - Choisissez la langue - Langue - - - Comparer les sous-titres - Différence &précédente - Différence &suivante - Les sous-titres ne sont pas similaires - Nombre de différences : {0} - Cacher les lignes identiques - Ne considérer que les différences dans le texte - - - Ripper les sous-titres à partir de ifo/vobs (dvd) - fichiers DVD/info - Fichier IFO - Fichiers IFO - Fichiers VOB - Ajouter... - Retirer - Nettoyer - Monter - Descendre - Langues - PAL/NTSC - PAL (25fps) - NTSC (30fps) - Démarrer l'extraction - Interrompre - Interrompue par l'utilisateur - Données sous-titres de lecture... - Ripper fichier vob {1} de {2}: {0} - - - Choix de la langue - Choix de la langue (stream-id) - Langue inconnue - Image du sous-titre {0}/{1} - {2}x{3} - - - Effet karaoke - Choisissez une couleur : - Millisecs. total: - Délai de fin en millisecs.: - - - Effet machine à écrire - Millisecs. total: - Délai de fin en millisecs.: - - - Rechercher - Chercher - Normal - Sensible à la casse - Expression régulière - - - Chercher la ligne de sous-titre - Re&chercher - Chercher &suivant - - - Correction des erreurs fréquentes - Etape 1/2 - Choix des erreurs à corriger - Quoi faire - Exemple - Tout sélect. - Inverser sélect. - < &Retour - &Suivant > - Etape 2/2 - Vérification des corrections - Corrections - Rapport - Ligne# - Fonction - Avant - Après - Ligne vide supprimée - Ligne vide supprimée au début - Ligne vide supprimée à la fin - Supprimer les lignes vides/sauts de lignes inutiles - Lignes vides supprimées : {0} - Corriger les temps d'affichage qui se chevauchent - Corriger les temps d'affichage trop courts - Corriger les temps d'affichage trop longs - Corriger le marquage en italique invalide - Supprimer les espaces inutiles - Supprimer la ponctuation inutile - Rajouter les espaces manquants - Couper les lignes longues - Supprimer les sauts de lignes dans les paragraphes courts avec une seule phrase - Corriger le 'i' majuscule à l'intérieur des mots (erreur OCR) - Remplacer les apostrophes doubles (' ') par un guillemet (") - Ajouter un point quand la ligne suivante commence par une majuscule - Commencer par une majuscule après un paragraphe - Mettre une majuscule après un point dans un paragraphe - Remplacer le i minuscule isolé par un I (Anglais) - Corriger les erreurs OCR fréquentes (d'après la liste des correctifs OCR) - Erreurs OCR fréquentes corrigées (d'après le fichier OcrReplaceList) : {0} - Corriger le 'i' danois - Retourner les points d'exclamation et d'interrogation espagnols - Ajout du guillemet (") manquant - Ajouter des guillemets (") manquants - Corriger les lignes commençant par un tiret (-) - Correction de la ligne commençant par un tiret (-) - Tirets corrigés : {0} - "Comment ça va ? -> "Comment ça va ?" - Guillemets ajoutés : {0} - Corriger les sous-titres de plus de deux lignes - Correction du sous-titre de plus de deux lignes - Sous-titre de plus de deux lignes corrigés : {0} - Analyse... - Rien à corriger :) - Corrections trouvées : {0} - Corrections effectuées : {0} - Rien à corriger mais quelques points peuvent être améliorés - voir le rapport - "Le remplacement du 'i' minuscule isolé en 'I' (Anglais)" est activé mais le sous-titre actuel ne semble pas être de l'anglais. - Continuer - Continuer quand même ? - Unchecked "Fix alone lowercase 'i' to 'I' (English)" - {0} i mis en majuscule - Mettre la première lettre en majuscule après un paragraphe - Fusionner ligne courte - {0} saut(s) de lignes ajouté(s) - Couper ligne longue - Corriger temps long - Corriger italique - Corriger temps court - Corriger chevauchement temporel - <i>Qu'est-ce j'en ai à faire.<i> -> <i>Qu'est-ce j'en ai à faire.</i> - Hé toi , là bas. -> Hé toi, là bas. - Hé toi !. -> Hé toi ! - Hé.Toi. -> Hé. Toi. - La fIn est proche. -> La fin est proche. - What do i care. -> What do I care. - Texte n°{0} : Le temps initial est postérieur au temps final : {4}{1} --> {2} {3} - Impossible de corriger le texte n°{0} : temps initial > temps final : {1} - {0} Corrigé en : {1}{2} - Impossible de corriger le texte n°{0} : {1} - {0} chevauchement(s) temporel(s) corrigé(s) - {0} temps d'affichage prolongé(s) - {0} marquage(s) html corrigé(s) - {0} temps d'affichage raccourci(s) - {0} ligne(s) recollée(s) - Espace inutile - {0} epace(s) inutile(s) enlevé(s) - Ponctuation inutile - {0} point(s) inutile(s) enlevé(s) - Correction espace manquant - {0} epace(s) manquant(s) ajouté(s) - Correction du 'i' majuscule dans un mot en minuscule - {0} point(s) ajouté(s). - Ajout point final - {0} apostrophe(s) double(s) corrigée(s). - {0} 'i' majuscule(s) trouvé(s) dans un mot en minuscules - Rafraîchir corrections disponibles - Effectuer les corrections sélectionnées - &Couper - &Joindre - Correction '--' -> '...' - Effacer les >> - Effacer les '...' en début de ligne - Apparier les [ dans une ligne - Remplacer les symboles musicaux (i.e. âTª) par le symbole préféré - Correction des '--' -> '...' - Enlever les >> depuis le début - Enlever les ... depuis le début - Correction des [ manquants - Remplacer les âTª par des * - {0} '--' corrigé(s) - {0} >> effacé(s) - {0} '...' en début enlevé(s) - {0} [ manquant(s) dans une ligne ajouté(s) - {0} notation(s) musicale(s) dans une ligne corrigée(s) - 'Whoa-- um yeah!' --> 'Whoa... um yeah!' - '>> Robert : ça gaze !' --> 'Robert : ça gaze !' - '... et ensuite nous' -> 'et ensuite nous' - 'clic] Attention !' --> '[clic] Attention !' - 'âTª sweet dreams are' --> '♫ sweet dreams are' - {0} messages traces importants! - - - Besoin de dictionnaires ? - Le correcteur d'orthographe de Subtitle Edit est basé sur le moteur - NHunspell qui utilise les dictionnaires d'Open Office. - Récupérez les dictionnaires ici : - Liste de dictionnaires du Wiki d'Open Office - Récuperer tous les dictionnaires - Choisir sa langue et cliquer sur télécharger - Ouvrir le dossier 'Dictionaries' - Télécharger - {0} a été téléchargé et installé - - - Google translate - De: - A: - Traduire - S'il vous plaît patienter... Cela peut prendre un certain temps - Réalisé avec Google traduction - Réalisé avec Microsoft traduction - - - Aller au sous-titre numéro - {0} n'est pas un nombre valide - - - Importer text - Ouvrir le fichier texte... - Options d'importation - Scinder - Découpage automatique du texte - Une ligne est un sous-titre - Fusionner les lignes courtes avec suite - Supprimez les lignes vides - Supprimez les lignes sans lettres - Écart entre les sous-titres (en millisecondes) - Auto - Fixé - &Actualiser - &Suivant>> - Les fichiers texte - Aperçu - paragraphes modification: {0} - -
- - - &Fichier - &Nouveau - &Ouvrir - &Réouvrir - &Sauver - Sauver so&us... - Ouvrir répertoire contenant les sous-titres - &Comparer... - Import/sous-titres OCR de VOB/IFO (DVD) ... - Import/OCR VobSub (sub/idx) sous-titres... - Sous-titres d'importation de fichier Matroska... - Sous-titres d'importation avec le codage choisi manuel... - Importer texte... - Importer temporisation... - &Quitter - - - &Edition - Montrer l'&historique (pour annulation) - Montrer texte original (mode traduction) - Cacher texte original - &Insérer un symbole unicode - Re&chercher - Chercher &suivant - &Remplacer - Remplacement &multiple... - &Aller au sous-titre n°... - - - Ou&tils - Ajuster &durées... - Correction des &erreurs fréquentes... - Nouvelle &numérotation... - Supprimer le texte pour &malentendants... - Changer la &casse... - Changer la vites&se de trame... - &Fusionner les lignes courtes... - Temps d'affichage minimum entre paragraphes... - T&rier par - Texte - alphabétique - Texte - longueur max d'une ligne - Texte - longueur totale - Texte - nombre de lignes - Part&itionner les sous-titres... - Compléter les so&us-titres... - - - - Orthographe - &Vérifier orthographe - Trouver doublons - Télécharger dictionnaires... - Ajouter des mots à la liste noms/etc - - - Synchronisation - Ajuster tous les temps (montrer précédent/Suivant) - &Synchronisation visuelle... - Synchronisation par points... - - - Traduction - Traduire (avec Google)... - Traduire (avec Microsoft) - Traduire du Suèdois au Danois (avec nikse.dk) - - - &Options - &Configuration... - Choix de la &langue... - - - &Aide - &Aide - A &propos - - - Nouveau - Ouvrir - Sauver - Sauver sous - Rechercher - Remplacer - Synchronisation visuelle - Correcteur d'orthographe - Configuration - Aide - Montrer/cacher forme sonore - Montrer/cacher vidéo - - - Effacer - Insérer avant - Insérer après - Scinder - Fusionner les lignes sélectionnées - Fusionner avec la ligne précédente - Fusionner avec la ligne suivante - Normal - Souligner - Couleur... - Nom de la fonte... - Balance automatique des lignes sélectionnées... - Retirez les retours à la ligne des lignes sélectionnées... - Effet machine à écrire... - Effet karaoké... - Afficher les options sélectionnées lignes plus tôt/tard... - Lignes choisies en synchronisation visuelle... - Traduction Google des lignes sélectionnées... - Régler la durée des lignes sélectionnées... - Correction des erreurs communes dans les lignes sélectionnées... - Changer la casse pour les lignes sélectionnées... - - - - Format de sous-titre - Encodage de fichier - Vue liste - Vue source - Annuler changement - < Préc. - Suiv. > - Couper - Joindre - - - Traduire - Créer - Ajuster - Sélectionner sous-titre courant pendant la lecture - Répétition automatique - Répétition automatique activée - Nombre de répétitions - Continuation automatique - Cont. automatique activée - Durée de la pause (secondes) - Texte original - < Pré&cédent - &Stop - &Lire - &Suivant > - Lecture... - Répéter...temps précédent - Répéter...{0} temps restant - Suite automatique dans une seconde - Suite automatique dans {0} secondes - Frappe en cours...suite automatique interrompue - &Insérer nouveau sous-titre - Automatique - Lecture juste avant &texte - Pause - Aller à la sélection puis pause - Définir &début - Définir &fin et aller au suivant - Définir f&in - Définir déb&ut et décaler la suite - Chercher texte en ligne - Traduction Google - Google - << secs - secs >> - Position vidéo: - <alt+flèche haut/bas> pour avancer/reculer d'un sous-titre - <ctrl+flèche gauche/droite> - <alt+flèche haut/bas> pour avancer/reculer d'un sous-titre - Temps modifié précédent dans le signal : {0} - Nouveau texte inséré à {0} - - Enregistrer les modifications sans titre? - Enregistrer les modifications de {0}? - Sauver sous-titre comme... - Pas de sous-titres chargé - Synchronisation visuelle - lignes sélectionnées - Synchronisation visuelle - Avant de synchronisation visuelle - Synchronisation visuelle effectués sur des lignes sélectionnées - Synchronisation visuelle effectuée - Importer ce sous-titre VobSub? - Fichier supérieure à 10 Mo: {0} - Continuer malgré tout? - Avant chargement de {0} - Sous-titres chargés {0} - Sous-titre vide ou très court chargé {0} - Le fichier est vide ou très courte! - Fichier introuvable: {0} - Sous-titres enregistrés {0} - Ffichier sur disque modifié - Écraser le fichier {0} modifiée à {1} {2}{3} avec le fichier actuel chargé à {4} {5}? - Impossible d'enregistrer le fichier sous-titre {0} - Avant nouveau - Nouveau - Avant de convertir en {0} - Converti en {0} - Avant de montrer précédent - Avant de montrer suivant - Ligne numéro: {0:#,##0.##} - Ouvrir fichier vidéo... - Nouvelle cadence de frame ({0}) a été utilisée pour calculer l'heure de début/fin - Nouvelle cadence de frame ({0}) a été utilisé pour le calcul des numéros de frame de début/fin - L'élément de recherche n'a pas été trouvé. Souhaitez-vous recommencer à partir du haut du document et faire une nouvelle recherche? - Continuer trouver? - "{0} 'trouvé à la ligne {1} - '{0}' introuvable - Avant de remplacer: {0} - Correspondance trouve: {0} - Aucune correspondance trouvée: {0} - Riien trouvé à remplacer - Nb de remplacement: {0} - Correspondance trouvée à la ligne {0}: {1} - Un remplacement effectué. - Avant les modifications apportées en mode Source - Impossible d'analyser le texte source! - Aller au numéro de la ligne {0} - Créer/modifier les lignes changées appliqués - Lignes sélectionnées - Avant le réglage du temps d'affichage - Afficher les temps ajustés: {0} - Avant les corrections d'erreurs courantes - Erreurs courantes corrigées dans les lignes sélectionnées - Erreurs courantes corrigées - Avant renumérotation - Renuméroté à partir de: {0} - Avant l'enlèvement des SMS pour les malentendants - Messages pour malentendants enlevé: Une ligne - Messages pour malentendants enlevé: {0} lignes - Sous-titre découpé +Email : mailto:nikse.dk@gmail.com + + + Ajouter à la liste noms/etc + Ajouter à la liste noms/bruit (sensible à la casse) + + + Générer forme à partir des données + Fichier vidéo source: + Générer forme à partir des données + Ceci peut prendre quelques minutes - patientez + VLC Media Player introuvable + Subtitle Edit a besoin de VLC media player 1.1.x ou suivant pour extraire les données audio + Voulez-vous aller sur le site de VLC media player? + Génération du fichier des pics... + Extraction audio: {0:0.0} secondes + Extraction audio: {0}:{1:00} secondes + + + Ajuster les durées + Ajuster selon + Secondes + Pourcentage + Ajouter des secondes + Déterminer en % de la durée + Note : L'instant d'affichage ne recouvre pas le temps initial du texte suivant + Veuillez sélectionner une valeur dans la liste déroulante + - Veuillez choisir - + + + Lignes sélectionnées équilibrées auto + Enlever les retours à la ligne dans la sélection + Ligne# + Avant + Après + Lignes trouvées : {0} + Seulement les lignes coupées plus longues de + Seulement les lignes non-coupées plus courtes de + + + Changer la casse + Changer la casse en + Casse normale. Les phrases commencent par une majuscule. + Fixer la casse des noms (via Dictionaries\NamesEtc.xml) + Fixer seulement la casse des noms (via Dictionaries\NamesEtc.xml) + Changer seulement les lignes en majuscules. + TOUT EN MAJUSCULE + Tout en minuscule + + + Changer la casse - Noms + Noms trouvés dans le sous-titre : {0} + Activé + Nom + Ligne# + Avant + Après + Lignes trouvées : {0} + + + Changer la cadence de trame + Convertir la cadence de trame du sous-titre + Vitesse de départ + Vitesse désirée + + + Choisissez l'encodage + Page de code + Afficher nom + Choisissez un encodage + + + Choisissez la langue + Langue + + + Comparer les sous-titres + Différence &précédente + Différence &suivante + Les sous-titres ne sont pas similaires + Nombre de différences : {0} + Cacher les lignes identiques + Ne considérer que les différences dans le texte + + + Ripper les sous-titres à partir de ifo/vobs (dvd) + fichiers DVD/info + Fichier IFO + Fichiers IFO + Fichiers VOB + Ajouter... + Retirer + Nettoyer + Monter + Descendre + Langues + PAL/NTSC + PAL (25fps) + NTSC (30fps) + Démarrer l'extraction + Interrompre + Interrompue par l'utilisateur + Données sous-titres de lecture... + Ripper fichier vob {1} de {2}: {0} + + + Choix de la langue + Choix de la langue (stream-id) + Langue inconnue + Image du sous-titre {0}/{1} - {2}x{3} + + + Effet karaoke + Choisissez une couleur : + Millisecs. total: + Délai de fin en millisecs.: + + + Effet machine à écrire + Millisecs. total: + Délai de fin en millisecs.: + + + Rechercher + Chercher + Normal + Sensible à la casse + Expression régulière + + + Chercher la ligne de sous-titre + Re&chercher + Chercher &suivant + + + Correction des erreurs fréquentes + Etape 1/2 - Choix des erreurs à corriger + Quoi faire + Exemple + Tout sélect. + Inverser sélect. + < &Retour + &Suivant > + Etape 2/2 - Vérification des corrections + Corrections + Rapport + Ligne# + Fonction + Avant + Après + Ligne vide supprimée + Ligne vide supprimée au début + Ligne vide supprimée à la fin + Supprimer les lignes vides/sauts de lignes inutiles + Lignes vides supprimées : {0} + Corriger les temps d'affichage qui se chevauchent + Corriger les temps d'affichage trop courts + Corriger les temps d'affichage trop longs + Corriger le marquage en italique invalide + Supprimer les espaces inutiles + Supprimer la ponctuation inutile + Rajouter les espaces manquants + Couper les lignes longues + Supprimer les sauts de lignes dans les paragraphes courts avec une seule phrase + Corriger le 'i' majuscule à l'intérieur des mots (erreur OCR) + Remplacer les apostrophes doubles (' ') par un guillemet (") + Ajouter un point quand la ligne suivante commence par une majuscule + Commencer par une majuscule après un paragraphe + Mettre une majuscule après un point dans un paragraphe + Remplacer le i minuscule isolé par un I (Anglais) + Corriger les erreurs OCR fréquentes (d'après la liste des correctifs OCR) + Erreurs OCR fréquentes corrigées (d'après le fichier OcrReplaceList) : {0} + Corriger le 'i' danois + Retourner les points d'exclamation et d'interrogation espagnols + Ajout du guillemet (") manquant + Ajouter des guillemets (") manquants + Corriger les lignes commençant par un tiret (-) + Correction de la ligne commençant par un tiret (-) + Tirets corrigés : {0} + "Comment ça va ? -> "Comment ça va ?" + Guillemets ajoutés : {0} + Corriger les sous-titres de plus de deux lignes + Correction du sous-titre de plus de deux lignes + Sous-titre de plus de deux lignes corrigés : {0} + Analyse... + Rien à corriger :) + Corrections trouvées : {0} + Corrections effectuées : {0} + Rien à corriger mais quelques points peuvent être améliorés - voir le rapport + "Le remplacement du 'i' minuscule isolé en 'I' (Anglais)" est activé mais le sous-titre actuel ne semble pas être de l'anglais. + Continuer + Continuer quand même ? + Unchecked "Fix alone lowercase 'i' to 'I' (English)" + {0} i mis en majuscule + Mettre la première lettre en majuscule après un paragraphe + Fusionner ligne courte + {0} saut(s) de lignes ajouté(s) + Couper ligne longue + Corriger temps long + Corriger italique + Corriger temps court + Corriger chevauchement temporel + <i>Qu'est-ce j'en ai à faire.<i> -> <i>Qu'est-ce j'en ai à faire.</i> + Hé toi , là bas. -> Hé toi, là bas. + Hé toi !. -> Hé toi ! + Hé.Toi. -> Hé. Toi. + La fIn est proche. -> La fin est proche. + What do i care. -> What do I care. + Texte n°{0} : Le temps initial est postérieur au temps final : {4}{1} --> {2} {3} + Impossible de corriger le texte n°{0} : temps initial > temps final : {1} + {0} Corrigé en : {1}{2} + Impossible de corriger le texte n°{0} : {1} + {0} chevauchement(s) temporel(s) corrigé(s) + {0} temps d'affichage prolongé(s) + {0} marquage(s) html corrigé(s) + {0} temps d'affichage raccourci(s) + {0} ligne(s) recollée(s) + Espace inutile + {0} epace(s) inutile(s) enlevé(s) + Ponctuation inutile + {0} point(s) inutile(s) enlevé(s) + Correction espace manquant + {0} epace(s) manquant(s) ajouté(s) + Correction du 'i' majuscule dans un mot en minuscule + {0} point(s) ajouté(s). + Ajout point final + {0} apostrophe(s) double(s) corrigée(s). + {0} 'i' majuscule(s) trouvé(s) dans un mot en minuscules + Rafraîchir corrections disponibles + Effectuer les corrections sélectionnées + &Couper + &Joindre + Correction '--' -> '...' + Effacer les >> + Effacer les '...' en début de ligne + Apparier les [ dans une ligne + Remplacer les symboles musicaux (i.e. âTª) par le symbole préféré + Correction des '--' -> '...' + Enlever les >> depuis le début + Enlever les ... depuis le début + Correction des [ manquants + Remplacer les âTª par des * + {0} '--' corrigé(s) + {0} >> effacé(s) + {0} '...' en début enlevé(s) + {0} [ manquant(s) dans une ligne ajouté(s) + {0} notation(s) musicale(s) dans une ligne corrigée(s) + 'Whoa-- um yeah!' --> 'Whoa... um yeah!' + '>> Robert : ça gaze !' --> 'Robert : ça gaze !' + '... et ensuite nous' -> 'et ensuite nous' + 'clic] Attention !' --> '[clic] Attention !' + 'âTª sweet dreams are' --> '♫ sweet dreams are' + {0} messages traces importants! + + + Besoin de dictionnaires ? + Le correcteur d'orthographe de Subtitle Edit est basé sur le moteur + NHunspell qui utilise les dictionnaires d'Open Office. + Récupérez les dictionnaires ici : + Liste de dictionnaires du Wiki d'Open Office + Récuperer tous les dictionnaires + Choisir sa langue et cliquer sur télécharger + Ouvrir le dossier 'Dictionaries' + Télécharger + {0} a été téléchargé et installé + + + Google translate + De: + A: + Traduire + S'il vous plaît patienter... Cela peut prendre un certain temps + Réalisé avec Google traduction + Réalisé avec Microsoft traduction + + + Aller au sous-titre numéro + {0} n'est pas un nombre valide + + + Importer text + Ouvrir le fichier texte... + Options d'importation + Scinder + Découpage automatique du texte + Une ligne est un sous-titre + Fusionner les lignes courtes avec suite + Supprimez les lignes vides + Supprimez les lignes sans lettres + Écart entre les sous-titres (en millisecondes) + Auto + Fixé + &Actualiser + &Suivant>> + Les fichiers texte + Aperçu - paragraphes modification: {0} + +
+ + + &Fichier + &Nouveau + &Ouvrir + &Réouvrir + &Sauver + Sauver so&us... + Ouvrir répertoire contenant les sous-titres + &Comparer... + Import/sous-titres OCR de VOB/IFO (DVD) ... + Import/OCR VobSub (sub/idx) sous-titres... + Import/OCR BluRay (.sup) sous-titres... + Sous-titres d'importation de fichier Matroska... + Sous-titres d'importation avec le codage choisi manuel... + Importer texte... + Importer temporisation... + &Quitter + + + &Edition + Montrer l'&historique (pour annulation) + Montrer texte original (mode traduction) + Cacher texte original + &Insérer un symbole unicode + Re&chercher + Chercher &suivant + &Remplacer + Remplacement &multiple... + &Aller au sous-titre n°... + + + Ou&tils + Ajuster &durées... + Correction des &erreurs fréquentes... + Nouvelle &numérotation... + Supprimer le texte pour &malentendants... + Changer la &casse... + Changer la vites&se de trame... + &Fusionner les lignes courtes... + Temps d'affichage minimum entre paragraphes... + T&rier par + Texte - alphabétique + Texte - longueur max d'une ligne + Texte - longueur totale + Texte - nombre de lignes + Part&itionner les sous-titres... + Compléter les so&us-titres... + + + + Orthographe + &Vérifier orthographe + Trouver doublons + Télécharger dictionnaires... + Ajouter des mots à la liste noms/etc + + + Synchronisation + Ajuster tous les temps (montrer précédent/Suivant) + &Synchronisation visuelle... + Synchronisation par points... + + + Traduction + Traduire (avec Google)... + Traduire (avec Microsoft) + Traduire du Suèdois au Danois (avec nikse.dk) + + + &Options + &Configuration... + Choix de la &langue... + + + &Aide + &Aide + A &propos + + + Nouveau + Ouvrir + Sauver + Sauver sous + Rechercher + Remplacer + Synchronisation visuelle + Correcteur d'orthographe + Configuration + Aide + Montrer/cacher forme sonore + Montrer/cacher vidéo + + + Effacer + Insérer avant + Insérer après + Scinder + Fusionner les lignes sélectionnées + Fusionner avec la ligne précédente + Fusionner avec la ligne suivante + Normal + Souligner + Couleur... + Nom de la fonte... + Balance automatique des lignes sélectionnées... + Retirez les retours à la ligne des lignes sélectionnées... + Effet machine à écrire... + Effet karaoké... + Afficher les options sélectionnées lignes plus tôt/tard... + Lignes choisies en synchronisation visuelle... + Traduction Google des lignes sélectionnées... + Régler la durée des lignes sélectionnées... + Correction des erreurs communes dans les lignes sélectionnées... + Changer la casse pour les lignes sélectionnées... + + + + Format de sous-titre + Encodage de fichier + Vue liste + Vue source + Annuler changement + < Préc. + Suiv. > + Couper + Joindre + + + Traduire + Créer + Ajuster + Sélectionner sous-titre courant pendant la lecture + Répétition automatique + Répétition automatique activée + Nombre de répétitions + Continuation automatique + Cont. automatique activée + Durée de la pause (secondes) + Texte original + < Pré&cédent + &Stop + &Lire + &Suivant > + Lecture... + Répéter...temps précédent + Répéter...{0} temps restant + Suite automatique dans une seconde + Suite automatique dans {0} secondes + Frappe en cours...suite automatique interrompue + &Insérer nouveau sous-titre + Automatique + Lecture juste avant &texte + Pause + Aller à la sélection puis pause + Définir &début + Définir &fin et aller au suivant + Définir f&in + Définir déb&ut et décaler la suite + Chercher texte en ligne + Traduction Google + Google + << secs + secs >> + Position vidéo: + <alt+flèche haut/bas> pour avancer/reculer d'un sous-titre + <ctrl+flèche gauche/droite> + <alt+flèche haut/bas> pour avancer/reculer d'un sous-titre + Temps modifié précédent dans le signal : {0} + Nouveau texte inséré à {0} + + Enregistrer les modifications sans titre? + Enregistrer les modifications de {0}? + Sauver sous-titre comme... + Pas de sous-titres chargé + Synchronisation visuelle - lignes sélectionnées + Synchronisation visuelle + Avant de synchronisation visuelle + Synchronisation visuelle effectués sur des lignes sélectionnées + Synchronisation visuelle effectuée + Importer ce sous-titre VobSub? + Fichier supérieure à 10 Mo: {0} + Continuer malgré tout? + Avant chargement de {0} + Sous-titres chargés {0} + Sous-titre vide ou très court chargé {0} + Le fichier est vide ou très courte! + Fichier introuvable: {0} + Sous-titres enregistrés {0} + Ffichier sur disque modifié + Écraser le fichier {0} modifiée à {1} {2}{3} avec le fichier actuel chargé à {4} {5}? + Impossible d'enregistrer le fichier sous-titre {0} + Avant nouveau + Nouveau + Avant de convertir en {0} + Converti en {0} + Avant de montrer précédent + Avant de montrer suivant + Ligne numéro: {0:#,##0.##} + Ouvrir fichier vidéo... + Nouvelle cadence de frame ({0}) a été utilisée pour calculer l'heure de début/fin + Nouvelle cadence de frame ({0}) a été utilisé pour le calcul des numéros de frame de début/fin + L'élément de recherche n'a pas été trouvé. Souhaitez-vous recommencer à partir du haut du document et faire une nouvelle recherche? + Continuer trouver? + "{0} 'trouvé à la ligne {1} + '{0}' introuvable + Avant de remplacer: {0} + Correspondance trouve: {0} + Aucune correspondance trouvée: {0} + Riien trouvé à remplacer + Nb de remplacement: {0} + Correspondance trouvée à la ligne {0}: {1} + Un remplacement effectué. + Avant les modifications apportées en mode Source + Impossible d'analyser le texte source! + Aller au numéro de la ligne {0} + Créer/modifier les lignes changées appliqués + Lignes sélectionnées + Avant le réglage du temps d'affichage + Afficher les temps ajustés: {0} + Avant les corrections d'erreurs courantes + Erreurs courantes corrigées dans les lignes sélectionnées + Erreurs courantes corrigées + Avant renumérotation + Renuméroté à partir de: {0} + Avant l'enlèvement des SMS pour les malentendants + Messages pour malentendants enlevé: Une ligne + Messages pour malentendants enlevé: {0} lignes + Sous-titre découpé Ceci concatènera un sous-titre au sous-titre actuellement chargé qui devrait déjà être en synchronisation avec un fichier vidéo. -Poursuivre? - Compléter des sous-titres - Sous-titre ouvert à compléter... - Synchronisation visuelle - ajouter deuxième partie de sous-titre - Ajouter ce sous-titre synchronisé? - Avant ajout - Sous-titre ajouté: {0} - Sous-titre non ajouté! - Traduction Google - Traduction Microsoft - Avant la traduction Google - Lignes sélectionnées traduites - Sous-titre traduit - Traduire sous-titre Suèdois actuellement chargé en Danois - Traduire les sous-titres Suédois actuellement chargés (est-ce bien du suédois?) en Danois? - Traduction par www.nikse.dk/mt... - Avant traduction du Suédois en Danois - Traduction du Suédois en Danois terminée - Traduction du Suédois en Danois échouée - Avant d'annuler - Annuler effectué - Rien à annuler - Nom de langue invalide : {0} - Impossible de changer de langue! - Nombre de mots corrigés: {0} - Nombre de mots ignorés: {0} - Nombre de mots corrects: {0} - Nombre de mots ajoutés au dictionnaire: {0} - Nombre de hits pour nom: {0} - Correcteur d'orthographe - Avant la vérification orthographique - Vérification orthographique: Changé '{0}' en '{1} " - Avant d'ajouter <{0}> tag - <{0}> tags ajoutés - ligne {0} de {1} - {0} lignes supprimées - Avant de supprimer {0} lignes - Supprimer {0} lignes? - Ligne supprimée - Avant de supprimer une ligne - Supprimer une ligne? - Avant d'insérer ligne - Ligne insérée - Avant ligne mise à jour dans listview - Avant de définir la fonte à normale - Avant séparer la ligne - Line séparée - Avant de fusionner les lignes - Lignes fusionnées - Avant de régler la couleur - Avant de définir le nom de fonte - Avant effet machine à écrire - Avant effet karaoké - Avant d'importer des sous-titres du DVD - Ouvrir le fichier Matroska... - Fichiers Matroska - Aucun sous-titre trouvé - Ce n'est pas un fichier matroska valide : {0} - Analyse du fichier Matroska. Patientez... - Avant l'importation de sous-titres du fichier Matroska - Sous-titre importés de fichier Matroska - Déposer fichier '{0}' impossible - fichier trop volumineux - Vous ne pouvez déposer qu'un fichier - Avant de créer/modifier les lignes - Ouvrir sous-titre... - Avant de changer la casse - Nombre de lignes avec la casse changée: {0}/{1} - Nombre de lignes dont la casse est changée: {0}/{1} - Nombre de lignes avec la casse changée: {0}/{1}, casse changée pour les noms : {2} - Avant le changement de cadence de frames - Cadence de frame changée de {0} en {1} - {0} introuvable! Importer le fichiers VobSub quand même? - En-tête non valide fichier VobSub : {0} - Ouvrir sous-titres VobSub (sub/idx)... - Fichiers sous-titres VobSub - Avant d'importer des sous-titres VobSub - Avant de montrer les lignes précédentes/suivantes sélectionnées - Montrer précédent/suivant effectué sur les lignes sélectionnées - Double mots via regex {0} - Avant le tri: {0} - Triés par: {0} - Avant l'équilibre automatique des lignes sélectionnées - Nombre de lignes équilibrée automatiquement: {0} - Avant de supprimer la coupure de lignes des lignes sélectionnées - Nombre de lignes avec des coupures de lignes enlevés: {0} - Avant le remplacement multiple - Nombre de lignes avec du texte remplacé: {0} - Le nom "{0} 'a été ajouté à la liste noms/etc. - Le nom '{0} n'a pas été ajouté à la liste noms/etc - {0} lignes sélectionnées - Sous-titre contenant des notes de musique unicode. Ils seront perdus en sauvegardant avec encodage ANSI.Poursuivre la sauvegarde? - Sous-titre contenantt des codes de temps négatifs. Continuer la sauvegarde? - Avant de fusionner les lignes courtes - Nombre de lignes fusionnées: {0} - Avant la mise au minimum du temps d'affichage entre les paragraphes - Nombre de lignes avec le temps minimum d'affichage entre les paragraphes changé : {0} - Avant d'importer le fichier texte - Fichier texte importé - Avant le point de synchronisation - Point de synchronisation effectué - Avant d'importer les codes de temps - Codes de temps importés de {0}: {1} - Avant insertion du sous-titre à la position vidéo - Avant définir l'heure de début et décaler la suite - Continuer avec la correction orthographique actuelle? -
- +Poursuivre? + Compléter des sous-titres + Sous-titre ouvert à compléter... + Synchronisation visuelle - ajouter deuxième partie de sous-titre + Ajouter ce sous-titre synchronisé? + Avant ajout + Sous-titre ajouté: {0} + Sous-titre non ajouté! + Traduction Google + Traduction Microsoft + Avant la traduction Google + Lignes sélectionnées traduites + Sous-titre traduit + Traduire sous-titre Suèdois actuellement chargé en Danois + Traduire les sous-titres Suédois actuellement chargés (est-ce bien du suédois?) en Danois? + Traduction par www.nikse.dk/mt... + Avant traduction du Suédois en Danois + Traduction du Suédois en Danois terminée + Traduction du Suédois en Danois échouée + Avant d'annuler + Annuler effectué + Rien à annuler + Nom de langue invalide : {0} + Impossible de changer de langue! + Nombre de mots corrigés: {0} + Nombre de mots ignorés: {0} + Nombre de mots corrects: {0} + Nombre de mots ajoutés au dictionnaire: {0} + Nombre de hits pour nom: {0} + Correcteur d'orthographe + Avant la vérification orthographique + Vérification orthographique: Changé '{0}' en '{1} " + Avant d'ajouter <{0}> tag + <{0}> tags ajoutés + ligne {0} de {1} + {0} lignes supprimées + Avant de supprimer {0} lignes + Supprimer {0} lignes? + Ligne supprimée + Avant de supprimer une ligne + Supprimer une ligne? + Avant d'insérer ligne + Ligne insérée + Avant ligne mise à jour dans listview + Avant de définir la fonte à normale + Avant séparer la ligne + Line séparée + Avant de fusionner les lignes + Lignes fusionnées + Avant de régler la couleur + Avant de définir le nom de fonte + Avant effet machine à écrire + Avant effet karaoké + Avant d'importer des sous-titres du DVD + Ouvrir le fichier Matroska... + Fichiers Matroska + Aucun sous-titre trouvé + Ce n'est pas un fichier matroska valide : {0} + Analyse du fichier Matroska. Patientez... + Avant l'importation de sous-titres du fichier Matroska + Sous-titre importés de fichier Matroska + Déposer fichier '{0}' impossible - fichier trop volumineux + Vous ne pouvez déposer qu'un fichier + Avant de créer/modifier les lignes + Ouvrir sous-titre... + Avant de changer la casse + Nombre de lignes avec la casse changée: {0}/{1} + Nombre de lignes dont la casse est changée: {0}/{1} + Nombre de lignes avec la casse changée: {0}/{1}, casse changée pour les noms : {2} + Avant le changement de cadence de frames + Cadence de frame changée de {0} en {1} + {0} introuvable! Importer le fichiers VobSub quand même? + En-tête non valide fichier VobSub : {0} + Ouvrir sous-titres VobSub (sub/idx)... + Fichiers sous-titres VobSub + Ouvrir sous-titres BluRay (.sup)... + Fichiers sous-titres BluRay + Avant d'importer des sous-titres VobSub + Avant d'importer des sous-titres BluRay + Avant de montrer les lignes précédentes/suivantes sélectionnées + Montrer précédent/suivant effectué sur les lignes sélectionnées + Double mots via regex {0} + Avant le tri: {0} + Triés par: {0} + Avant l'équilibre automatique des lignes sélectionnées + Nombre de lignes équilibrée automatiquement: {0} + Avant de supprimer la coupure de lignes des lignes sélectionnées + Nombre de lignes avec des coupures de lignes enlevés: {0} + Avant le remplacement multiple + Nombre de lignes avec du texte remplacé: {0} + Le nom "{0} 'a été ajouté à la liste noms/etc. + Le nom '{0} n'a pas été ajouté à la liste noms/etc + {0} lignes sélectionnées + Sous-titre contenant des notes de musique unicode. Ils seront perdus en sauvegardant avec encodage ANSI.Poursuivre la sauvegarde? + Sous-titre contenantt des codes de temps négatifs. Continuer la sauvegarde? + Avant de fusionner les lignes courtes + Nombre de lignes fusionnées: {0} + Avant la mise au minimum du temps d'affichage entre les paragraphes + Nombre de lignes avec le temps minimum d'affichage entre les paragraphes changé : {0} + Avant d'importer le fichier texte + Fichier texte importé + Avant le point de synchronisation + Point de synchronisation effectué + Avant d'importer les codes de temps + Codes de temps importés de {0}: {1} + Avant insertion du sous-titre à la position vidéo + Avant définir l'heure de début et décaler la suite + Continuer avec la correction orthographique actuelle? +
+ Choisir les sous-titres du fichier Matroska - - Plus d'un sous-titre trouvées - choisir svp - Piste {0} - {1} - Langue: {2} - type: {3} - - - Fusionner les lignes courtes - Maximum de caractères dans un paragraphe - Maximum de millisecondes entre les lignes - Nombre de fusions: {0} - Ligne # - Texte fusionné - - - Remplacement multiple - Trouvez quoi - Remplacer par - Normal - Sensible à la casse - Expression régulière - Ligne # - Avant - Après - Lignes trouvés: {0} - Effacer - Ajouter - &Mise à jour - Activé - Type de recherche - - - Supprimer le texte pour les malentendants - Règles de supprssion du texte - Supprimer le texte entre: - '[' Et ']' - '(' Et ')' - '(' Et ')' - '?' et '?' - et - Supprimer le texte devant un deux points (':') - Seulement si le texte est en MAJUSCULE - Seulement dans une ligne séparée - Ligne # - Avant - Après - Lignes trouvés: {0} - Supprimer le texte si il contient: - - - Remplacer - Trouvez quoi: - Normal - Sensible à la casse - Expression régulière - Remplacer par - &Trouver - &Remplacer - Remplacer &tous - - - Régler le temps d'affichage minimum entre les paragraphes - Aperçu - paragraphes modifiés: {0} - Afficher uniquement les lignes modifiées - Minimum de millisecondes entre les lignes - - - Définir point de synchronisation à la ligne {0} - Synchroniser le code de point de temps - << 3 secs - << ½ sec - ½ sec >> - 3 secs >> - - - Configuration - Général - Lecture vidéo - Forme de l'onde - Outils - Listes de mots - Style SSA - Proxy - Afficher les boutons de la barre d'outils - Nouveau - Ouvrir - Sauver - Sauver sous - Chercher - Remplacer - Synchronisation visuelle - Orthographe - Config. - Aide - Divers - Voir la cadence dans la barre d'outils - Vitesse de trame par défaut - Encodage fichier par défaut - Détection auto du codage ANSI - Longueur maximale de sous-titre - Police de sous-titre - Taille de sous-titre - Se souvenir des fichiers récents (pour réouverture) - Démarrer avec le dernier fichier chargé - Se rappeler la position et la taille de la fenêtre principale - Démarrer en vue source - Supprimer les lignes vides lors de l'ouverture d'un sous-titre - Afficher les sauts de ligne dans la vue liste avec - Double-cliquer sur une ligne dans la fenêtre principale fera - Rien - Aller à la position vidéo puis pause - Aller à la position vidéo puis lire - Aller à la boite d'édition de texte - Moteur de rendu vidéo - DirectShow - quartz.dll du dossier system32/ - DirectX géré - Microsoft.DirectX.AudioVideoPlayback - .NET Managed code de DirectX - Windows Media Player - WMP ActiveX control - VLC Media Player - libvlc.dll de VLC Media Player 1.1.0 ou plus récent - Montrer bouton stop - Volume par défaut - 0 pour muet, 100 pour le volume le plus fort - Controles principaux de la fenêtre vidéo - Recherche texte et url personnalisée - Apparence de la forme de l'onde - Couleur de la grille - Montrer les lignes de la grille - Couleur - Couleur sélectionnée - Couleur de fond - Couleur du texte - Vider le répertoire 'WaveForms' - Le répertoire 'WaveForms' contient {0} fichiers ({1:0.00} MB) - Style du SSA (Sub Station Alpha) - Choisir fonte - Choisir couleur - Exemple - Un petit texte 123... - Langue - Liste Nom/ignore (sensible à la casse) - Ajouter nom - Ajouter mot - Enlever - Ajouter paire - Liste utilisateur - Liste correctif OCR - Emplacement - Utiliser le fichier web partagé Names_Etc.xml - Mot ajouter : {0} - Le mot existe déjà ! - Mot introuvable - Enlever {0} ? - Impossible de mettre à jour en ligne NamesEtc.xml! - Configuration du serveur proxy - Adresse du proxy - Authentification - Nom d'utilisateur - Mot de passe - Domaine - Lire X secondes puis retour. X = - Paragraphe de la première scène - Paragraphe de la dernière scène - Début + {0} - Fin - {0} - Corriger les erreurs fréquentes - Fusionner les lignes plus courtes que - Symbole musical - Symboles musicaux à remplacer (séparer par des espaces) - - - Afficher les options sélectionnées lignes plus tôt/tard - Voir précédent - Voir suivant - Ajustement total: {0} - - - Historique (pour annuler - Choisissez le point de retour en arrière - - Description - Comparer les éléments de l'historique - Comparer avec actuelle - Retour en arrière - - - Correcteur orthographique - Texte complet - Mot introuvable - Langue - Changer - Changer tous - &Passer - Passer &tous - Ajouter au dictionnaire utilisateur - Ajouter à la liste des noms (sensible à la casse) - Interrompre - Utiliser - Toujours &utiliser - Suggestions - Orthographe [{0}] - {1} - Editer texte entier - Editer un mot - Ajouter '{0}' à la liste nom/etc - Correction automatique seulement si la casse diffère - Texte de l'image - Vérification d'orthographe terminée - Vérification d'orthographe interrompue - - - Partitionner sous-titres - Entrer la durée de la 1ère partie de la vidéo ou - cliquer pour selectionner la vidéo: - &Couper - &Fait - Rien à partitionner! - Sauver partie 1 sous... - Sauver partie 2 sous... - Partie1 - Partie2 - Impossible de sauver {0} - - - Nouvelle numérotation... - Démarrer à partir de : - Oups, veuillez entrer un nombre - - - Synchronisation par points - Poser au moins deux points de synchro pour esquisser la synchro - Poser point de synchro - Enlever point de synchro - Points de synchro : {0} - La synchronization par points nécessite au moins 2 points de synchro - - - Type de sous-titre inconnu - Si vous voulez que cela soit corrigé, veuillez envoyer un email à mailto:niksedk@gmail.com avec une copie de ce sous-titre. - - - Synchronisation visuelle - Scène initiale - Scène finale - Synchroniser - < ½ sec - < 3 sec - Lire {0} s puis retour - Rechercher texte - Aller sous-position - Conserver les modifications ? - Les sous-titres ont été changés dans 'Synchro visuelle'. - Synchronisation terminée ! - La scène de début doit venir avant la scène finale ! - <ctrl+flèche gauche/droite> pour avancer/reculer de100 ms - - - Edite image compare base de données - Choisir les caractère(s) - Fichiers de comparaison des images - Image comparée courante - Texte associé à l'image - Est &italique - &Mise à jour - &Effacer - Image taille double - Fichier image introuvable - Image - - - Import/OCR VobSub (sub/idx) sous-titres - Méthode OCR - OCR par Microsoft Office Document Imaging (MODI). Nécessite MS Office - OCR par Tesseract - Langue - OCR par comparaison d'images - Base d'images - Nb de pixels dans l'espace - Nouveau - Editer - Lancer OCR - Stop - Lancer OCR à partir du sous-titre No: - Chargement des images VobSub... - Image sous-titre - Texte sous-titre - Impossible de créer le «dossier de la base de caractères ': {0} - Image sous-titre {0} sur {1} - Palette image - Utiliser couleurs personnalisées - Transparent - Demander pour les mots inconnus - Tenter de deviner mots inconnus - Coupure auto de paragraphe de plus de deux lignes - Tous les correctifs - Suppositions utilisées - Mots inconnus - Correction auto OCR /vérification orthographe - Correction des erreurs OCR - Sauver sous-titre image sous... - Tenter MS MODI OCR pour mots inconnus - Dictionnaire : {0} - De droite à gauche - Montrer uniquement les sous-titres forcés - Utiliser les codes de temps du fichier .idx - - - VobSub - Image vers texte manuel - Réduire sélection - Agrandir sélection - Image sous-titre - Caractère(s) - Caractère(s) comme texte - &Italique - Inte&rrompre - - - Nouveau dossier - Nom du dossier de la base des caractères - - - Cliquer pour ajouter une forme sonore - secondes - Agrandissement - Rétrécissement - Ajouter le texte ici - Supprimer texte - Couper - Couper au curseur - Fusionner avec le précédent - Fusionner avec le suivant - Lire sélection - + + Plus d'un sous-titre trouvées - choisir svp + Piste {0} - {1} - Langue: {2} - type: {3} + + + Fusionner les lignes courtes + Maximum de caractères dans un paragraphe + Maximum de millisecondes entre les lignes + Nombre de fusions: {0} + Ligne # + Texte fusionné + + + Remplacement multiple + Trouvez quoi + Remplacer par + Normal + Sensible à la casse + Expression régulière + Ligne # + Avant + Après + Lignes trouvés: {0} + Effacer + Ajouter + &Mise à jour + Activé + Type de recherche + + + Supprimer le texte pour les malentendants + Règles de supprssion du texte + Supprimer le texte entre: + '[' Et ']' + '(' Et ')' + '(' Et ')' + '?' et '?' + et + Supprimer le texte devant un deux points (':') + Seulement si le texte est en MAJUSCULE + Seulement dans une ligne séparée + Ligne # + Avant + Après + Lignes trouvés: {0} + Supprimer le texte si il contient: + + + Remplacer + Trouvez quoi: + Normal + Sensible à la casse + Expression régulière + Remplacer par + &Trouver + &Remplacer + Remplacer &tous + + + Régler le temps d'affichage minimum entre les paragraphes + Aperçu - paragraphes modifiés: {0} + Afficher uniquement les lignes modifiées + Minimum de millisecondes entre les lignes + + + Définir point de synchronisation à la ligne {0} + Synchroniser le code de point de temps + << 3 secs + << ½ sec + ½ sec >> + 3 secs >> + + + Configuration + Général + Lecture vidéo + Forme de l'onde + Outils + Listes de mots + Style SSA + Proxy + Afficher les boutons de la barre d'outils + Nouveau + Ouvrir + Sauver + Sauver sous + Chercher + Remplacer + Synchronisation visuelle + Orthographe + Config. + Aide + Divers + Voir la cadence dans la barre d'outils + Vitesse de trame par défaut + Encodage fichier par défaut + Détection auto du codage ANSI + Longueur maximale de sous-titre + Police de sous-titre + Taille de sous-titre + Se souvenir des fichiers récents (pour réouverture) + Démarrer avec le dernier fichier chargé + Se rappeler la position et la taille de la fenêtre principale + Démarrer en vue source + Supprimer les lignes vides lors de l'ouverture d'un sous-titre + Afficher les sauts de ligne dans la vue liste avec + Double-cliquer sur une ligne dans la fenêtre principale fera + Rien + Aller à la position vidéo puis pause + Aller à la position vidéo puis lire + Aller à la boite d'édition de texte + Moteur de rendu vidéo + DirectShow + quartz.dll du dossier system32/ + DirectX géré + Microsoft.DirectX.AudioVideoPlayback - .NET Managed code de DirectX + Windows Media Player + WMP ActiveX control + VLC Media Player + libvlc.dll de VLC Media Player 1.1.0 ou plus récent + Montrer bouton stop + Volume par défaut + 0 pour muet, 100 pour le volume le plus fort + Controles principaux de la fenêtre vidéo + Recherche texte et url personnalisée + Apparence de la forme de l'onde + Couleur de la grille + Montrer les lignes de la grille + Couleur + Couleur sélectionnée + Couleur de fond + Couleur du texte + Vider le répertoire 'WaveForms' + Le répertoire 'WaveForms' contient {0} fichiers ({1:0.00} MB) + Style du SSA (Sub Station Alpha) + Choisir fonte + Choisir couleur + Exemple + Un petit texte 123... + Langue + Liste Nom/ignore (sensible à la casse) + Ajouter nom + Ajouter mot + Enlever + Ajouter paire + Liste utilisateur + Liste correctif OCR + Emplacement + Utiliser le fichier web partagé Names_Etc.xml + Mot ajouter : {0} + Le mot existe déjà ! + Mot introuvable + Enlever {0} ? + Impossible de mettre à jour en ligne NamesEtc.xml! + Configuration du serveur proxy + Adresse du proxy + Authentification + Nom d'utilisateur + Mot de passe + Domaine + Lire X secondes puis retour. X = + Paragraphe de la première scène + Paragraphe de la dernière scène + Début + {0} + Fin - {0} + Corriger les erreurs fréquentes + Fusionner les lignes plus courtes que + Symbole musical + Symboles musicaux à remplacer (séparer par des espaces) + + + Afficher les options sélectionnées lignes plus tôt/tard + Voir précédent + Voir suivant + Ajustement total: {0} + + + Historique (pour annuler + Choisissez le point de retour en arrière + + Description + Comparer les éléments de l'historique + Comparer avec actuelle + Retour en arrière + + + Correcteur orthographique + Texte complet + Mot introuvable + Langue + Changer + Changer tous + &Passer + Passer &tous + Ajouter au dictionnaire utilisateur + Ajouter à la liste des noms (sensible à la casse) + Interrompre + Utiliser + Toujours &utiliser + Suggestions + Orthographe [{0}] - {1} + Editer texte entier + Editer un mot + Ajouter '{0}' à la liste nom/etc + Correction automatique seulement si la casse diffère + Texte de l'image + Vérification d'orthographe terminée + Vérification d'orthographe interrompue + + + Partitionner sous-titres + Entrer la durée de la 1ère partie de la vidéo ou + cliquer pour selectionner la vidéo: + &Couper + &Fait + Rien à partitionner! + Sauver partie 1 sous... + Sauver partie 2 sous... + Partie1 + Partie2 + Impossible de sauver {0} + + + Nouvelle numérotation... + Démarrer à partir de : + Oups, veuillez entrer un nombre + + + Synchronisation par points + Poser au moins deux points de synchro pour esquisser la synchro + Poser point de synchro + Enlever point de synchro + Points de synchro : {0} + La synchronization par points nécessite au moins 2 points de synchro + + + Type de sous-titre inconnu + Si vous voulez que cela soit corrigé, veuillez envoyer un email à mailto:niksedk@gmail.com avec une copie de ce sous-titre. + + + Synchronisation visuelle + Scène initiale + Scène finale + Synchroniser + < ½ sec + < 3 sec + Lire {0} s puis retour + Rechercher texte + Aller sous-position + Conserver les modifications ? + Les sous-titres ont été changés dans 'Synchro visuelle'. + Synchronisation terminée ! + La scène de début doit venir avant la scène finale ! + <ctrl+flèche gauche/droite> pour avancer/reculer de100 ms + + + Edite image compare base de données + Choisir les caractère(s) + Fichiers de comparaison des images + Image comparée courante + Texte associé à l'image + Est &italique + &Mise à jour + &Effacer + Image taille double + Fichier image introuvable + Image + + + Import/OCR VobSub (sub/idx) sous-titres + Import/OCR BluRay (.sup) sous-titres + Méthode OCR + OCR par Microsoft Office Document Imaging (MODI). Nécessite MS Office + OCR par Tesseract + Langue + OCR par comparaison d'images + Base d'images + Nb de pixels dans l'espace + Nouveau + Editer + Lancer OCR + Stop + Lancer OCR à partir du sous-titre No: + Chargement des images VobSub... + Image sous-titre + Texte sous-titre + Impossible de créer le «dossier de la base de caractères ': {0} + Image sous-titre {0} sur {1} + Palette image + Utiliser couleurs personnalisées + Transparent + Demander pour les mots inconnus + Tenter de deviner mots inconnus + Coupure auto de paragraphe de plus de deux lignes + Tous les correctifs + Suppositions utilisées + Mots inconnus + Correction auto OCR /vérification orthographe + Correction des erreurs OCR + Sauver sous-titre image sous... + Tenter MS MODI OCR pour mots inconnus + Dictionnaire : {0} + De droite à gauche + Montrer uniquement les sous-titres forcés + Utiliser les codes de temps du fichier .idx + + + VobSub - Image vers texte manuel + Réduire sélection + Agrandir sélection + Image sous-titre + Caractère(s) + Caractère(s) comme texte + &Italique + Inte&rrompre + + + Nouveau dossier + Nom du dossier de la base des caractères + + + Cliquer pour ajouter une forme sonore + secondes + Agrandissement + Rétrécissement + Ajouter le texte ici + Supprimer texte + Couper + Couper au curseur + Fusionner avec le précédent + Fusionner avec le suivant + Lire sélection +
\ No newline at end of file diff --git a/src/Resources/fr-FR.xml.zip b/src/Resources/fr-FR.xml.zip index 66272e31f1c799616f22ed27ff00dbe39345826c..cc2cf2fbce8bc845b9d97227658cfd146cff3251 100644 GIT binary patch literal 20587 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

GN!(p$h2nMfMK* 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 Kq^N+40s#Q@G$sxJ literal 20423 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 CL%NXw diff --git a/src/Resources/pl-PL.xml b/src/Resources/pl-PL.xml index 6c0c855af..adbc440f1 100644 --- a/src/Resources/pl-PL.xml +++ b/src/Resources/pl-PL.xml @@ -371,6 +371,7 @@ Email: mailto:nikse.dk@gmail.com Po&równaj... Importuj/OCR napisy z VOB/IFO (DVD)... Importuj/OCR napisy z VobSub (sub/idx)... + Importuj/OCR napisy z BluRay (.sup)... Importuj napisy z pliku Matroska... Importuj napisy z ręcznym wyborem kodowania... Importuj tekst... @@ -671,7 +672,10 @@ Kontynuować? Błędny nagłówek pliku VobSub: {0} Otwórz napisy VobSub (sub/idx)... Pliki napisów VobSub + Otwórz napisy BluRay (.sup)... + Pliki napisów BluRay (.sup) Przed importowaniem napisów VobSub + Przed importowaniem napisów BluRay (.sup) Przed wybraniem wcześniejszego/późniejszego ukazywania się linii Wykonanie na wybranych liniach wcześniejszego/późniejszego ukazywania się Podwójne wyrazy via regex {0} @@ -973,6 +977,7 @@ Kontynuować? Import/OCR napisów VobSub (sub/idx) + Import/OCR napisów BluRay (.sup) Metody OCR OCR za pomocą MS MODI. Wymagany MS Office OCR przy użyciu Tesseract diff --git a/src/Resources/pl-PL.xml.zip b/src/Resources/pl-PL.xml.zip index c97d6e284ce695172ff184274277ef780563abea..2baef6d8381aaf9a05246dca321ed1ce1e43ffbf 100644 GIT binary patch delta 12567 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 delta 12466 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 diff --git a/src/Resources/ro-RO.xml b/src/Resources/ro-RO.xml index 4fdcaac05..edaaa62e5 100644 --- a/src/Resources/ro-RO.xml +++ b/src/Resources/ro-RO.xml @@ -368,6 +368,7 @@ E-mail: nikse.dk @gmail.com &Compara... Import/subtitrarea OCR din vob/IFO (DVD) ... Import/OCR VobSub (sub/idx) subtitrarea... + Import/OCR BluRay (,sup) subtitrarea... Import subtitrare din fisier Matroska... Import subtitrare cu alegerea manuala a codarii... Import text simplu... @@ -668,7 +669,10 @@ E-mail: nikse.dk @gmail.com Antetul nu este valabil pentru fisier VobSubr: {0} Deschide subtitrare VobSub (sub/idx)... Fisier subtitrare VobSub + Deschide subtitrare BluRay (.sup)... + Fisier subtitrare BluRay Inainte de a importa subtitrare VobSub + Inainte de a importa subtitrare BluRay (.sup) Inainte de a arata liniile selectate mai devreme/tarziu Arata mai devreme/tarziu efectuate pe liniile selectate Cuvinte dublate via regex {0} @@ -970,6 +974,7 @@ E-mail: nikse.dk @gmail.com Import subtitrare /OCR VobSub (sub/idx) + Import subtitrare /OCR BluRay (.sup) OCR metoda OCR, prin intermediul Microsoft Office Document Imaging (MODI). Necesita MS Office OCR prin Tesseract diff --git a/src/Resources/ro-RO.xml.zip b/src/Resources/ro-RO.xml.zip index 3cb8f1ab9a29353e76c888747e87682b45033fd7..4c4ae082ce4d15ee8ad27f57677bdacbd0b5d301 100644 GIT binary patch delta 11713 zcmV;yEk4qMoB{Ei0kA?Ge|b`_UuD-6Eiw0aUC0;d)`*rmhv0`V_h6e|F~%=4O8+%) zGp`#DD3eJog=y*aGYDv~OX#RCGSZ|a`F~AL%QRDxD=`$Eu1W1?a431Pm|r2+gxF?A zs;Y<}F$lVc3=6Gx=$TCqre|*a_b8W2FyT4N%k&5GQZreh@!z*Ce?1_l@5o^~Vc6eA^%Kgcd_k&Lx9 zk#tF!R|=I#zjt5g!1}T-E=WL2vCdeNA+ZO!$or}EJ2DwWf>PZs=xc==yzBw~HmRTx zaKq-N3;6NfUQ2&Ef0hj;6TVs&pz-T#WCD-)GZt@24U(J1U(=LCT6@5r(E_ljmd`Vp z7XGBuf^Cm95Z$+C`y?KLZ4jtmTC2yYzqq8W3P}PEaYnuylz_$ z4BSN{4C+UUk=W?FGStYcjx7U5q)?+O1GW}MBq9@gEr`itf4q4-qXmLi*YTcWDGI5p zV|>U{#(2(niAqE}{z5P(Vd6n;gUxs5^eKg%)q+-28DcC`p|ChLB*TXNL0rWjfnWp& zD1v4>1CiFjw8I}`AEc_koo8r6Iw7NpoE^FJI;$NO$yrWLM*+%lW?=mT?q(w(-#Ajz z>>@wOkas$Ie@zCK0&h{7x+ZhiF1U!z^xOB~Jgc)s{tCg6f=bWvNs5{AUU$uWHon=H z78Z{B&jNzlF4hZg!B;)dmt^uUXlXRBVoppZrudYf8oA|nf)(n?3`;D%pcHZtZa>^`JUypy1 ztc(d?e`JK*oYq~Hu$v|4U5U`J2e3`uHynv0BYgb&dO4lfv?~3Bo)r^nlI%|9`>10lwvbY? z&|nQEzAj2OA)J|m<0%>Ot&APMMFxlTvd$OzUD9JeDAsp8i)x{G@PD#s$Y}C4@EUrrzpQAQ_`{b7q}jXhAn=>6jYp~hvT$;tn+o)(g|D|Y&ljPVeY2BX zGn5x7k*I`}IG-+nvPg?l~L3!IDBSNW`H=5MN}*^+*mZioR8 zn>A~S>^YZ{&ax$b^SfUbZ<~BPd)w(fe+JggOPu_V!xW!4ADR}7sfL{Med?UiUnG2@ z2h0~<=~ zL6wgj62U9%CqK!8JOdMiCYEBBf>XvreTr~P1!eMH9a`*ZMntU@R{H-(p=;i1qs3w zi;!gwpPLiCSX$&iy#^A)KFJAbjv(5_lJ?y+J4Vl9!t)&;6iM0$u0+!1r|! z{@MgSlw5lxKZt3=k8N`#sBK#P1etga%)Ae6Q^Z9-No!|h_J2@Fe+2dTuKmy{o!8&H~j;E34ZFW*L+8EX;|KI&a#T15egBEw z=E(bgm+VjelBALok;=b?mzW_ljOHAyaM)U=6sKS{2hQCM00W|u&=ST%)tY_>Z+V|b z+J3q8Tc@-}voted8$@0^sn*LDrWvs{jJN_I5L=`$?)VU-e{BE+^Fzs3iCJ~UbFH}A z@1k!Qe9b$Gapzqh>8CkS3L1%Cq4dbvl8q4b_?BDJ?=-S62MaCuCs>M!F2jVPlG0xs z9Pvjnae3WV8e-u$q|qxcTEaBz?AsOVOc{otdEbWe$8ALjp-*E{XgCNEO**2>R5F9~ z(etd~#XHyqf0}1%onpa-0)<%y>h~M=Vf@~lVR@cYQ177p;+FS6TYkCB zWu`j3fL!-B=@XvT4omoN4S@Z<&GdJnGLp(HU8wdYZ$b-7CS9*+D1KAS>xz~r$Zg5k zQv=B<%<{XcRyCyW1_-t%2~;R(Hg@T_W%c*6LQG4keUwwgd8DL!HNA2sYQuISUA2@Wm8Gf6Z6iCtTqvvtZ>0P3-?9db+EH_lONH) z(7f`8{mx&gGw2>KXVS_p^wG#y{3RAc*-y{HHNM`fo@Q@(fs1*Y{@`!|+8U$cL14)a zljk?|e_uac&hQz5Mvp9u29CThW{@-t;YN!#(*h{>)>Pw=A{|-i4Z|=-)@$Iu)EJxz z>X+x|P2PTa{)&P`2c^vz4lVyR@aW0UZ1{_sTEP?81jOr!9J@K@^~+_6sPKd&0G!AR ze-(cQP@PuZJO}P|&pGco;N4fxTImw8uY6)&e>n@#WTAeNP2ax8f*k8|{NHMUUW@L# z=-cqFZmP`WT ze_>!TZR=9eC`rTLB?~%lg(U8Mr)Jo_`q>|l>&JF23W!}|Qp4csv!zLb{oY4Ldy(uz znaheWv_Ua~z2FpDD><}BupW=^ZieR>?<=sqrl8v2ThfgVqzFM-fn@N7O8zU$M&k_D%e_`kMklbni?HK6aI}THj?n1IS<5O#MG;P~) zk#(UgY^bllu=@LXmCXpV7X>NL%6}hLmm*5ID!tYU<-HOO+x>|2rc8s^L4SEGmM`|R z@yd^0GTCE6e_6=^>b=oJ<7HlhQ}fxEoq#<$@w;>W>v6*hwS-}|h2o{=)C-w@;O?tC#h zdS=$PIg5%6*8)&yIdNFJyOVzLM5R9dy23Vo-SP7JD!V??Kf(Cq5Kq^O-$SBXuSviQ z;NCCKDWI`@piIt~_*zF>>f6Hge`cV+Hf<_`-}q7nZlwq>-+*sKe;zk zwvDHjVuZq=prKR~cba*fez~NC+}kf$6XvFCOwI~P;buCrTCx=kIxi@we=jfdnzOm) z3p6E~uj-5giS*pi2Z4$O$y#^!m!!XVkN$t}m%!t(4JCrKljY&WZ|&0?_o1)jT`OK+ zEwc%^T9vPre{Yt$rkGID9eRPi{!9qwy7xqpNf?I|ushZUJzgi1XxQ7W8tO{o+FwaD zmb_ZhP!M0j?s$Nv{6#|{e}S>Au@{`k;=_D~&rbABW8PR?-Pb|)NOx<7+wYv#**I

e-k3&Yi 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 oK3gNm4V&nDNLx8k + Subtitle Edit @@ -370,6 +370,7 @@ C# изворни кôд се налази на интернет страниц &Упореди... Увези/препознај знакове титла из VOB/IFO датотеке (ДВД)... Увези/препознај знакове VobSub титла... + Увези/препознај знакове BluRay титла... Увези титл из матрошка датотеке... Увези титл с ручно изабраним кодним распоредом... Увези чист текст... @@ -599,8 +600,7 @@ C# изворни кôд се налази на интернет страниц Качење титла Отвори титл за качење... Визуелна синхронизација — качење другог дела титла - - + Додај овај синхронизовани титлове? Пре качења Прикачено титлова: {0} Титл није прикачен! @@ -671,7 +671,10 @@ C# изворни кôд се налази на интернет страниц Заглавље није исправна VobSub датотека: {0} Отварање VobSub титла... VobSub титлови + Отварање BluRay (.sup) титла... + BluRay титлови Пре увоза VobSub титла + Пре увоза BluRay титла Пре приказивања изабране линије раније/касније Прикажи изабране линије раније или касније Дупле речи путем регекса {0} @@ -694,10 +697,8 @@ C# изворни кôд се налази на интернет страниц Измењено броја линија с минималним временом приказа између пасуса: {0} Пре увоза чистог текста Текст је увезен - - - - + Пре тачка синхронизације + Тачка синхронизације урадити Пре увоза временских одредница Временске одреднице су увезене из {0}: {1} Пре постављања титла у положај видео записа @@ -975,6 +976,7 @@ C# изворни кôд се налази на интернет страниц Увожење/препознавање знакова VobSub титла + Увожење/препознавање знакова BluRay титла Метода препознавања знакова Препознавање знакова путем Microsoft Office Document Imaging (MODI). Захтева MS Office Препознавање знакова путем хиперкоцке diff --git a/src/Resources/sr-Cyrl-CS.xml.zip b/src/Resources/sr-Cyrl-CS.xml.zip index 7c81b5bcc22efb2e1265921a891e770095002e17..78b4b963285cb06fcdc2cae112253f64feabe6f5 100644 GIT binary patch delta 13640 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

AFrfc=O%d?Z=b<3y z!C5rgct{@KLYpS=3_WDQ`wu?<1!4Y_U)~AA`}ZH`+5YUR^wnnL@HRi-duA5xJ9WC8 zE9egHv)3ipiTr+e8I)%Gtm;c|FIemK)jU#KyFJt#SPc)gLORYwGPLZ7{Do|E*Pf$| zvWcI?IX z1j6@i4UnS?vPZGDi@5Ee%4|mGCM#$-lf?e3_@E5h6IDnjZcqaYf}_(FTOZy{W&k$5 zpQN{EzeBcHD0z>D%%iFeu+OOZ2its1-}GKLZA(Ys!_`UipzVLfc8xb)`-?Mf0RA@E zcE;~-_e$nHOnuiB7U4Y7N#DbEU>(D!nlpymQINtTaP~zABc@7B0mk#X3H8-7ncRw) zG!Dwx-yl7$(W|RBT_ye<#}EX(1_@7xxl- zumnFK4&vf&!{N-ZX^n|kN9(UwjHb-1QY`=vTr^t%uU}x z8?S%IrE~HrDs3mmb}-zDz0mC-8kMika=i+D*ejZ3p}p}lO@_CvR1&*y`4bfEFfWd# zB~TOT-fT&YU;})*16wSv``_9B!rc_!$k#mOP`#Sayr5KXwTRf%QX0>0Ka}knHq4i9 zzO**AN`g!H%>~j4OhN!PF*j1i`8n;@`enZD#f&Q!&l~36in)_Xhh)q%$d{2TwO`gq3JRS{=oag5 zIJS3Eo{-y45S_LA*E*bL$cxFTeZ`Mx?C!6{KR3G$a9>jlr@~s6qpSYup7mwF%YLxp z5i%RADrJ6e24t$I!Ls7NJcYsAqaHfoVlNi_axKtSD9?sjn&M_=oqskB!qnM3Yx;P3 zyESKwutIpPw~fM>ZT95Gs`8AjW8L+m`!(E2?*sX$S~CNd_Nz5Ldr|;Fu7upMIk}1xWB1PmgHW?ieQ}#ImeSh zjye|nSkaGq{;{5h=XAZ0A-TjJ%IO32WYxHTxtS*(cBd+n&`Eb_~xb<^E-JF@n8+soI1-BHf6U(A%^) z`se!xbY!18g(edG$OX?qkexz_mi!n1fDHb^av~LR_aUyRxxj^FI+KrU{dB(7e|^8L z19F6kpx3Qe!E1p_WvK%d{g{t&fS&ji4KPi`Nl6_>%%xg5DrYKu){v;aQC!ALI>Pkl@b+{HFo+}6YR83jp7D!nfhMf$!g0%=a9 zE<{0^-G~-|eW(-mKdYypSo;mEXpU>iS&_wKaQD&XnMiY|Q2Jk3LSLNL7)09wCEmz=pA7zaJZsUPUVR{%^ZScCsUTh93k83VqbI-H$9dG#I09Dc_h|uXa^tg{ z2yZ5VfGzMoHE*E4j+PZEC=LP zO0HvIlR)Ze#-2evP=gHz$*;NN#FoDCQhnUCtrNhr{R@f7LZQm<{`lPUJ%?5910C<{ z^o80jGk1*s`Yw16F#T?y&sX}oL*Nks)|%Za`vX@~y!cz- z4}IL`SL1zqjQS^&`y6r-ant8)z|5f(Udp6|e_$!G!+#G2Qmy}eohZFc#HwH-cOLvl zg1oG-fJ}Uae5Abch2Tfk(aneUj;#l%WWuja7!l}oAIb`0+A=4;P^nNkQ+q4JwgHyq zk3+xPWUR;*I$i3nMd4Sl?k|TY3oe}_S1R$QWjO2`PrH-VPJSbt)r5r|&%>_45pM;l zFvNQpH8br19SEUqJC*{1r=Bx*5risY*XbGh4Px$4d0=Tpz45B)ha-A+k!*Y)QKYbI zn?^L*Sur;Sv%iE}8MLRSR~j(wo}4^v2X)NVk4bFCY@tC#~S? zsnC$3=3I|oUH^SOmL6bSTIn=A2*>E-Dn1!w27J){Bu(2pc zq876PLkFX?Ukc66&wMRP2r;k2WA`J>gl$Yal2f-;`NSMi!8F68ExtHHeJB_|IF5pb zf=e*;+ep1S5*>3#Y#)J;)qI9*IeqdSHW>t9X|%j5J0??Kw+xG$H1L0Qe9e$6R>R4k zqWgdbiYeJnTLTmg5KB5UkCgk)kkW_n^z_*TR{LWUY^N~Y>!Smy zkgf8yV)UXbt7gF?T}O6uQesh2%ZhaVfsA;V5g4}T5YCy6tKLN$9B>ui#?Wwqpr?u1 z5c#;Y#U!BaE%1Of7mqR@@v3M^Bw?`l;O#kdcOT?)p%&&}YpQ{kyG7reBi&li9&6UiOXrKj76yo8withtQ=4BQgL%3P&;{&EiBpio z86(kJ5o*od|Mel9BzYa7fe9)NF+qhT04Xb#-#`>rkDk%zz;A~p_=J0sho4ULme@Gm zYYlGi17@7Wn8m9Nk?YH3e%h?dHIVlWit7sq=|Jp?Xa#sD5WT)kH}d$bnl`1Fw5spL{O{XTy|LBaMMGNqFK$y@>#Qh;@#5;XDOWR*u-*qkX%w>8T%_#%y)dI>VRXGA&AcxmR3iZEp%EDkY}e zHhm6#-|6nt-(x+0qd>iZ^&$Zm54Gn)ndHPz7aOk9>@AIxGnk{XBYh5Hd3@3%mFYce SNuvZK<@mcDrX@sBQT_)SAbW=Z delta 13502 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 iR=jcZpMlJ(IZcC`ho;}!) + Subtitle Edit @@ -370,6 +370,7 @@ E-pošta: mailto:nikse.dk@gmail.com &Uporedi... Uvezi/prepoznaj znakove titla iz VOB/IFO datoteke (DVD)... Uvezi/prepoznaj znakove VobSub titla... + Uvezi/prepoznaj znakove BluRay (.sup) titla... Uvezi titl iz matroška datoteke... Uvezi titl s ručno izabranim kodnim rasporedom... Uvezi čist tekst... @@ -599,8 +600,7 @@ koji bi trebalo da je već sinhronizovan s video zapisom. Kačenje titla Otvori titl za kačenje... Vizuelna sinhronizacija — kačenje drugog dela titla - - + Додај овај синхронизовани титлове? Pre kačenja Prikačeno titlova: {0} Titl nije prikačen! @@ -671,7 +671,10 @@ koji bi trebalo da je već sinhronizovan s video zapisom. Zaglavlje nije ispravna VobSub datoteka: {0} Otvaranje VobSub titla... VobSub titlovi + Otvaranje BluRay titla... + BluRay (.sup) titlovi Pre uvoza VobSub titla + Pre uvoza BluRay titla Pre prikazivanja izabrane linije ranije/kasnije Prikaži izabrane linije ranije ili kasnije Duple reči putem regeksa {0} @@ -694,10 +697,8 @@ koji bi trebalo da je već sinhronizovan s video zapisom. Izmenjeno broja linija s minimalnim vremenom prikaza između pasusa: {0} Pre uvoza čistog teksta Tekst je uvezen - - - - + Пре тачка синхронизације + Тачка синхронизације урадити Pre uvoza vremenskih odrednica Vremenske odrednice su uvezene iz {0}: {1} Pre postavljanja titla u položaj video zapisa @@ -975,6 +976,7 @@ koji bi trebalo da je već sinhronizovan s video zapisom. Uvoženje/prepoznavanje znakova VobSub titla + Uvoženje/prepoznavanje znakova BluRay titla Metoda prepoznavanja znakova Prepoznavanje znakova putem Microsoft Office Document Imaging (MODI). Zahteva MS Office Prepoznavanje znakova putem hiperkocke diff --git a/src/Resources/sr-Latn-CS.xml.zip b/src/Resources/sr-Latn-CS.xml.zip index 596e57ee0e64603181d8098420c5a88aaba845de..e2bd25ff1f762f822a0d9933059b38739a054caa 100644 GIT binary patch delta 11942 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 delta 11716 zcmV;#Ej!ZGo&n{Y0kEeWe-HBwkoY2_)L!#8^A$RMhjA?M)j$3hQ^agW;&n3!W3V^q zmoKs^GVi0r>85S_< zknNmjy?U0>e~og3Q|KXmSC%Cjc-LgV3BjpP8`s(cbo#DPWpwrff3p6M@A3y$s_zEG zdyHVDFXUgrS12yUq3ww{*^{fUmb2>Hu;2AHGMaBQ$$`?}WYowScH4Ab|FSMFXq~iV zD%kfc{d8%KYOk#a=i8K^4ZeGwy`|nGPaBa%lNdT^f6e*&*+ElEVPC0PcNhreIQh^2`rqlVNuTta!lvl#r+tDIJ$rm93F z69!c%AA0S+SeI=<;d0RaCuy;p*752!3D*zsu1IjVtp^5PoMCr$?_M%Dz=>p-EI{lG z0#u~EW&fK`RFj*$e2@!9e0r`JuZ%WzNEwd919f5zl4Uy$rk_KV_t;!{Q@ z{zfnZVW=;1qG?MC6_B;${GIBcSZY8)ah^p+4CRmD9ZhXzRJ(LBw$WJolY`|}vL0x2II&@Vk6W2`ak>9unddj2^`Eme|fI6It1Vv`h0n_(<(d}byWofwOXtf-h!;Uc`vgXS;-Y;%wJ?bE%_K( z^4E1->otmhBpuxXnm^Bk(Ua?=*OxWCYEg;$na|2JA;;xvPWb}LA!lWIO?-Whzp$c< z^_WPD&ik*4`X&3wUu5rq;`4lY(atfnOVSTWIFOb!f1!hVj6*MVV85Z9TB%=s^>)2l zT4(~s|Gx98$)L%!Ji*jU>>_W5U;BhZFl3zrc-N&^UlESrTVLvFC2l!$?_nazgt|97 z4V<; zeD}Vwap5~Ur?FmO)Fkm8EYudf5-e#twUvG=-z0UCPA17`5`1EZqWM~WpO(SjR4+(1 zHK*f_hf%juj3M?PiO?g&9i zR`vU-h)>+&QLYkNiG0B3ZJEuG&CJvj6gqdBc>sR0XvjGQBF6szV4asF>`l-$L-E>r z5MEZrvgHroU`?s>rl!$s8;>9ZgXhS*n<4XP@K9j4CG%Zigr>fxBLyyhoC{@X+% z8Jr-=qN~FYv~p;7@q7I3yj(?;R<)@9f3ZI@f-N^!Or=Q|!108#Pnv`X;xRHoLV{*Z%mN@~5VGgS?}8L%s>7jGQfX!PNEgzZTb<(3-aS z%=gkYJK{3Jk(OOJ$dTY1MOy$h0-;*Sz+w%D;K*QlV06HdroM>Mv}fhfmy-g?9uidf z+iO8Nio7ndYC+VwTu+HS?jv8Te^q5wA3dqmcFLc=K+@#HRUl`b+=%oXSwV>)%@@7~ zBGvqam~}br(9&C6SgY;tOo7<{q4xt7U=r?6>O6bfu(1dlYmA9p*Cj6tn_Spj{d+Io z+yuwh&DX2^3hSly>G?S|IXXS3EHT+hQVm%1TClN~LG;>saDFd}#HzQse}18Vr8xuR zm%|1f!4A+n&1f$3`gsP{aG9!*swswzwJwTK-a?0%2!129s5T90GoV`Iq#gp|_0w7W z3)?x@q0cfKU-VfsmO&xy+3l&Deu@XOu5g z8AXB1pVs7z`_RLB!XJEI)wY@W%uH2hdL-r0pEGaup92QZhj)!m2r~Wsy1gXb#xan7 z;xK1vlBm$cN&1;^4gcnTfF#XC!&;3Ppb8@m6Viw zFZ17%7Qw5SpJKVr{a$6s-0#-5ioP4-Jp8tg_S2k52Ng7}mXrqhy~q|~?Ur;WEoJ-5 z*qw$JK(K^i{&1@t(G`xK)NtH0AUdzxN@J&=%GMYX7y+L-e`ti6GKDmJrChWAY2_#) zfZr$-%kCO^S2hiE8K@QKTP5evQ`sg`PABhn1;4JIVE5s34Sb^-W)-A_Co%VfD zzc(jTp63YpLtwP74loFHa)dBtXMHYen%!?k>n z!?(Txob6UZ6bhM*tvYU5ZBk@dxCNfC7MwX>!a%T!A|Gl+PWM0l4TLC+4=`X4UFY)`?bGnW{^H! z&h)LSHA5wDVA!!voZ&NqjV@)) z(g*Z|?6RhnMaq+=oE6jcLAR0_hY{(*!u^4$Ccq64H0}I%8-p|f|ML92$=ff_Uy(}~ z8?B&7fAjx#$#!k{Wv_>yr8_bISP7@@DCJ8ymkXfFW+y&jQL0 zuqjsJkMC{<<=N&dFt8?% zf7;(0X-%{E3=2RpOTMH|7-p}rfYAx>dc;Uws#E`_`fACVYi81$t#ST;56N-%8^)mg z-o4k=^mU8mfSzI|S0Gs5Uaz94$jl2yyWF22GdIC4v! zmI~p0Qv?6WAM~g7^KP3{1707J55Gl5f7ef(E6aK5UU1o^0LeQmK!&S&$zczRmw8Q1 z7WwSUZUFxSwi`=0Kc<5o1(q&9;^KK9_d)Q(hzydOQx}RwSC=^gstOz>Uolq@Hx9m{AQ5-}-e=A8jB=Ru8)Dntoi8RwPi3uHNW|;@f7LAA z-ATWAqEa1yO<@|p>v(y6m0cg5t$1mZtzujJ9ul&8-v>$VDBK3%NZ>o03DD&G5)=lKEshJ@T@PR2WZOUWY|3X3cw z6nWnx>sb?ge;X1^0o~kCgiuEXiB;^Zb_oX@l2;9Zyi%Fuo~n_4 z(+&)BvCMbE&gzsYyx-M<@LO6-|20<&9)D3x>#C{FTlbCqD0n~8Fd$k8pVRq7zYvjX zY6;nI9y9m0uNfu(0>cjr0;rS_Uv|9!@2w7zy>G0_P#})J{nza$udi~-e^bogR8L6( zG;<7*UM`GINdNJ_nEq_us_d*usF(DYx3*&FZDvJjoMU%} zACY{$DBd>t)3;x+cXY{qjF9GSm0n$4jhFa-JbQb0(Xtj8dOP5V4gy`)SlOOPFPQO= z0&rBj5lnY1)e^S3^8&dRf2)!r)?jF{4rNtZvbmK%$jxAHg~YS0z>36;C@^cUn^j)k zjDf-oX#Ul5Rxx#}RrQ0ym^JHO@YnhRes_85FR49p5+m#s*V#q>g5onovf>Vs3@tOj`04xyf28?Tc}8Ec!;lzA zf(O&&2zp)OK)~_n>c>r;cgzsk-~00Xq^fIHD&MW@S#$IR!IE=Y$rYz?>W?o>&>erN z1M>CTf;6`ekfeY(02+P(VDL&D!ybM&AQy$jA0E$UNE$sYrr^1(z80tqi&8z5p(Ds^ z{+m=n2l@bnPCuBue{UD98Gc0pVP+?~*U0E^nz-_0o=@LmVkrlT=qkIc$diJX`sF)AMsOL<}-N&)?EKLZ2e|US$9HUtC~p1Fr-Ce=k}qG3uA06gHj_)6n;dhX@0n8omTek_V_2^aQU!*Z_1KX0z#dP ztUnmH1QCUx@R6=2!Uf}fMbrL|{qabT6|jI&e?p~SRAsTKM!c{~o&9tx#EZd;%rRW( zppDM*56lb~KZx`i&UX)naTt`4(u$UCczt}iEU(D`ao1l!94J?{o>20J>{OF2pzmi( ze*`bG=q~{Mmx5{VbNx;i8i)F)GqXbQkNwH&1%=wN|GFn`$IGU$V)&&MH=bB4VL_u1 zHTKX>GVl>&1>?myknzBpPs(JY-x?%!!j&Fotoaa&3r8?{6@%9SLexPnU=lkKh^We;S{ZBieAJPoxb1km(;QI>yZ1xVaVU~|g zVg?XG4PE`N>DelK3!Q=7&renpVqPn3M0-)PxOFsne+au1 zcLxwWnUl{u22LS`g6Fl=_uVJWk@pJm$m6^IcX3Zu15GenBfYnQ%nxm5`o9ZV6_a%No8S z$foS%w=hItGxy{gi*Z<;Mo77;OwQbX8FX>HZmTDxFqYFiTzo{Y8GT8XRkCUgt+&yN zcQAFN!b7t%2+nvznv>uUy~dQn|4KSQ)GshQX^hA#!AN9r3$31zZF}2ve^*nPx80f{ zEr&t#khU2b%S`|~L;7yf&UJy!zVmx`bog2q@CtCktXg!FK2Z?CD8E>jZ9!c1DyIeT zsYvW4eeZ81eWdq;I7#MbD8#08@OKZvmQr2j({z37N{qZ!N zOR^y2^q5u-;HIxHN%iPT!tv{qv$K>MW97ciD2gSH%0@J>i}j=+eH=W*ZIf(WLkX7nzffgyklUNlW&MKw_U?Ao&svz*Y3FnU9ps@=BDJScH8+7`z zDweHVu?`lzw6jf3V&6TjTr%tKO%0?A5b1;@PH^;wZv=n=yW|&=pd);Ql0)*=Ea`xrd8}3RiOW1|6c$!rG%SJuu>*nC3S=N4 zh8%CCFmpN5g=A)anpVmG0oLTm5&57DR&_Rg`+J+^f4|=csm7n82#E;5CUP50NB{B? zB1fV02l*!S>%CvXi?jW=4PAz*(NpXpjb4kf$a}^jAj}upJ7_Y}R)hq(_6<$!PYX$~ z*aI(7mEZai(CM}g!F*AaWzpo*YB_6EBRY7C0^hx*@UpOKRV|Q(90Snt+j!KCI&8)w zcAPWQe@0&gb>u6PZHEPrq_=(^*h<#AVkAW?8|!G*ao=3(l*D~bA^A^QS5^JX?qobG zDD<9Z?a@E}7a@<$Z2CtQL>>EuHdOGCC}J~$gd`fZ^FKFalU0i^$u0Whu@cj_lx(Yy=W$=HlwA? zH^=83LRU>mU&$XHbV)h?-o97|j*Z_&Uwg_6VzN|5iv(tc%=R~v6;MJGzv`#5(sc9- zv&HK0_#giV)^$;%g?_A!PL~;lwX>ry7uCfY*-|38`AnO<&a-+thm@1aYIvgamfQwJ zf8FjY<+2DrJ(eg5ya=;J*_4{hSXR`o3*oA-Ou(0`Z-GqMMM(y+!*>oK>FOEVqQ-xF zEqOHKphTPZKpFA<3SnO%FbpC-jE zGF)&h7QgI}d90Y-bcT^<2x`KSyH^w*lA~wm?8`M@tyXzGB`G|5jRZL<5W@AmnYVmADunic0o&fJ<` zkf!GaGLzGCu!&nhQw^ExMylJSyVIr@cVdx-z1_fn!2MFPDR`sTN@^88pn z4`2L8{(gP4+oJ#Cv#P$z>e-RLlK#RAf5#F901*Xkete~VlC()_JoOQcIIL3*BlPsy$M>Aa>z8t)rz{N3y_C*&4KZz$bO zD-vlnA$#}uuKnB~R8ijU=(wZ+2k7u$1_Z4vAdA_MBhN`sUWp(O_H)B7P4>FIM!@v? zI3=535+%$>R@kd|*BCc5&szvFKJbJVT|dd{C+oI_Gvt<9f8JJ{hghdHkd}TeL|i-V zjrPy4j$Txk(EIe8euz~stcq22AxmJkUm^xsan6jA?d3ncuZ|o0B`xbz(%{(k#j1L< z<{nVmKUp;EtOTpLWecbw?{kBO3-e!ULV(Z+V}Fm$kbL&IEBM$*NM5d}$)ftl{z#Gp z{9)BxGbOm$e=@Ju&C!I9M2ZO7Y9IMGo73i;sB)i@fg& z%WxjFfmaNPG~ED8qLKOYe0f2}AJKgNkNuI9Xjv1{f0ml|A|egG(E<64Jgp=A!qv$bI|)4aW_j3&kG<`R~=bp5{MEK8HnrO-7#diOX}Z72}|_ z!_ zf55(EtrB&3y1YP?D*nYHrzIG27#Hed=$A(KQZzSh!9+*ySJJZX<6gt3c{8nx6;D6% z5$zAgv$6zRUN>#NxVM*{XU()A{_^4YZ`r{wDcv)ZHoy0g{+a6E7-#T(^erFk7sZsa z#MOB_)-T7$>se7*$7(`8CdVY{_{Hg)f7JAc1<>>y>H2}5BdC9u{DkVN`68bcnfh${ zQOcjC@*(+I{f2`e{C>Xs#mf{TcA5X)gy53W-(?I~1htmi^UsRpfI`kfXvMR}2IQmW|R`LgzYb^7GUz(xvU!;G?((NF>52t_@rXgzd zT1v{b{Asdh`ErzI>F&-BzM&BLr@5hIGz)G@L-b&IGA%R3oOdF#*BpHg^;)QQWueCM zkj8i3Dj5vt5De|&gs4(2G)+p;(I2O}k*i z)*Vo;d-p=TPs(@G0*)etwJsVGW$}VH!$utlh+8jeB;dR;uV_J+{74Voe{Qo56iFi6 z_f2-V|8?g*3SG-tUY{;j?e)=F!wyIRxv>pMaEv-$JAlD^ahPYz^Xg~-QfAVJysW4G zUY2hC;@w9(Z-}?0%B*m8(yLni2cYR zL^(j@-$6al;`gGA0nLeF(>44m)+T~hr?n9V!j*=KoFoR{Rx%JxUV7j9?MrgOXV<6i zc(Ptm`xG%EVx*SVf6jkbeJ^O`y-qfS6Z!I{h7g+d&*WX(B$&M4TW7Cjar`~ZBwE}~ zvgNXBWqr(vFe{0zm$|5f*9IMIBlSQQu z+q^ZMcG~$Mz_^@wVKx$+Q&I}1Tl>BL(#x!At{`O3s~;50w-!hHx!?FHB_|4s$STS* znTGnAX-4kT@2$DYV@;L5T!W|Ir6ygy$|!YD=#SIio4ggkiM(XgFJj!+6z%6{%US-8 z=t90uOJYG;e&2uhkG`Ow zl$eGTVu8OAA9~;RUufP`Cehe^6^`8xkc?cXTh(lVwKIyWf3TqSyv3aWt_K7?xFn+d z3FqlFtIHyo$J`nC_JaNf8Z5)6jcH7)K<&fE!UfeXe^)(rIT;9D%^YJ-%Qc-_Z_yWSS7FA-YNDkZwpI z5$LjL&2mhrsh;MPzvbn7N&g3G%2U_7M_-XA0n;JtNozvnl6>P?PO-L^8p;ACzZ-$H zcLcLT!&v`d;lrcMoxm|}{-XfYf1aZg4Mvp+$ZO8RXLPjz`ny!01qtZWgbo{_-_dFurnGfo~#;vsNP@Gf4F_pzW>K@XGf%4@Qj zaqYb}W~^nNHMF!!zR~edW@RzcuMLCZbwn5ORyvwE>W|s4@mIzL={Gc2ls;;T<($kf zd7RUTS4nT_syBOygbDe*e_5T*Xhp0AfV=|$8Qo>ZYKz_f^<*8kz-pg?YI?~TJ@LPc zKg!V2*#A;rkWkxwtSf=$mG0NxVE6-yUNHEqH+pqq{f2#6j}wk0ZQjzdd5=EhzK2K? z8B7WB^4n!~wd`p#;kcXvZMKSPv@gio!5KQH7@4xQB`csTe20&NIz~(;-OI>gL!srdW}TIN7W_#vhk3c|(6T!|7Y%n}W~n+k zNqIP0dZ5&?%)I$ff7^XKE6T`m7qsNaF`_l@+B7c&flRIrWtdrSU z(0Y72L86cx1np!Ab9^HpD=aJHf0Ou~v~@|zo062x-C5qCo3fD5;8m=u-u+C`Z#U*KE2ETHP;p{)MbFoG+YCk45 z^_G3mV9qtuZ@_vHJKEco0QKw4EW&wxGzJUXi)^LAFehe;*}KSV|mv!3?fBqeMwD6{qfu z!bUJ2`8f6qZ7AtpX=d`q+njE3mP;ak!3TJC_ z*bzPySim)e^qTo^gRnL@DvIihVp>;Cb>605o}U-f zJbhYC*GPn=7%_Qe>DCutK0UiLPJc?>g)d%fQ|{FC5%l_obXg9e~+G!E;8?g-)Qp})tBcli+6e1oHegk zNT)s__gDNWQgeu7x(&>m`PI=2j*sx0ehAi*C|+XsK#zmFURG~wq=lmFq-xsZ!q;uJ zBKKm=ek#7MoF}VI+4=6%E<@4|Y-s`k)6`5*g$3*jVPGZ={7#VUB_nqJ;{Es zHY8TJ`*!eR!~4Cf^WVoGBD+cybV+Kc*V5<8ml-KZ(vti$WJ~jv87|ocYXr|?T1E34Nt?hHCAz)AvFl3Wlo3sMXsw1(rVzf3pTd7gwoKHXeYe{katQ@6GE56rrlt@W0W`?a zJvUnXAGI9Fm#dQs_ThLit=FLELi~u{vLfY@-pV=|LcrIw^oKByQnMI-_@%M8?^YQ_ zF!p0oP~?x+_O5{l{(7JXrGy~l} z{w|WERc)P-6B^^&Hx(^Y*l&I>nv|ucmu3|r5OT^&EF7oRq=ZWudC5$#lJ56rIGjO`ChPf+&Jämför... Importera/OCR textning från VOB/IFO (DVD) ... Importera/OCR VobSub (sub/idx) undertext... + Importera/OCR BluRay (.sup) undertext... Importera undertext från Matroska fil... Importera undertext med manuell valda kodningen... Importera enbart text... @@ -671,7 +672,10 @@ Rubrik inte giltigt VobSub fil: {0} Öppna VobSub (sub/idx) undertext... VobSub undertext filer + Öppna BluRay (.sup) undertext... + BluRay undertext filer Innan du importerar VobSub undertext + Innan du importerar BluRay undertext Före visa valda rader tidigare/senare Visa tidigare/senare utförs på utvalda rader Dubbel ord via regex {0} @@ -973,6 +977,7 @@ Import/OCR VobSub (sub/idx) undertext + Import/OCR BluRay (.sup) undertext OCR-metod OCR via Microsoft Office Document Imaging (MODI). Kräver MS Office OCR via Tesseract diff --git a/src/Resources/sv-SE.xml.zip b/src/Resources/sv-SE.xml.zip index eb75fc9dcc29d7da3a140056be4f0923e651d62c..9c5bfd19045ff2be02b27d10aaa3b73344a1f5c0 100644 GIT binary patch delta 12324 zcmV+^GIud-_jiI`i$KIFS}Yuv0?@eabbd%#V%808lk`Nzcf zVLuM463aA8jeWQQ(qNxZOJ8Kmbykv>N2@8P%PC0`nSof}(6^+7dAU~7aBr&_rZ8Vd zkQfBrLx#mPY9&3eo|*AqrPM!x&3*faWdcGhul=`eI}gO^yF%63fAJ+UuOwjnk<|@% z1L8eCoq1ncRq;v!oh+g#$Pit9wVYMoW_SPkh!bEKN8hrQkAN@Nh9tglbzT0c%&%u%+ zxb~}M0n)zaOx@9$e;Dbtd}#A`v8EoRXS8stn(iO{JKlou%Rt=mH`^F|Et+o0CP|sn_s}HMx2ed&gcN=_-|py3ITY@Bt0Wt8>UehWt^67kSAs zUBG4(HdJN6wZdgTnb&XI>x&4}9nXGx-L$$i_HLxFdSSDAE;ctZC+dT3|F7lHMIijO~^bcFkh=AmE zF09un_RnwCe|!5`oh|ZLh+vTXo)qPb{HnK?`Lgj|c8z=n-RuXe?-dr!2U0&P%7}l#u`+8kJ<8n36 zCV5*-DNw&=pOL)2tUTuro42hvkDX>6Ag_t+C41Ume`N1~>GOPf(asIDeEBvnB`v$D zbqDAh%FmS{pcWt5CGu{g&if`Ery++9YzYWT)_yCWh={JNPokk($H55O_*wuC-OPUD zEjfk&I_;bm3iZz8pCmJ20tp$Qs3CkDQ9^JedecerD#*Dsu zUkqCRop={8WRhl=bJqTk6J)%jg=IO#`v$5=P}st1%AUj*n;NP0IUcW_F(0%UfuBxnR%Gds7wFW@^ zw=amq5bzPm@uhXjWwR_0gWFGiHA9N{Nk$RJv_n;1c9`IsMiWjh+8KN)5O|Y+e?sf; zZyUA;L1Qn0KdG<%eB_gGAwdF2?31%0AqEBv+w~SLliDFAe`&qof+TJhBwl#EzR#{V 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 KkL^TU@c;lj_|jqk delta 12223 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 N{~sQ=eVfYf008qCe`^2$ diff --git a/src/SubtitleEdit.csproj b/src/SubtitleEdit.csproj index 63b50bc67..56e1f003f 100644 --- a/src/SubtitleEdit.csproj +++ b/src/SubtitleEdit.csproj @@ -369,6 +369,11 @@ VobSubOcrNewFolder.cs + + + + + @@ -436,6 +441,8 @@ + + @@ -670,7 +677,7 @@ Designer - +