一般的なビデオ形式(MPEG-1 / 2/4、.wmv、.movなど)のフレーム開始コードのリストを知っている(または含むリソースを知っている)人はいますか?
たとえば、MPEG-1ビデオフレームは(私が思うに)常に「00 000100」で始まります。
本質的に、私はこれらを知りたいので、さまざまなビデオ形式のビデオ全体でフレームの開始を自動的に見つけることができるプログラムを作成できます。
何を達成したいですか?
これは、ビデオコンテナタイプがどのように構成されているかという質問ですか?
例を参照してください:http ://www.daubnet.com/formats/AVI.html
これは、aviファイルがどのように構造化されているかを説明したものです。Googleは、他のコンテナファイル形式を見つけるのに役立つ場合があります。
ビデオを録画する場合、通常は個々のフレームで構成されます。ディレクトリ内の個々のビットマップファイルについて考えてみてください。
ビデオのファイルを1つだけ持つために、このフレームのストリームはコンテナに入れられます。コンテナには、コンテンツを説明するヘッダーと、フレームがファイルに順番に格納される特定のレイアウトがあります。
私自身のコンテナの簡単な例:
{
struct header
{
unsigned int frametype;
unsigned int framesize;
};
byte* readFrame( header* pHdr, int frameNum )
{
byte* pFirstFrame = ((byte*) pHdr) + sizeof( header );
return pFristFrame + frameNum * pHdr->framesize;
}
}
他にもいくつかのコンテナタイプがあります。AVIはこれらのコンテナタイプの1つにすぎません。個々のフレームに到達するには、ファイル内のヘッダーを解釈し、その情報に基づいて、解析するフレームの位置を計算する必要があります。
aviファイル形式の定義へのリンクを投稿しました。mpeg / mkv/ogmファイル形式に関する情報を入手できる場所は他にもあります。
プログラムを機能させるには、この情報が必要です。
ちなみに、圧縮形式はすべての個々のフレームを個別に保護するわけではありません。これらは、個々のフレームといくつかの中間フレームを保護します。これらの中間フレームには、現在のフレームが最後の完全なフレームとどのように異なるかに関する情報のみが含まれています。したがって、すべてのフレーム番号で完全なフレームを抽出することはできません。