Exemplo n.º 1
0
        /// <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)));
        }
Exemplo n.º 2
0
        /// <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);
        }
Exemplo n.º 3
0
        /// <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);
        }
Exemplo n.º 4
0
        /// <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);
        }
Exemplo n.º 5
0
        /// <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);
        }