/// <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()); }