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; }