/// <summary> /// Extracts the audio stream from specified file. /// </summary> /// <param name="source">The media file to extract from.</param> /// <param name="destination">The destination file.</param> /// <param name="options">The options for starting the process.</param> /// <returns>The process completion status.</returns> public static CompletionStatus ExtractAudio(string source, string destination, ProcessStartOptions options) { File.Delete(destination); FFmpegProcess Worker = new FFmpeg.FFmpegProcess(options); return(Worker.RunFFmpeg(string.Format(@"-y -i ""{0}"" -vn -acodec copy ""{1}""", source, destination))); }
/// <summary> /// Gets file streams information of specified file via FFmpeg. /// </summary> /// <param name="source">The file to get information about.</param> /// <param name="options">The options for starting the process.</param> /// <returns>A FFmpegProcess object containing the file information.</returns> public static FFmpegProcess GetFileInfo(string source, ProcessStartOptions options) { FFmpegProcess Worker = new FFmpeg.FFmpegProcess(options); Worker.RunFFmpeg(string.Format(@"-i ""{0}""", source)); return(Worker); }
/// <summary> /// Returns the version information from FFmpeg. /// </summary> /// <param name="options">The options for starting the process.</param> /// <returns>A FFmpegProcess object containing the version information.</returns> public static FFmpegProcess GetVersion(ProcessStartOptions options) { FFmpegProcess Worker = new FFmpeg.FFmpegProcess(options); Worker.RunFFmpeg("-version", ProcessOutput.Standard); return(Worker); }
/// <summary> /// Returns the exact frame count of specified video file. /// </summary> /// <param name="source">The file to get information about.</param> /// <param name="options">The options for starting the process.</param> /// <returns>The number of frames in the video.</returns> public static long GetFrameCount(string source, ProcessStartOptions options) { long Result = 0; FFmpegProcess Worker = new FFmpeg.FFmpegProcess(options); Worker.StatusUpdated += (sender, e) => { Result = e.Status.Frame; }; Worker.RunFFmpeg(string.Format(@"-i ""{0}"" -f null /dev/null", source)); return(Result); }
/// <summary> /// Encodes a media file with specified arguments. /// </summary> /// <param name="source">The file to convert.</param> /// <param name="videoCodec">The codec(s) to use to encode the video stream(s).</param> /// <param name="audioCodec">The codec(s) to use to encode the audio stream(s).</param> /// <param name="encodeArgs">Additional arguments to pass to FFmpeg.</param> /// <param name="destination">The destination file.</param> /// <param name="options">The options for starting the process.</param> /// <returns>The process completion status.</returns> public static CompletionStatus Encode(string source, string[] videoCodec, string[] audioCodec, string encodeArgs, string destination, ProcessStartOptions options) { File.Delete(destination); StringBuilder Query = new StringBuilder(); Query.Append("-y -i "); // AviSynth source will pipe through Avs2Yuv into FFmpeg. bool SourceAvisynth = source.ToLower().EndsWith(".avs"); if (SourceAvisynth) { Query.Append("-"); // Pipe source } else { Query.Append("\""); Query.Append(source); Query.Append("\""); } // Add video codec. if (videoCodec == null || videoCodec.Length == 0) { Query.Append(" -vn"); } else if (videoCodec.Length == 1) { Query.Append(" -vcodec "); Query.Append(videoCodec[0]); } else { for (int i = 0; i < videoCodec.Length; i++) { Query.Append(" -vcodec:"); Query.Append(i); Query.Append(" "); Query.Append(videoCodec[i]); } } // Add audio codec. if (audioCodec == null || audioCodec.Length == 0) { Query.Append(" -an"); } else if (audioCodec.Length == 1) { Query.Append(" -acodec "); Query.Append(audioCodec[0]); } else { for (int i = 0; i < audioCodec.Length; i++) { Query.Append(" -acodec:"); Query.Append(i); Query.Append(" "); Query.Append(audioCodec[i]); } } if (!string.IsNullOrEmpty(encodeArgs)) { Query.Append(" "); Query.Append(encodeArgs); } Query.Append(" \""); Query.Append(destination); Query.Append("\""); // Run FFmpeg with query. FFmpegProcess Worker = new FFmpeg.FFmpegProcess(options); CompletionStatus Result = SourceAvisynth ? Worker.RunAvisynthToFFmpeg(source, Query.ToString()) : Worker.RunFFmpeg(Query.ToString()); return(Result); }