leepfrog
leepfrog

Reputation: 381

C# - Parsing ffmpeg standard output when extracting images

I am extracting single Video frames by starting a ffmpeg process from my c# code. The default behaviour is to write these images to disk. However to speed up processing I want to redirect the ffmpeg standard output to receive the stream and process it further in my program.

I am using arguments similar to this:

-i \"" + Filename + "\" -vf \"scale=640:-1\" -an -vframes 100 -r 1 -f image2 -

This redirects the byte stream to standard output which I can redirect to my program using process.StartInfo.RedirectStandardOutput = true.

This may work fine for movie streams as I only have a singe output, but the call above would produce 10 single images (when writing to hard disk), how can I parse the byte stream from standard output and split it into single files?

Upvotes: 6

Views: 4454

Answers (2)

D.Rosado
D.Rosado

Reputation: 5773

Thanks for your answer @leepfrog This is basically the same:

StringBuilder str = new StringBuilder();

        //Input file path
        str.Append(string.Format(" -i {0}", myinputFile));

        //Set the frame rate
        str.Append(string.Format(" -r {0}", myframeRate);

        //Indicate the output format
        str.Append(" -f image2pipe");

        //Connect the output to the standard output
        str.Append(" pipe:1");



        return str.ToString();

Upvotes: 0

leepfrog
leepfrog

Reputation: 381

I have found a solution which seems to work but strangly enough is not mentioned in the ffmpeg documentation: Use image2pipe as output format.

So for the example above it would be:

-i \"" + Filename + "\" -vf \"scale=640:-1\" -an -vframes 100 -r 1 -f image2pipe -

This redirects the byte stream to stdout and allows to capture and parse the images

Upvotes: 4

Related Questions