diff --git a/Changelog.txt b/Changelog.txt index c5fc9add2..6e8601c80 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -12,7 +12,8 @@ * Waveform "Right-click + Ctrl" will toggle select of a subtitle * Waveform "Right-click + Shift" will select a range of subtitles * Add a few profiles for Amazon Prime - * Add new FCE rule: "Remove first dash in non-dialogs" + * Add new FCE rule: "Remove first dash in non-dialogs" + * Add "Video - Generate blank video" - thx OmrSi * IMPROVED: * Update Bulgarian translation - thx Калин * Update Chinese translation - thx nkh0472 diff --git a/LanguageMaster.xml b/LanguageMaster.xml index 066777f38..1413ebaca 100644 --- a/LanguageMaster.xml +++ b/LanguageMaster.xml @@ -761,6 +761,12 @@ Note: Do check free disk space. Fix continuation style: {0} Remove unnecessary leading dots + + Generate blank video file + Chekered image + Solid color + Duration in minutes + Need dictionaries? Subtitle Edit's spell check is based on the NHunspell engine which @@ -1162,6 +1168,7 @@ To use an API key go to "Options -> Settings -> Tools" to enter your Googl Set video offset... SMPTE timing (drop frame) Generate text from video... + Generate blank video... Import chapters from video Generate/import scene changes... Remove scene changes @@ -1233,7 +1240,7 @@ To use an API key go to "Options -> Settings -> Tools" to enter your Googl Size all columns to fit Set style Set actor - Set override tags + Set override tags etc. Sub Station Alpha styles... Advanced Sub Station Alpha styles... Timed Text - set region @@ -1298,6 +1305,7 @@ To use an API key go to "Options -> Settings -> Tools" to enter your Googl Adjust durations for selected lines... Apply duration limits for selected lines... Apply custom override tags... + Set resolution (PlayResX/PlayResY) Fix common errors in selected lines... Change casing for selected lines... Save selected lines as... diff --git a/src/ui/Forms/GenerateVideo.Designer.cs b/src/ui/Forms/GenerateVideo.Designer.cs index 188142ba1..7cafbcb0f 100644 --- a/src/ui/Forms/GenerateVideo.Designer.cs +++ b/src/ui/Forms/GenerateVideo.Designer.cs @@ -37,8 +37,8 @@ namespace Nikse.SubtitleEdit.Forms this.labelDuration = new System.Windows.Forms.Label(); this.numericUpDownWidth = new System.Windows.Forms.NumericUpDown(); this.numericUpDownHeight = new System.Windows.Forms.NumericUpDown(); - this.labelWidth = new System.Windows.Forms.Label(); - this.labelHeight = new System.Windows.Forms.Label(); + this.labelResolution = new System.Windows.Forms.Label(); + this.labelX = new System.Windows.Forms.Label(); this.groupBoxBackground = new System.Windows.Forms.GroupBox(); this.radioButtonColor = new System.Windows.Forms.RadioButton(); this.radioButtonCheckeredImage = new System.Windows.Forms.RadioButton(); @@ -56,7 +56,7 @@ namespace Nikse.SubtitleEdit.Forms this.panelColor.Location = new System.Drawing.Point(169, 81); this.panelColor.Name = "panelColor"; this.panelColor.Size = new System.Drawing.Size(21, 20); - this.panelColor.TabIndex = 19; + this.panelColor.TabIndex = 3; this.panelColor.MouseClick += new System.Windows.Forms.MouseEventHandler(this.panelColor_MouseClick); // // buttonColor @@ -64,7 +64,7 @@ namespace Nikse.SubtitleEdit.Forms this.buttonColor.Location = new System.Drawing.Point(42, 80); this.buttonColor.Name = "buttonColor"; this.buttonColor.Size = new System.Drawing.Size(121, 23); - this.buttonColor.TabIndex = 20; + this.buttonColor.TabIndex = 2; this.buttonColor.Text = "Color"; this.buttonColor.UseVisualStyleBackColor = true; this.buttonColor.Click += new System.EventHandler(this.buttonColor_Click); @@ -73,10 +73,10 @@ namespace Nikse.SubtitleEdit.Forms // this.buttonOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.buttonOK.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.buttonOK.Location = new System.Drawing.Point(451, 275); + this.buttonOK.Location = new System.Drawing.Point(451, 155); this.buttonOK.Name = "buttonOK"; this.buttonOK.Size = new System.Drawing.Size(121, 23); - this.buttonOK.TabIndex = 21; + this.buttonOK.TabIndex = 9; this.buttonOK.Text = "Generate"; this.buttonOK.UseVisualStyleBackColor = true; this.buttonOK.Click += new System.EventHandler(this.buttonOK_Click); @@ -86,10 +86,10 @@ namespace Nikse.SubtitleEdit.Forms this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.buttonCancel.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.buttonCancel.Location = new System.Drawing.Point(578, 275); + this.buttonCancel.Location = new System.Drawing.Point(578, 155); this.buttonCancel.Name = "buttonCancel"; this.buttonCancel.Size = new System.Drawing.Size(75, 23); - this.buttonCancel.TabIndex = 22; + this.buttonCancel.TabIndex = 10; this.buttonCancel.Text = "C&ancel"; this.buttonCancel.UseVisualStyleBackColor = true; this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); @@ -98,10 +98,10 @@ namespace Nikse.SubtitleEdit.Forms // this.progressBar1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.progressBar1.Location = new System.Drawing.Point(12, 275); + this.progressBar1.Location = new System.Drawing.Point(12, 155); this.progressBar1.Name = "progressBar1"; this.progressBar1.Size = new System.Drawing.Size(433, 23); - this.progressBar1.TabIndex = 23; + this.progressBar1.TabIndex = 8; this.progressBar1.Visible = false; // // labelDuration @@ -110,7 +110,7 @@ namespace Nikse.SubtitleEdit.Forms this.labelDuration.Location = new System.Drawing.Point(12, 29); this.labelDuration.Name = "labelDuration"; this.labelDuration.Size = new System.Drawing.Size(97, 13); - this.labelDuration.TabIndex = 24; + this.labelDuration.TabIndex = 0; this.labelDuration.Text = "Duration in minutes"; // // numericUpDownWidth @@ -127,8 +127,8 @@ namespace Nikse.SubtitleEdit.Forms 0, 0}); this.numericUpDownWidth.Name = "numericUpDownWidth"; - this.numericUpDownWidth.Size = new System.Drawing.Size(110, 20); - this.numericUpDownWidth.TabIndex = 25; + this.numericUpDownWidth.Size = new System.Drawing.Size(64, 20); + this.numericUpDownWidth.TabIndex = 3; this.numericUpDownWidth.Value = new decimal(new int[] { 1080, 0, @@ -137,7 +137,7 @@ namespace Nikse.SubtitleEdit.Forms // // numericUpDownHeight // - this.numericUpDownHeight.Location = new System.Drawing.Point(165, 82); + this.numericUpDownHeight.Location = new System.Drawing.Point(253, 56); this.numericUpDownHeight.Maximum = new decimal(new int[] { 50000, 0, @@ -149,31 +149,31 @@ namespace Nikse.SubtitleEdit.Forms 0, 0}); this.numericUpDownHeight.Name = "numericUpDownHeight"; - this.numericUpDownHeight.Size = new System.Drawing.Size(110, 20); - this.numericUpDownHeight.TabIndex = 26; + this.numericUpDownHeight.Size = new System.Drawing.Size(64, 20); + this.numericUpDownHeight.TabIndex = 5; this.numericUpDownHeight.Value = new decimal(new int[] { 720, 0, 0, 0}); // - // labelWidth + // labelResolution // - this.labelWidth.AutoSize = true; - this.labelWidth.Location = new System.Drawing.Point(12, 58); - this.labelWidth.Name = "labelWidth"; - this.labelWidth.Size = new System.Drawing.Size(35, 13); - this.labelWidth.TabIndex = 27; - this.labelWidth.Text = "Width"; + this.labelResolution.AutoSize = true; + this.labelResolution.Location = new System.Drawing.Point(12, 58); + this.labelResolution.Name = "labelResolution"; + this.labelResolution.Size = new System.Drawing.Size(57, 13); + this.labelResolution.TabIndex = 2; + this.labelResolution.Text = "Resolution"; // - // labelHeight + // labelX // - this.labelHeight.AutoSize = true; - this.labelHeight.Location = new System.Drawing.Point(12, 84); - this.labelHeight.Name = "labelHeight"; - this.labelHeight.Size = new System.Drawing.Size(38, 13); - this.labelHeight.TabIndex = 28; - this.labelHeight.Text = "Height"; + this.labelX.AutoSize = true; + this.labelX.Location = new System.Drawing.Point(235, 58); + this.labelX.Name = "labelX"; + this.labelX.Size = new System.Drawing.Size(12, 13); + this.labelX.TabIndex = 4; + this.labelX.Text = "x"; // // groupBoxBackground // @@ -181,10 +181,10 @@ namespace Nikse.SubtitleEdit.Forms this.groupBoxBackground.Controls.Add(this.radioButtonCheckeredImage); this.groupBoxBackground.Controls.Add(this.buttonColor); this.groupBoxBackground.Controls.Add(this.panelColor); - this.groupBoxBackground.Location = new System.Drawing.Point(15, 118); + this.groupBoxBackground.Location = new System.Drawing.Point(339, 12); this.groupBoxBackground.Name = "groupBoxBackground"; this.groupBoxBackground.Size = new System.Drawing.Size(314, 118); - this.groupBoxBackground.TabIndex = 29; + this.groupBoxBackground.TabIndex = 6; this.groupBoxBackground.TabStop = false; this.groupBoxBackground.Text = "Background"; // @@ -194,7 +194,7 @@ namespace Nikse.SubtitleEdit.Forms this.radioButtonColor.Location = new System.Drawing.Point(18, 57); this.radioButtonColor.Name = "radioButtonColor"; this.radioButtonColor.Size = new System.Drawing.Size(74, 17); - this.radioButtonColor.TabIndex = 22; + this.radioButtonColor.TabIndex = 1; this.radioButtonColor.Text = "Solid color"; this.radioButtonColor.UseVisualStyleBackColor = true; // @@ -205,7 +205,7 @@ namespace Nikse.SubtitleEdit.Forms this.radioButtonCheckeredImage.Location = new System.Drawing.Point(18, 34); this.radioButtonCheckeredImage.Name = "radioButtonCheckeredImage"; this.radioButtonCheckeredImage.Size = new System.Drawing.Size(108, 17); - this.radioButtonCheckeredImage.TabIndex = 21; + this.radioButtonCheckeredImage.TabIndex = 0; this.radioButtonCheckeredImage.TabStop = true; this.radioButtonCheckeredImage.Text = "Checkered image"; this.radioButtonCheckeredImage.UseVisualStyleBackColor = true; @@ -224,8 +224,8 @@ namespace Nikse.SubtitleEdit.Forms 0, 0}); this.numericUpDownDurationMinutes.Name = "numericUpDownDurationMinutes"; - this.numericUpDownDurationMinutes.Size = new System.Drawing.Size(110, 20); - this.numericUpDownDurationMinutes.TabIndex = 30; + this.numericUpDownDurationMinutes.Size = new System.Drawing.Size(64, 20); + this.numericUpDownDurationMinutes.TabIndex = 1; this.numericUpDownDurationMinutes.Value = new decimal(new int[] { 10, 0, @@ -234,23 +234,24 @@ namespace Nikse.SubtitleEdit.Forms // // labelPleaseWait // + this.labelPleaseWait.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); this.labelPleaseWait.AutoSize = true; - this.labelPleaseWait.Location = new System.Drawing.Point(12, 259); + this.labelPleaseWait.Location = new System.Drawing.Point(12, 135); this.labelPleaseWait.Name = "labelPleaseWait"; this.labelPleaseWait.Size = new System.Drawing.Size(70, 13); - this.labelPleaseWait.TabIndex = 31; + this.labelPleaseWait.TabIndex = 7; this.labelPleaseWait.Text = "Please wait..."; // // GenerateVideo // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(665, 310); + this.ClientSize = new System.Drawing.Size(665, 190); this.Controls.Add(this.labelPleaseWait); this.Controls.Add(this.numericUpDownDurationMinutes); this.Controls.Add(this.groupBoxBackground); - this.Controls.Add(this.labelHeight); - this.Controls.Add(this.labelWidth); + this.Controls.Add(this.labelX); + this.Controls.Add(this.labelResolution); this.Controls.Add(this.numericUpDownHeight); this.Controls.Add(this.numericUpDownWidth); this.Controls.Add(this.labelDuration); @@ -285,8 +286,8 @@ namespace Nikse.SubtitleEdit.Forms private System.Windows.Forms.Label labelDuration; private System.Windows.Forms.NumericUpDown numericUpDownWidth; private System.Windows.Forms.NumericUpDown numericUpDownHeight; - private System.Windows.Forms.Label labelWidth; - private System.Windows.Forms.Label labelHeight; + private System.Windows.Forms.Label labelResolution; + private System.Windows.Forms.Label labelX; private System.Windows.Forms.GroupBox groupBoxBackground; private System.Windows.Forms.RadioButton radioButtonColor; private System.Windows.Forms.RadioButton radioButtonCheckeredImage; diff --git a/src/ui/Forms/GenerateVideo.cs b/src/ui/Forms/GenerateVideo.cs index 8f22c7406..a070e06bf 100644 --- a/src/ui/Forms/GenerateVideo.cs +++ b/src/ui/Forms/GenerateVideo.cs @@ -1,6 +1,7 @@ using Nikse.SubtitleEdit.Core.Common; using Nikse.SubtitleEdit.Logic; using System; +using System.IO; using System.Windows.Forms; namespace Nikse.SubtitleEdit.Forms @@ -28,12 +29,23 @@ namespace Nikse.SubtitleEdit.Forms radioButtonColor.Checked = true; } - //Text = LanguageSettings.Current.AssaSetPosition.SetPosition; - //buttonOK.Text = LanguageSettings.Current.General.ge; + Text = LanguageSettings.Current.GenerateBlankVideo.Title; + radioButtonCheckeredImage.Text = LanguageSettings.Current.GenerateBlankVideo.CheckeredImage; + radioButtonColor.Text = LanguageSettings.Current.GenerateBlankVideo.SolidColor; + labelDuration.Text = LanguageSettings.Current.GenerateBlankVideo.DurationInMinutes; + buttonColor.Text = LanguageSettings.Current.Settings.ChooseColor; + buttonOK.Text = LanguageSettings.Current.Watermark.Generate; + labelResolution.Text = LanguageSettings.Current.ExportPngXml.VideoResolution; labelPleaseWait.Text = LanguageSettings.Current.General.PleaseWait; buttonCancel.Text = LanguageSettings.Current.General.Cancel; progressBar1.Visible = false; labelPleaseWait.Visible = false; + + var left = Math.Max(labelResolution.Left + labelResolution.Width, labelDuration.Left + labelDuration.Width) + 5; + numericUpDownDurationMinutes.Left = left; + numericUpDownWidth.Left = left; + labelX.Left = numericUpDownWidth.Left + numericUpDownWidth.Width + 3; + numericUpDownHeight.Left = labelX.Left + labelX.Width + 3; } private void buttonOK_Click(object sender, EventArgs e) @@ -50,6 +62,11 @@ namespace Nikse.SubtitleEdit.Forms VideoFileName = saveDialog.FileName; } + if (File.Exists(VideoFileName)) + { + File.Delete(VideoFileName); + } + progressBar1.Style = ProgressBarStyle.Marquee; progressBar1.Visible = true; labelPleaseWait.Visible = true; diff --git a/src/ui/Forms/Main.cs b/src/ui/Forms/Main.cs index 82c4fdad9..54de5de69 100644 --- a/src/ui/Forms/Main.cs +++ b/src/ui/Forms/Main.cs @@ -1609,6 +1609,7 @@ namespace Nikse.SubtitleEdit.Forms closeVideoToolStripMenuItem.Text = _language.Menu.Video.CloseVideo; openSecondSubtitleToolStripMenuItem.Text = _language.Menu.Video.OpenSecondSubtitle; generateTextFromCurrentVideoToolStripMenuItem.Text = _language.Menu.Video.GenerateTextFromVideo; + generateBlankVideoToolStripMenuItem.Text = _language.Menu.Video.GenerateBlankVideo; smpteTimeModedropFrameToolStripMenuItem.Text = _language.Menu.Video.SmptTimeMode; toolStripMenuItemImportChapters.Text = _language.Menu.Video.ImportChaptersFromVideo; diff --git a/src/ui/Forms/Main.resx b/src/ui/Forms/Main.resx index cec85446f..3fc079bee 100644 --- a/src/ui/Forms/Main.resx +++ b/src/ui/Forms/Main.resx @@ -465,7 +465,7 @@ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAOhSURBVFhH7VddSBVBFN5+7BcqEitD78zulpkUFREEQSJE - JApBLxVCFIEU3uvOrhRCxO0pooegIKggesqfu4uWIIE9aL0VYUQREkU/u/dGSfRQFhK5nVPHWmf8udef + JApBLxVCFIEU3uvOrhRCxO0pooeIIKggesqfu4uWIIE9aL0VYUQREkU/u/dGSfRQFhK5nVPHWmf8udef tz74uOyeb+Z8nJk9M1f7j8ngYXXVOd8W7VGmbXE91LRZJJk5eIyVJteXDPlWIkw7YiSF2E2ymYNrxq54 Jg979+1VDASOdYdkM4O20tX5N00+gAY6N21QDFx0xFCmoaGM5NMPz2SnMPkwn9UcVExkHHGN5NOLVFnZ vBaTZ6IG7m7fphhIO0e/ZRKJAho2fUiZ/FA0ObLFLPoQ2NZT2QRU4TQNmz54Ou+VDbgmOwMb77BsILCs @@ -479,60 +479,60 @@ g3/qKCxcRJKcEYbhLN8Rz2UT8K6RJP8A1+0HsgHo+2cpPGlkGkStbCBw4kFYW5tHElz72A45uVdQMHhr XfFqkkSBB9FYVADlXvg6Hu+XTbxzRA1Jfm++k3Dn63aNWE/KiN1rNdj9Jp2dh9Bi4BIgrtkKYCGwCBgD MiCnX3zG9xhHHeqXAnH8glf1cdu34/fgTOiBm1I3Ei6zFyCmAHc7lgYPnOHEK4E4uQ7ETwj/eOBtaDNw - C/3iM77HuAEsBq4C4imI8+A+wrMgp69puKw4aA4QjeEkSLzxLogQn5EYQ91cII5Djro0f6BpvwB77Ez9 - Qp/xygAAAABJRU5ErkJggg== + C/3iM77HuAEsBq4C4imI8+A+wrMgp69puKw4aA4QjeEkSLzxLogQn5EYQ91cII5Djro0f6BpvwBY+Ez5 + ifBPwwAAAABJRU5ErkJggg== iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAQZSURBVFhH1VdbaBNZGI5avCLIClbxkkmyUFYRRFS2Xmhd - cWGFRZ98EKEWFEWIM41oH7o2KIg+eEHULtVqd9WttYltsV0tta209qLYi8ZY2zRJm0wmaZsHfRB80O3Z - /5tMS4mTG5MXP/g48//nnP//zj3RfZdgjM2QQqHCF3397pdv3g5LUug0+WYp1doQCoU4r89f9W7Q8ywm - Xd5X5XWt7M+HTexGbQsrrWlm/UPuPtW2Cj0jYnU4HM5S0sSGKEm3rWW1rLDEFpeX7zcwEnuZeKbE3qTa - ZjpP3ahmEKGkiQ1qVKMWIJrn79YzURRrxWCw4hKJUWsTTcyEkiY2khUAnv2rjp27U69ap8aUBNiedrEn - 7T1pIWKlLOA8jezCP4/TQsRKWQB2eWVjZ1qIWCkL6HG6BsbGxtalg4iVsoDud64+xaUZiPX9CqCzvmJ0 - dLSMWA4Gg8FTk9+JSG13IYYmARRoD65b+Ipv1jCy5RJ2IkIEYmgSQKPY2Otwhdu6nB/aiRS0GyXsRKS+ - fyCGJgHpgCYBeGbpKG2lRydXITftO5fqNlut1ply5xjQJAAb6UlHL/v73zZW0dDOnE7nV5SwwaYXrxlE - oG37zu1PJYvArliECX9BwVr4AE0CaJS/V7e8ZFdtjay0ulnehChhg3Vtr9j4+Pi2GoNhrfVHw4Tn8CEG - EaJFKJMDEjQJkCRpPiXdT0IO0EjzyN6GEjZIdftomWbbTdwtIutYvforBEg8/zl0/PgSxNAkIBlUGAyZ - lPwzBDxa81MRCfgAEYECvhj1zgFPZ1HpQ+by+B7LHeIhWgCNdt2gx9sM9SDtiVsoB9wjLVS3BW3sRq4Y - ye2mZR9rs7IWSoJwURbA8yGX2TyH+uSIgcA9mrFNaB8XKnvgANYavukXEZ5Z+hbK9fq5NtPyUQiwGbkL - ch+e54bz8r5EZuFYPnxJQ0XAprcDnh7Y3f1DfWTbUTreu3vp+5cqoz4fyUnIFzvH6eUgBEpeJQuw8K+Z - TjdDcSdGKnsAge2mVW8goNK0YoyW4tokm7N/boSAiAjLDqVLYqQiwGZctSOy9uoczM+TBfgFvk7pkhgp - CTBx9UhE5TDxfjS7fvu1AQKe5eT8FzjBJ/5PAEwJcA55aZPtieJuWncO7R5wXJbVxE0oAvbKnaPArNYM - n0XwRZaCv66442NSwDXa+XiGo/nc4fxIIhZQ0pLIVK/00QgzlO7fgJKfhAD3kSOf6Hr+QXHHhj8QuFLR - 0DF110ezw+EIVx09urTSyL2v1OvFMm5lIXVbTMStt5S4TClhLy7anq33CsfcI2azf0QwHyRf/BNB12oG - TXU2jXLqxZsk/TrKbW1tRYJ5xEVEJMLRw/ri8VlP3KCUsOFHfSYR7dEPs5X8sUwSCBiLcaDT/Q+5O/iQ - ERNf6AAAAABJRU5ErkJggg== + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAQaSURBVFhH1VdbaBNZGI5rcb2wIApe8JJJIpRVBBGVrRda + FRdcEH3yQYRaUBQhzjSifejaoCD64GVFrVTrdt1da21iW2y3ltpWWlur2IvGWNs0SZtMJmmbB30QfNDt + 8f8m01Li5MbkxQ8+zvz/Oef/v3NPdN8lGGPTpFCo4Hlvn/vF6zdDkhQ6Tb7pSrU2hEIhzuvzV74d8DyJ + SZf3ZVltK7vxoIndrGlhJdXNrG/Q3avaVqFnWKwKh8OZSprYECXpT2tpDSsotsXl5XsNjMReJp4ptjep + tpnKUzerGEQoaWKDGlWrBYjm+X/qmCiKNWIwWH6JxKi1iSZmQkkTG8kKAM/+VcvO/V2nWqfGlATYHney + R+3daSFipSzgPI3swt36tBCxUhaAXV7R+CwtRKyUBXQ7Xf2jo6Nr0kHESllA11tXr+LSDMT6fgXQWV86 + MjJSSiwDg8HgqYnvRKS2vyGGJgEUaA+uW/iKblUzsuUSdiJCBGJoEkCjWN/jcIXbOp3v24kUtAsl7ESk + vr8jhiYB6YAmAXhm6ShtpkcnRyE35TuH6jZardYf5M4xoEkANtKjjh525782Vt7QzpxO5xeUsMGm568Y + RKBt+46tjyWLwP6wCOP+/PzV8AGaBNAod1W1vGBXbY2spKpZ3oQoYYO1bS/Z2NjYlmqDYbV1hWHcc/gQ + gwjRIpTKAQmaBEiSNJuS7ichB2ikuWRvQQkbpLp9tEwz7CbuNpF1rFz5BQIknv8UOn58AWJoEpAMyg2G + hZT8EwQ8XPVzIQl4DxGBfL4I9c5+z7PCkgfM5fHVyx3iIVoAjXbNgMfbDPUg7YnbKPvdwy1Utwlt7Eau + CMntpsUfajIzf5IE4aIsgOdDLrP5R+qTLQYC/9KMbUD7uFDZAwew1vBNvYjwzNK3UKbXz7SZloxAgM3I + XZD78Dw3lJv7OTILx/LgSxoqAja86fd0w+7qG+wl247S8c7dQ9/bKo36PCQnIZ/tHKeXgxAoeaUswMK/ + YjrdNMWdGKnsAQS2m5a/hoAK09JRWoprE2zO+qURAiIiLNuVLomRigCbcfn2yNqrcyAvVxbgF/hapUti + pCTAxNUhEZVDxHvR7Nz5awMEPMnO/j9wgk/8nwCYFOAc9NIm2xPF3bTuHNrd57hMq4kbVwTslTtHgVmt + GT6L4IssBX9dccfHhIBrtPPxDEfzqcP5gUTMoaTFkale5qMRZijdvwElPwkB7iNHPtL1PE9xx4Y/ELhS + 3tAxeddHs8PhCFcePbqowsi9q9DrxVJuWQF1m0/ErbeIuFgpYc8v3Jql9wrH3MNms39YMB8kX/wTQddq + Bk11Fo1y8sWbIP06ymltbUWCWcS5RCTC0cP64vFZS1ynlLDhR/1CItqjH2Yr+WOZJBAwFuNAp/sKsgH4 + j9uGx+wAAAAASUVORK5CYII= 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 @@ -775,7 +775,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAD2 - CAAAAk1TRnQBSQFMAgEBAgEAAcQBKgHEASoBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + CAAAAk1TRnQBSQFMAgEBAgEAAcwBKgHMASoBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA diff --git a/src/ui/Logic/Language.cs b/src/ui/Logic/Language.cs index 08813cdbe..10f77f9be 100644 --- a/src/ui/Logic/Language.cs +++ b/src/ui/Logic/Language.cs @@ -54,6 +54,7 @@ namespace Nikse.SubtitleEdit.Logic public LanguageStructure.FindDialog FindDialog; public LanguageStructure.FindSubtitleLine FindSubtitleLine; public LanguageStructure.FixCommonErrors FixCommonErrors; + public LanguageStructure.GenerateBlankVideo GenerateBlankVideo; public LanguageStructure.GetDictionaries GetDictionaries; public LanguageStructure.GetTesseractDictionaries GetTesseractDictionaries; public LanguageStructure.GoogleTranslate GoogleTranslate; @@ -972,6 +973,14 @@ namespace Nikse.SubtitleEdit.Logic FixUnnecessaryLeadingDots = "Remove unnecessary leading dots", }; + GenerateBlankVideo = new LanguageStructure.GenerateBlankVideo + { + Title = "Generate blank video file", + CheckeredImage = "Chekered image", + DurationInMinutes = "Duration in minutes", + SolidColor = "Solid color", + }; + GetDictionaries = new LanguageStructure.GetDictionaries { Title = "Need dictionaries?", @@ -1676,6 +1685,7 @@ namespace Nikse.SubtitleEdit.Logic SetVideoOffset = "Set video offset...", SmptTimeMode = "SMPTE timing (drop frame)", GenerateTextFromVideo = "Generate text from video...", + GenerateBlankVideo = "Generate blank video...", ImportChaptersFromVideo = "Import chapters from video", GenerateImportSceneChanges = "Generate/import scene changes...", RemoveSceneChanges = "Remove scene changes", diff --git a/src/ui/Logic/LanguageDeserializer.cs b/src/ui/Logic/LanguageDeserializer.cs index 785868c6e..0f2116cad 100644 --- a/src/ui/Logic/LanguageDeserializer.cs +++ b/src/ui/Logic/LanguageDeserializer.cs @@ -2023,6 +2023,18 @@ namespace Nikse.SubtitleEdit.Logic case "FixCommonErrors/FixUnnecessaryLeadingDots": language.FixCommonErrors.FixUnnecessaryLeadingDots = reader.Value; break; + case "GenerateBlankVideo/Title": + language.GenerateBlankVideo.Title = reader.Value; + break; + case "GenerateBlankVideo/CheckeredImage": + language.GenerateBlankVideo.CheckeredImage = reader.Value; + break; + case "GenerateBlankVideo/SolidColor": + language.GenerateBlankVideo.SolidColor = reader.Value; + break; + case "GenerateBlankVideo/DurationInMinutes": + language.GenerateBlankVideo.DurationInMinutes = reader.Value; + break; case "GetDictionaries/Title": language.GetDictionaries.Title = reader.Value; break; @@ -3910,6 +3922,9 @@ namespace Nikse.SubtitleEdit.Logic case "Main/Menu/Video/GenerateTextFromVideo": language.Main.Menu.Video.GenerateTextFromVideo = reader.Value; break; + case "Main/Menu/Video/GenerateBlankVideo": + language.Main.Menu.Video.GenerateBlankVideo = reader.Value; + break; case "Main/Menu/Video/ImportChaptersFromVideo": language.Main.Menu.Video.ImportChaptersFromVideo = reader.Value; break; @@ -4075,6 +4090,9 @@ namespace Nikse.SubtitleEdit.Logic case "Main/Menu/ContextMenu/SetActor": language.Main.Menu.ContextMenu.SetActor = reader.Value; break; + case "Main/Menu/ContextMenu/SetOverrideTagsEtc": + language.Main.Menu.ContextMenu.SetOverrideTagsEtc = reader.Value; + break; case "Main/Menu/ContextMenu/SubStationAlphaStyles": language.Main.Menu.ContextMenu.SubStationAlphaStyles = reader.Value; break; @@ -4267,6 +4285,9 @@ namespace Nikse.SubtitleEdit.Logic case "Main/Menu/ContextMenu/ApplyCustomOverrideTag": language.Main.Menu.ContextMenu.ApplyCustomOverrideTag = reader.Value; break; + case "Main/Menu/ContextMenu/SetResolution": + language.Main.Menu.ContextMenu.SetResolution = reader.Value; + break; case "Main/Menu/ContextMenu/FixCommonErrorsInSelectedLines": language.Main.Menu.ContextMenu.FixCommonErrorsInSelectedLines = reader.Value; break; diff --git a/src/ui/Logic/LanguageStructure.cs b/src/ui/Logic/LanguageStructure.cs index 136d219c1..dc4667ade 100644 --- a/src/ui/Logic/LanguageStructure.cs +++ b/src/ui/Logic/LanguageStructure.cs @@ -839,6 +839,14 @@ public string FixUnnecessaryLeadingDots { get; set; } } + public class GenerateBlankVideo + { + public string Title { get; set; } + public string CheckeredImage { get; set; } + public string SolidColor { get; set; } + public string DurationInMinutes { get; set; } + } + public class GetDictionaries { public string Title { get; set; } @@ -1531,6 +1539,7 @@ public string SetVideoOffset { get; set; } public string SmptTimeMode { get; set; } public string GenerateTextFromVideo { get; set; } + public string GenerateBlankVideo { get; set; } public string ImportChaptersFromVideo { get; set; } public string GenerateImportSceneChanges { get; set; } public string RemoveSceneChanges { get; set; }