첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
유용한 소스 코드가 있으면 icodebroker@naver.com으로 보내주시면 감사합니다.
블로그 자료는 자유롭게 사용하세요.

■ 비디오 품질 변경하기

------------------------------------------------------------------------------------------------------------------------


TestProject.zip


MainForm.cs

 

 

using Microsoft.Expression.Encoder;

using Microsoft.Expression.Encoder.Profiles;

using System;

using System.IO;

using System.Windows.Forms;

 

namespace TestProject

{

    /// <summary>

    /// 메인 폼

    /// </summary>

    public partial class MainForm : Form

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor

        ////////////////////////////////////////////////////////////////////////////////////////// Public

 

        #region 생성자 - MainForm()

 

        /// <summary>

        /// 생성자

        /// </summary>

        public MainForm()

        {

            InitializeComponent();

 

            #region 이벤트를 설정한다.

 

            this.videoFileTextBox.TextChanged += videpFileTextBox_TextChanged;

            this.videoFileButton.Click        += videoFileButton_Click;

            this.qualityTrackBar.Scroll       += qualityTrackBar_Scroll;

            this.createButton.Click           += createButton_Click;

 

            #endregion

        }

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method

        ////////////////////////////////////////////////////////////////////////////////////////// Private

        //////////////////////////////////////////////////////////////////////////////// Event

 

        #region 비디오 파일 텍스트 박스 텍스트 변경시 처리하기 - videpFileTextBox_TextChanged(sender, e)

 

        /// <summary>

        /// 비디오 파일 텍스트 박스 텍스트 변경시 처리하기

        /// </summary>

        /// <param name="sender">이벤트 발생자</param>

        /// <param name="e">이벤트 인자</param>

        private void videpFileTextBox_TextChanged(object sender, EventArgs e)

        {

            this.createButton.Enabled = File.Exists(this.videoFileTextBox.Text);

        }

 

        #endregion

        #region 비디오 파일 버튼 클릭시 처리하기 - videoFileButton_Click(sender, e)

 

        /// <summary>

        /// 비디오 파일 버튼 클릭시 처리하기

        /// </summary>

        /// <param name="sender">이벤트 발생자</param>

        /// <param name="e">이벤트 인자</param>

        private void videoFileButton_Click(object sender, EventArgs e)

        {

            this.openFileDialog.FileName = this.videoFileTextBox.Text;

 

            if(this.openFileDialog.ShowDialog() == DialogResult.OK)

            {

                this.videoFileTextBox.Text = this.openFileDialog.FileName;

            }

        }

 

        #endregion

        #region 품질 트랙바 스크롤시 처리하기 - qualityTrackBar_Scroll(sender, e)

 

        /// <summary>

        /// 품질 트랙바 스크롤시 처리하기

        /// </summary>

        /// <param name="sender">이벤트 발생자</param>

        /// <param name="e">이벤트 인자</param>

        private void qualityTrackBar_Scroll(object sender, EventArgs e)

        {

            this.qualityTextBox.Text = this.qualityTrackBar.Value.ToString();

        }

 

        #endregion

        #region 생성하기 버튼 클릭시 처리하기 - createButton_Click(sender, e)

 

        /// <summary>

        /// 생성하기 버튼 클릭시 처리하기

        /// </summary>

        /// <param name="sender">이벤트 발생자</param>

        /// <param name="e">이벤트 인자</param>

        private void createButton_Click(object sender, EventArgs e)

        {

            if(this.saveFileDialog.ShowDialog() != DialogResult.OK)

            {

                return;

            }

 

            Cursor = Cursors.WaitCursor;

 

            this.progressBar.Value   = 0;

            this.progressBar.Visible = true;

 

            Refresh();

 

            try

            {

                using(Job job = new Job())

                {

                    MediaItem mediaItem = new MediaItem(this.videoFileTextBox.Text);

 

                    job.MediaItems.Add(mediaItem);

 

                    mediaItem.OutputFormat.VideoProfile.Size = mediaItem.OriginalVideoSize;

 

                    mediaItem.OutputFormat.VideoProfile.Bitrate = new VariableQualityBitrate(qualityTrackBar.Value);

 

                    FileInfo fileInfo = new FileInfo(saveFileDialog.FileName);

 

                    job.OutputDirectory = fileInfo.DirectoryName;

 

                    mediaItem.OutputFileName = fileInfo.Name;

 

                    job.CreateSubfolder = false;

 

                    job.EncodeProgress += job_EncodeProgress;

 

                    job.Encode();

                }

            }

            catch(Exception exception)

            {

                MessageBox.Show(exception.Message);

            }

 

            Cursor = Cursors.Default;

 

            this.progressBar.Visible = false;

        }

 

        #endregion

        #region 작업 인코드 진행시 처리하기 - job_EncodeProgress(sender, e)

 

        /// <summary>

        /// 작업 인코드 진행시 처리하기

        /// </summary>

        /// <param name="sender">이벤트 발생자</param>

        /// <param name="e">이벤트 인자</param>

        private void job_EncodeProgress(object sender, EncodeProgressEventArgs e)

        {

            this.progressBar.Value = (int)e.Progress;

 

            Refresh();

        }

 

        #endregion

    }

}

 

------------------------------------------------------------------------------------------------------------------------

※ 프로그램 컴파일을 위해 아래 링크에서 Microsoft Expression Encoder 4를 설치한다.

 

https://www.microsoft.com/en-us/download/details.aspx?id=18974

 

Posted by 사용자 icodebroker

댓글을 달아 주세요