Beispiel #1
0
        public GenerateVideoWithHardSubs(Subtitle assaSubtitle, string inputVideoFileName, VideoInfo videoInfo, int?fontSize)
        {
            UiUtil.PreInitialize(this);
            InitializeComponent();
            UiUtil.FixFonts(this);

            _loading                              = true;
            _videoInfo                            = videoInfo;
            Text                                  = LanguageSettings.Current.GenerateVideoWithBurnedInSubs.Title;
            _assaSubtitle                         = new Subtitle(assaSubtitle);
            _inputVideoFileName                   = inputVideoFileName;
            buttonOK.Text                         = LanguageSettings.Current.Watermark.Generate;
            labelPleaseWait.Text                  = LanguageSettings.Current.General.PleaseWait;
            labelResolution.Text                  = LanguageSettings.Current.SubStationAlphaProperties.Resolution;
            labelPreviewPleaseWait.Text           = LanguageSettings.Current.General.PleaseWait;
            labelFontSize.Text                    = LanguageSettings.Current.ExportPngXml.FontSize;
            labelSubtitleFont.Text                = LanguageSettings.Current.ExportPngXml.FontFamily;
            buttonCancel.Text                     = LanguageSettings.Current.General.Cancel;
            labelAudioEnc.Text                    = LanguageSettings.Current.GenerateVideoWithBurnedInSubs.Encoding;
            labelVideoEncoding.Text               = LanguageSettings.Current.GenerateVideoWithBurnedInSubs.Encoding;
            labelAudioBitRate.Text                = LanguageSettings.Current.GenerateVideoWithBurnedInSubs.BitRate;
            labelAudioSampleRate.Text             = LanguageSettings.Current.GenerateVideoWithBurnedInSubs.SampleRate;
            checkBoxMakeStereo.Text               = LanguageSettings.Current.GenerateVideoWithBurnedInSubs.Stereo;
            labelCRF.Text                         = LanguageSettings.Current.GenerateVideoWithBurnedInSubs.Crf;
            labelPreset.Text                      = LanguageSettings.Current.GenerateVideoWithBurnedInSubs.Preset;
            labelTune.Text                        = LanguageSettings.Current.GenerateVideoWithBurnedInSubs.TuneFor;
            buttonPreview.Text                    = LanguageSettings.Current.General.Preview;
            checkBoxRightToLeft.Text              = LanguageSettings.Current.Settings.FixRTLViaUnicodeChars;
            checkBoxAlignRight.Text               = LanguageSettings.Current.GenerateVideoWithBurnedInSubs.AlignRight;
            checkBoxBox.Text                      = LanguageSettings.Current.SubStationAlphaStyles.OpaqueBox;
            progressBar1.Visible                  = false;
            labelPleaseWait.Visible               = false;
            labelPreviewPleaseWait.Visible        = false;
            labelProgress.Text                    = string.Empty;
            labelFileName.Text                    = string.Empty;
            labelPass.Text                        = string.Empty;
            comboBoxVideoEncoding.SelectedIndex   = 0;
            comboBoxCrf.SelectedIndex             = 6;
            comboBoxAudioEnc.SelectedIndex        = 0;
            comboBoxAudioSampleRate.SelectedIndex = 1;
            comboBoxTune.SelectedIndex            = 0;
            comboBoxAudioBitRate.Text             = "128k";
            checkBoxTargetFileSize_CheckedChanged(null, null);
            checkBoxTargetFileSize.Text      = LanguageSettings.Current.GenerateVideoWithBurnedInSubs.TargetFileSize;
            labelFileSize.Text               = LanguageSettings.Current.GenerateVideoWithBurnedInSubs.FileSizeMb;
            numericUpDownTargetFileSize.Left = labelFileSize.Left + labelFileSize.Width + 5;
            linkLabelHelp.Text               = LanguageSettings.Current.Main.Menu.Help.Title;
            groupBoxSettings.Text            = LanguageSettings.Current.Settings.Title;
            groupBoxVideo.Text               = LanguageSettings.Current.Main.Menu.Video.Title;
            groupBoxAudio.Text               = LanguageSettings.Current.GenerateVideoWithBurnedInSubs.Audio;

            comboBoxVideoEncoding.Text     = Configuration.Settings.Tools.GenVideoEncoding;
            comboBoxCrf.Text               = Configuration.Settings.Tools.GenVideoCrf;
            comboBoxTune.Text              = Configuration.Settings.Tools.GenVideoTune;
            comboBoxAudioEnc.Text          = Configuration.Settings.Tools.GenVideoAudioEncoding;
            comboBoxAudioSampleRate.Text   = Configuration.Settings.Tools.GenVideoAudioSampleRate;
            checkBoxMakeStereo.Checked     = Configuration.Settings.Tools.GenVideoAudioForceStereo;
            checkBoxTargetFileSize.Checked = Configuration.Settings.Tools.GenVideoTargetFileSize;
            checkBoxBox.Checked            = Configuration.Settings.Tools.GenVideoNonAssaBox;
            checkBoxAlignRight.Checked     = Configuration.Settings.Tools.GenVideoNonAssaAlignRight;
            checkBoxRightToLeft.Checked    = Configuration.Settings.Tools.GenVideoNonAssaAlignRight;

            labelVideoBitrate.Text = string.Empty;

            numericUpDownWidth.Value  = _videoInfo.Width;
            numericUpDownHeight.Value = _videoInfo.Height;

            var left = Math.Max(Math.Max(labelResolution.Left + labelResolution.Width, labelFontSize.Left + labelFontSize.Width), labelSubtitleFont.Left + labelSubtitleFont.Width) + 5;

            numericUpDownFontSize.Left = left;
            comboBoxSubtitleFont.Left  = left;
            numericUpDownWidth.Left    = left;
            labelX.Left = numericUpDownWidth.Left + numericUpDownWidth.Width + 3;
            numericUpDownHeight.Left          = labelX.Left + labelX.Width + 3;
            buttonVideoChooseStandardRes.Left = numericUpDownHeight.Left + numericUpDownHeight.Width + 9;
            labelInfo.Text           = LanguageSettings.Current.GenerateVideoWithBurnedInSubs.InfoAssaOff;
            checkBoxRightToLeft.Left = left;
            checkBoxAlignRight.Left  = left;
            checkBoxBox.Left         = left;

            var audioLeft = Math.Max(Math.Max(labelAudioEnc.Left + labelAudioEnc.Width, labelAudioSampleRate.Left + labelAudioSampleRate.Width), labelAudioBitRate.Left + labelAudioBitRate.Width) + 5;

            comboBoxAudioEnc.Left        = audioLeft;
            checkBoxMakeStereo.Left      = audioLeft;
            comboBoxAudioSampleRate.Left = audioLeft;
            comboBoxAudioBitRate.Left    = audioLeft;

            linkLabelHelp.Left = Width - linkLabelHelp.Width - 30;

            _isAssa = !fontSize.HasValue;
            if (fontSize.HasValue)
            {
                if (fontSize.Value < numericUpDownFontSize.Minimum)
                {
                    numericUpDownFontSize.Value = numericUpDownFontSize.Minimum;
                }
                else if (fontSize.Value > numericUpDownFontSize.Maximum)
                {
                    numericUpDownFontSize.Value = numericUpDownFontSize.Maximum;
                }
                else
                {
                    numericUpDownFontSize.Value = fontSize.Value;
                }

                checkBoxRightToLeft.Checked = Configuration.Settings.General.RightToLeftMode &&
                                              LanguageAutoDetect.CouldBeRightToLeftLanguage(_assaSubtitle);
            }
            else
            {
                numericUpDownFontSize.Enabled = false;
                labelFontSize.Enabled         = false;
                labelSubtitleFont.Enabled     = false;
                comboBoxSubtitleFont.Enabled  = false;
                checkBoxRightToLeft.Left      = checkBoxTargetFileSize.Left;
                checkBoxAlignRight.Enabled    = false;
                checkBoxBox.Enabled           = false;
                labelInfo.Text = LanguageSettings.Current.GenerateVideoWithBurnedInSubs.InfoAssaOn;
            }

            var initialFont = Configuration.Settings.Tools.ExportBluRayFontName;

            if (string.IsNullOrEmpty(initialFont))
            {
                initialFont = UiUtil.GetDefaultFont().Name;
            }
            foreach (var x in FontFamily.Families)
            {
                if (x.IsStyleAvailable(FontStyle.Regular) || x.IsStyleAvailable(FontStyle.Bold))
                {
                    comboBoxSubtitleFont.Items.Add(x.Name);
                    if (x.Name.Equals(initialFont, StringComparison.OrdinalIgnoreCase))
                    {
                        comboBoxSubtitleFont.SelectedIndex = comboBoxSubtitleFont.Items.Count - 1;
                    }
                }
            }
            if (comboBoxSubtitleFont.SelectedIndex < 0 && comboBoxSubtitleFont.Items.Count > 0)
            {
                comboBoxSubtitleFont.SelectedIndex = 0;
            }

            checkBoxRightToLeft.Checked = Configuration.Settings.General.RightToLeftMode && LanguageAutoDetect.CouldBeRightToLeftLanguage(_assaSubtitle);
            textBoxLog.Visible          = false;

            UiUtil.FixLargeFonts(this, buttonOK);
            UiUtil.FixFonts(this, 2000);
        }
        private void buttonOK_Click(object sender, EventArgs e)
        {
            buttonOK.Enabled = false;
            using (var saveDialog = new SaveFileDialog {
                FileName = string.Empty, Filter = "MP4|*.mp4|Matroska|*.mkv|WebM|*.webm"
            })
            {
                if (saveDialog.ShowDialog(this) != DialogResult.OK)
                {
                    return;
                }

                VideoFileName = saveDialog.FileName;
            }

            if (File.Exists(VideoFileName))
            {
                File.Delete(VideoFileName);
            }

            if (numericUpDownFontSize.Visible)
            {
                var fontSize = (int)numericUpDownFontSize.Value;
                var style    = AdvancedSubStationAlpha.GetSsaStyle("Default", _assaSubtitle.Header);
                style.FontSize = fontSize;
                var styleLine = style.ToRawAss();
                _assaSubtitle.Header = AdvancedSubStationAlpha.AddTagToHeader("Style", styleLine, "[V4+ Styles]", _assaSubtitle.Header);
            }

            if (Configuration.Settings.General.RightToLeftMode && LanguageAutoDetect.CouldBeRightToLeftLanguage(_assaSubtitle))
            {
                for (var index = 0; index < _assaSubtitle.Paragraphs.Count; index++)
                {
                    var paragraph = _assaSubtitle.Paragraphs[index];
                    if (LanguageAutoDetect.ContainsRightToLeftLetter(paragraph.Text))
                    {
                        paragraph.Text = Utilities.FixRtlViaUnicodeChars(paragraph.Text);
                    }
                }
            }

            SubtitleFormat format           = new AdvancedSubStationAlpha();
            var            assaTempFileName = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString() + ".ass");

            File.WriteAllText(assaTempFileName, format.ToText(_assaSubtitle, null));

            progressBar1.Style      = ProgressBarStyle.Marquee;
            progressBar1.Visible    = true;
            labelPleaseWait.Visible = true;
            var process = VideoPreviewGenerator.GenerateHardcodedVideoFile(
                _inputVideoFileName,
                assaTempFileName,
                VideoFileName);

            process.Start();
            while (!process.HasExited)
            {
                System.Threading.Thread.Sleep(100);
                Application.DoEvents();
                if (_abort)
                {
                    process.Kill();
                }
            }

            progressBar1.Visible    = false;
            labelPleaseWait.Visible = false;

            try
            {
                File.Delete(assaTempFileName);
            }
            catch
            {
                // ignore
            }

            DialogResult = _abort ? DialogResult.Cancel : DialogResult.OK;
        }