4

最近、BMP画像の画像処理用のCプログラムを作成しました。ピクセル値を読み取って処理する必要がありました。非常に簡単で、BMPヘッダーの内容をたどり、BMP画像のほとんどの情報を取得できました。

ここでの課題は、ビデオを(フレームごとに)処理することですが、どうすればよいですか?ビデオクリップ内の画像フレームの連続ストリームのヘッダーを読み取るにはどうすればよいですか?または、たとえば、mpeg形式にもユニバーサルヘッダーがあり、それを読み取ると、ビデオ全体に関する情報を取得でき、ヘッダーの後、すべてのデータはピクセルのみになります。

伝えられたらいいなと思います。

ビデオの処理の経験がある人はいますか?

どんな本やチュートリアルへのリンクも非常に役に立ちます。

4

3 に答える 3

4

MPEGのようなビデオストリームは、(明らかに)その持続時間とそのフレームレートに依存するいくつかのフレームで構成されています。ピクセルを読み取るには、前のフレームからストリームに依存しない、いわゆるイントラフレームから開始する必要があります。連続するフレームは、前のフレームから時間的に依存するフレームであるため、そのピクセルを取得するには、イントラから目的のフレームへのストリームをデコードする必要があります。
通常、イントラフレームは定期的に挿入され、デコーダーにストリームと同期する方法を提供します。これは、エラーが発生する可能性がある状況で非常に役立ちます。
あなたがやりたいことは簡単な仕事ではありません。フィルタなどの後処理を行う場合は、MPEGデコーダを使用してから、フレームを表示する前にフレームを変更する必要があります。
ビデオコーディングを勉強することをお勧めします。標準のMPEGから始めて、ビデオコーディングに関する多くの資料を見つけることができます。

于 2010-04-27T20:16:38.247 に答える
2

FFMpegを調べることをお勧めします。ムービーからフレームを取得してJPGなどの画像にダンプできるコマンドラインユーティリティがあります。次に、既存のリーダーを変更してJPGファイルを処理できます(libjpegなどを使用してJPGを生のピクセルバッファーにデコードします)。

または、FFMpeg API(C、Python、その他)を使用して、プログラムでフレームキャプチャを実行し、ビデオ内を移動しながらピクセルを確認することもできます。ビデオフォーマットは複雑であるため、さまざまなコーデックのすべてを理解し始めたい場合を除いて、ライブラリを取得して生のピクセルバッファにデコードすることをお勧めします。

于 2010-04-27T20:33:08.027 に答える
1

MPEG 1/2/4ビデオは圧縮されているため、ビットマップよりも処理がはるかに困難です。ビットマップデータを使用すると、実際の色の値がファイルに直接保存されます。MPEG、またはそのことについてはJPEGでは、色情報はファイルに書き込まれる前にいくつかの変換を経ます。これらには以下が含まれます

  • RGB-> YUV 420P(サブサンプリングされたクロミナンス)
  • 離散コサイン変換
  • 加重量子化
  • ジグザグ注文
  • 差動符号化
  • 可変長符号化(ハフマンのような)

これはすべて、ファイルからピクセルデータを解析する簡単な方法がないことを意味します。標準の詳細を細かく調べて独自のデコーダーを作成するか、ffmpegなどのビデオデコードライブラリを使用して作業を行う必要があります。ffmpegはあなたのビデオを静止画像に変換することができます(この最近の質問への回答を参照してください)。また、ffmpegライブラリ(libavformatおよびlibavcodec)に直接インターフェースすることもできます。優れたチュートリアルについては、この質問への回答を参照してください。

于 2010-04-27T20:47:08.383 に答える