1

FFmpegを使用して、ビデオ(mpeg2)をjpgに変換し、出力を標準出力にリダイレクトしました。

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();

データを使用してプロセスからコールバックを受け取ることができます。

_ffmpegProc.OutputDataReceived += new DataReceivedEventHandler(_ffmpegProc_OutputDataReceived);

しかし、どうすればそれをjpgファイルに保存できますか?各jpgのサイズを知る必要がありますが、その方法がわかりません。

ありがとう。

4

1 に答える 1

2

JPEGファイルには、ファイルの開始時に明示的な長さの指示が含まれていないため、ストリーム構造を読んで少なくとも部分的に理解する必要があります。

トランスコーディングを伴わない2つの可能性があります。

  1. 中間ファイルをディスクに保存しますが、それは避けたいことだと思います。
  2. 最小限のファイルの解析を試してください。JPEGファイルはSOIマーカー(16進FF D8)で始まり、EOIマーカー(16進FF D9)で終わります。比較的単純なステートマシンを使用すると、この方法でJPGのストリームを個別のフレームに分割してみることができます。さて、堅牢性のために、セグメントを個別に読み取る方がおそらく良いでしょう(詳細については、JPEGファイル形式を参照してください)。ffmpeg mjpegデコーダーのソース実装を調べることもできますが、非常に堅牢に見えます。
于 2012-07-31T15:54:48.647 に答える