1

IPカメラからH.26​​4画像を取得していて、エンコードされた画像を(デコードせずに)保存したい。この目的のために、ffmpegのoutput-example.c (libavformat / output-example.c)を使用しています。生のH.264画像を保存するには、次のようにします。

AVPacket pkt;
av_init_packet(&pkt);
if (c->coded_frame->pts != AV_NOPTS_VALUE)
        pkt.pts= av_rescale_q(c->coded_frame->pts, c->time_base, st->time_base);
if(c->coded_frame->key_frame)
        pkt.flags |= PKT_FLAG_KEY;
pkt.stream_index= st->index;
pkt.data= (uint8_t *)ulAddr;//video_outbuf;
pkt.size= out_size;
save_image(pkt.data, out_size);

ここで、 ulAddrは画像へのアドレスポインタであり、out_sizeは画像サイズです。画像をメディアビデオファイルに保存する代わりに、個々の画像を保存したいと思います。save_image関数は、基本的なfopen関数とfwrite関数を使用して画像を保存するだけです。フレームをデコードして保存すると、すべて正常に動作します。しかし、エンコードされたフレームの保存に問題があります。エンコードされたフレームは非常に小さいサイズで保存されるため、デコードできません。何か問題でもありますか?私はこの点でどんな助けにも本当に感謝します。

4

1 に答える 1

2

H.264は「画像」エンコード形式ではなく、「映画」エンコード形式です。エンコーダーは、各画像を個別にエンコードするのではなく、画像のグループをまとめて調べ、特定の画像のエンコードをグループ内の画像に分散します。

ほとんどの場合、単一のエンコードされた画像を見ると、エンコードされたストリームの前にある可能性のある他の画像への参照があることがわかります。ターゲット画像をデコードする前に、デコーダーに他のいくつかの画像を与える必要がある場合があります。

H.264ではできないのに、やりたいことができる別のエンコード形式を選択する必要があるかもしれません。各画像を他の画像とは独立してエンコードする形式は、「イントラコード化」と呼ばれます。

于 2011-10-07T16:14:57.280 に答える