6

C# コードから ffmpeg プロセスを開始して、単一のビデオ フレームを抽出しています。デフォルトの動作は、これらのイメージをディスクに書き込むことです。ただし、処理を高速化するために、ffmpeg 標準出力をリダイレクトしてストリームを受信し、プログラムでさらに処理したいと考えています。

私はこれに似た引数を使用しています:

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

これにより、バイト ストリームが標準出力にリダイレクトされ、process.StartInfo.RedirectStandardOutput = true.

単一の出力しかないため、これはムービー ストリームではうまく機能する可能性がありますが、上記の呼び出しでは (ハード ディスクへの書き込み時に) 10 個の単一の画像が生成されます。標準出力からバイト ストリームを解析し、それを単一のファイルに分割するにはどうすればよいでしょうか?

4

2 に答える 2

4

機能しているように見える解決策を見つけましたが、不思議なことに、ffmpeg のドキュメントには記載されていません:image2pipe出力形式として使用します。

したがって、上記の例では次のようになります。

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

これにより、バイト ストリームが stdout にリダイレクトされ、画像のキャプチャと解析が可能になります。

于 2012-05-09T20:51:26.247 に答える
0

あなたの答えをありがとう@leepfrogこれは基本的に同じです:

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();
于 2012-07-31T13:09:40.863 に答える