protected void ComposeFFMpegOutputArgs(StringBuilder outputArgs, string outputFormat, OutputSettings settings) { if (settings != null) { if (settings.MaxDuration.HasValue) { outputArgs.AppendFormat(CultureInfo.InvariantCulture, " -t {0}", settings.MaxDuration); } if (outputFormat != null) { outputArgs.AppendFormat(" -f {0} ", outputFormat); } if (settings.AudioSampleRate.HasValue) { outputArgs.AppendFormat(" -ar {0}", settings.AudioSampleRate); } if (settings.AudioCodec != null) { outputArgs.AppendFormat(" -acodec {0}", settings.AudioCodec); } if (settings.VideoFrameCount.HasValue) { outputArgs.AppendFormat(" -vframes {0}", settings.VideoFrameCount); } if (settings.VideoFrameRate.HasValue) { outputArgs.AppendFormat(" -r {0}", settings.VideoFrameRate); } if (settings.VideoCodec != null) { outputArgs.AppendFormat(" -vcodec {0}", settings.VideoCodec); } if (settings.VideoFrameSize != null) { outputArgs.AppendFormat(" -s {0}", settings.VideoFrameSize); } if (settings.CustomOutputArgs != null) { outputArgs.AppendFormat(" {0} ", settings.CustomOutputArgs); } } }
public void ConvertMedia(FFMpegInput[] inputs, string output, string outputFormat, OutputSettings settings) { if (inputs == null || inputs.Length == 0) { throw new ArgumentException("At least one ffmpeg input should be specified"); } FFMpegInput fFMpegInput = inputs[inputs.Length - 1]; StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < inputs.Length - 1; i++) { FFMpegInput fFMpegInput2 = inputs[i]; if (fFMpegInput2.Format != null) { stringBuilder.Append(" -f " + fFMpegInput2.Format); } if (fFMpegInput2.CustomInputArgs != null) { stringBuilder.AppendFormat(" {0} ", fFMpegInput2.CustomInputArgs); } stringBuilder.AppendFormat(" -i {0} ", CommandArgParameter(fFMpegInput2.Input)); } ConvertSettings convertSettings = new ConvertSettings(); settings.CopyTo(convertSettings); convertSettings.CustomInputArgs = stringBuilder.ToString() + fFMpegInput.CustomInputArgs; ConvertMedia(fFMpegInput.Input, fFMpegInput.Format, output, outputFormat, convertSettings); }