public string[] ToStringArray()
        {
            List <string> parameters = new List <string>();

            if (!string.IsNullOrEmpty(InputFile))
            {
                parameters.Add("-i");
                parameters.Add(InputFile);
            }

            if (VerbosityLevel >= 0)
            {
                parameters.Add("-v");
                parameters.Add(VerbosityLevel.ToString());
            }

            if (SecondsToSkip > 0)
            {
                TimeSpan skipDuration = TimeSpan.FromSeconds(SecondsToSkip);
                parameters.Add("-ss");
                parameters.Add(string.Format("{0:hh\\:mm\\:ss\\.fff}", skipDuration));
            }

            if (!string.IsNullOrEmpty(EarlyExtendedOptions))
            {
                parameters.AddRange(EarlyExtendedOptions.Split(' '));
            }

            if (!string.IsNullOrEmpty(OutputFormat))
            {
                parameters.Add("-f");
                parameters.Add(OutputFormat);
            }

            if (ExcludeVideo)
            {
                parameters.Add("-vn");
            }
            else
            {
                if (!string.IsNullOrEmpty(VideoCodec))
                {
                    parameters.Add("-vcodec");
                    parameters.Add(VideoCodec);
                }

                if (VideoFramerate > 0)
                {
                    parameters.Add("-r");
                    parameters.Add(VideoFramerate.ToString("F"));
                }

                if (!string.IsNullOrEmpty(VideoBitrate))
                {
                    parameters.Add("-b");
                    parameters.Add(VideoBitrate);
                }

                if (VideoQualityControl > 0)
                {
                    parameters.Add("-crf");
                    parameters.Add(VideoQualityControl.ToString());
                }

                if (!string.IsNullOrEmpty(VideoPreset))
                {
                    parameters.Add("-vpre");
                    parameters.Add(string.Format("{0}", VideoPreset));
                }

                if ((VideoWidth != -1 || VideoHeight != -1) && (VideoWidth != 0 || VideoHeight != 0))
                {
                    parameters.Add("-vf");
                    parameters.Add(string.Format("scale={0}:{1}", VideoWidth, VideoHeight));
                }
            }

            if (ExcludeAudio)
            {
                parameters.Add("-an");
            }
            else
            {
                if (!string.IsNullOrEmpty(AudioCodec))
                {
                    parameters.Add("-acodec");
                    parameters.Add(AudioCodec);
                }

                if (AudioSampleRate > 0)
                {
                    parameters.Add("-ar");
                    parameters.Add(AudioSampleRate.ToString());
                }

                if (!string.IsNullOrEmpty(AudioBitrate))
                {
                    parameters.Add("-ab");
                    parameters.Add(AudioBitrate);
                }

                if (AudioChannels > 0)
                {
                    parameters.Add("-ac");
                    parameters.Add(AudioChannels.ToString());
                }
            }

            if (!string.IsNullOrEmpty(LateExtendedOptions))
            {
                parameters.AddRange(LateExtendedOptions.Split(' '));
            }

            if (VideoStreamIndex != -1)
            {
                parameters.Add("-map");
                parameters.Add(string.Format("0:{0}", VideoStreamIndex));
            }

            if (AudioStreamIndex != -1)
            {
                parameters.Add("-map");
                parameters.Add(string.Format("0:{0}", AudioStreamIndex));
            }

            if (!string.IsNullOrEmpty(OutputFile))
            {
                parameters.Add(string.Format("\"{0}\"", OutputFile));
            }

            return(parameters.ToArray());
        }