public ComparisonWindow(MediaInfo mediaFile, Encoder encoder)
        {
            InitializeComponent();

            this.mediaFile = mediaFile;
            this.encoder   = encoder;

            ffmpegEngine = new FFmpegEngine();
            ffmpegEngine.ConversionCompleted += FFmpegEngine_CutCompleted;

            mediaElementOriginal.Open(new Uri(mediaFile.Source));
            labelTitle.Content   += $"({encoder})";
            sliderPreview.Maximum = mediaFile.Duration.TotalSeconds;
            Height -= 30; //compensate for setting window chrome height to 0;

            foreach (Quality quality in Enum.GetValues(typeof(Quality)))
            {
                comboBoxQuality.Items.Add(quality.GetName());
            }
            comboBoxQuality.SelectedIndex = 3;

            UpdateStartEndTimes();
        }
        public ComparisonWindow(MediaInfo mediaFile, Encoder encoder)
        {
            InitializeComponent();

            this.mediaFile = mediaFile;
            this.encoder   = encoder;

            ffmpegEngine = new FFmpegEngine();
            ffmpegEngine.ConversionCompleted += FFmpegEngine_ConversionCompleted;
            ffmpegEngine.ProgressChanged     += FFmpegEngine_ProgressChanged;

            mediaElementOriginal.Open(new Uri(mediaFile.Source));
            labelTitle.Content   += encoder == Encoder.H264 ? " (H264)" : " (H265)";
            sliderPreview.Maximum = mediaFile.Duration.TotalSeconds;
            Height -= 30; //compensate for setting window chrome height to 0;

            foreach (var item in MainWindow.QUALITY)
            {
                comboBoxQuality.Items.Add(item);
            }
            comboBoxQuality.SelectedIndex = 3;

            UpdateStartEndTimes();
        }
Пример #3
0
        private async void ButtonConvert_Click(object sender, RoutedEventArgs e)
        {
            if (textBoxDestination.Text.EndsWith("mp4") && mediaInfo.AudioCodec.ToLower() == "opus")
            {
                MessageBox.Show("Opus audio in mp4 container is currently unsupported.\nEither use aac audio or mkv container.", "FF Video Converter");
                return;
            }

            textBlockProgress.Text = "Starting conversion process...";

            ffmpegEngine = new FFmpegEngine();
            ffmpegEngine.ProgressChanged     += UpdateProgress;
            ffmpegEngine.ConversionCompleted += ConversionCompleted;
            Encoder           selectedEncoder   = comboBoxEncoder.SelectedIndex == 0 ? Encoder.H264 : Encoder.H265;
            ConversionOptions conversionOptions = new ConversionOptions(selectedEncoder, (byte)comboBoxPreset.SelectedIndex, GetCRFFromQuality(comboBoxQuality.Text, selectedEncoder));

            if (checkBoxCrop.IsChecked == true)
            {
                conversionOptions.CropData = new CropData((short)integerTextBoxCropLeft.Value, (short)integerTextBoxCropTop.Value, (short)integerTextBoxCropRight.Value, (short)integerTextBoxCropBottom.Value);
            }
            else if (comboBoxResolution.SelectedIndex != 0)
            {
                conversionOptions.Resolution = GetResolutionFromString(comboBoxResolution.Text);
            }
            if (comboBoxFramerate.SelectedIndex != 0)
            {
                conversionOptions.Framerate = Convert.ToByte(comboBoxFramerate.SelectedItem);
            }
            outputFps = comboBoxFramerate.SelectedIndex == 0 ? Convert.ToSingle(mediaInfo.Framerate) : Convert.ToSingle(comboBoxFramerate.SelectedItem);

            if (checkBoxCut.IsChecked == true)
            {
                if (!TimeSpan.TryParse(textBoxStart.Text, out TimeSpan start))
                {
                    MessageBox.Show("Enter a valid start time", "FF Video Converter");
                    return;
                }
                if (!TimeSpan.TryParse(textBoxEnd.Text, out TimeSpan end))
                {
                    MessageBox.Show("Enter a valid end time", "FF Video Converter");
                    return;
                }
                if (checkBoxFastCut.IsChecked == true)
                {
                    start = start.Add(TimeSpan.FromSeconds(0.2));
                    ffmpegEngine.FastCut(mediaInfo.Source, textBoxDestination.Text, start.ToString(@"hh\:mm\:ss\.ff"), textBoxEnd.Text);
                    currentOutputPath = textBoxDestination.Text;
                    return;
                }
                else
                {
                    conversionOptions.Start = start;
                    conversionOptions.End   = end;
                }
            }

            ffmpegEngine.Convert(mediaInfo, textBoxDestination.Text, conversionOptions);

            currentOutputPath           = textBoxDestination.Text;
            buttonPauseResume.IsEnabled = true;
            buttonCancel.IsEnabled      = true;
            buttonConvert.IsEnabled     = false;
            buttonPreview.IsEnabled     = false;
            buttonOpenFile.IsEnabled    = false;
            buttonOpenStream.IsEnabled  = false;
            checkBoxCrop.IsEnabled      = false;
            checkBoxCut.IsEnabled       = false;
            await mediaElementInput.Pause();

            buttonPlayPause.Content     = " ▶️";
            gridSourceMedia.IsEnabled   = false;
            buttonOpenOutput.Visibility = Visibility.Hidden;
            Storyboard storyboard = FindResource("ProgressAnimationIn") as Storyboard;

            storyboard.Begin();
            TaskbarItemInfo.ProgressState = TaskbarItemProgressState.Normal;
        }