Пример #1
0
        /// <summary>
        /// The construct modify args.
        /// </summary>
        /// <param name="source">
        /// The source.
        /// </param>
        /// <param name="output">
        /// The output.
        /// </param>
        /// <param name="request">
        /// The request.
        /// </param>
        /// <returns>
        /// The System.String.
        /// </returns>
        protected override string ConstructModifyArgs(FileInfo source, FileInfo output, AudioUtilityRequest request)
        {
            string codec;
            var    ext = MediaTypes.CanonicaliseExtension(output.Extension);

            switch (ext)
            {
            case MediaTypes.ExtWav:
                codec = "pcm_s16le";     // pcm signed 16-bit little endian - compatible with CDDA
                break;

            case MediaTypes.ExtMp3:
                codec = "libmp3lame";
                break;

            case MediaTypes.ExtOgg:
            case MediaTypes.ExtOggAudio:     // http://wiki.hydrogenaudio.org/index.php?title=Recommended_Ogg_Vorbis#Recommended_Encoder_Settings
                codec = "libvorbis -q 7";    // ogg container vorbis encoder at quality level of 7
                break;

            case MediaTypes.ExtWebm:
            case MediaTypes.ExtWebmAudio:
                codec = "libvorbis -q 7";     // webm container vorbis encoder at quality level of 7
                break;

            default:
                codec = "copy";
                break;
            }

            var args = new StringBuilder()
                       .AppendFormat(ArgsOverwrite + ArgsSource, source.FullName);

            if (request.TargetSampleRate.HasValue)
            {
                //args.AppendFormat(ArgsSampleRate, request.SampleRate.Value);
                args.AppendFormat(" -af aresample={0} ", request.TargetSampleRate.Value);
            }

            if (request.MixDownToMono.HasValue && request.MixDownToMono.Value)
            {
                args.AppendFormat(ArgsChannelCount, 1);
            }

            if (request.Channels.NotNull())
            {
                // request.Channel starts at 1, ffmpeg starts at 0.
                args.AppendFormat(ArgsMapChannel, request.Channels.Single() - 1);
            }

            FormatFfmpegOffsetArgs(request, args);

            args.AppendFormat(ArgsCodecOutput, codec, output.FullName);

            return(args.ToString());
        }