私は自分の問題の解決策を見つけました。実際、同じ問題に直面していた誰かがffmpeg(libav)ユーザーフォーラムに解決策を投稿しました。これは私の場合もうまくいくようです。同様の問題に直面している他のユーザーがこの投稿の恩恵を受けることができるように、私は自分の質問に対する回答を投稿しています。
問題:
H264ビデオコーデックのビデオビットレートをプログラムで設定することは、libx264コーデックによって尊重されませんでした。MPEG1、2、およびMPEG4ビデオコーデックでは機能していましたが、この設定はH264ビデオコーデックでは認識されませんでした。そして、結果として得られたビデオ品質は非常に悪かった。
解決:
デコーダーに送られる前に、デコード/サイズ変更されたフレームのポイントを設定する必要があります。解決策を見つけた人はffmpeg.cソースを調べて、これを理解することができました。最初に、AVFrameのポイントをストリームのtime_baseからコーデックのtime_baseに再スケーリングして、単純なフレーム番号(1、2、3など)を取得する必要があります。
pic->pts = av_rescale_q(pic->pts, ost->time_base, ovCodecCtx->time_base);
avcodec_encode_video2(ovCodecCtx, &newpkt, pic, &got_packet_ptr);
また、libx264コーデックからエンコードされたパケットを受信するときは、エンコードされたビデオパケットのptsとdtsをストリームタイムベースに再スケーリングする必要があります。
newpkt.pts = av_rescale_q(newpkt.pts, ovCodecCtx->time_base, ost->time_base);
newpkt.dts = av_rescale_q(newpkt.dts, ovCodecCtx->time_base, ost->time_base);
ありがとう