Я кодирую кадры, используя следующую конфигурацию кодера:
codecContext = avcodec_alloc_context3(encoderH264);
codecContext->width = width;
codecContext->height = height;
codecContext->pix_fmt = AV_PIX_FMT_YUV420P;
codecContext->time_base.num = 1;
codecContext->time_base.den = 1;
codecContext->has_b_frames = false;
av_opt_set(codecContext->priv_data, "preset", "medium", 0);
av_opt_set(codecContext->priv_data, "tune", "zerolatency", 0);
av_opt_set(codecContext->priv_data, "crf", "30", 0);
Создает правильный кодер, который работает. Что меня беспокоит, так это то, что размер последовательных кадров не всегда уменьшается. Я хотел бы иметь кодировщик FFmpeg, который в первом кадре выдает изображение, скажем, 0,5 МБ, затем 0,05 МБ, затем кадры, имеющие 0,01 МБ. Мой аппаратный кодировщик NVIDIA делает именно это. Но приведенный выше конфиг FFmpeg дает мне такие кадры в начале:
1556
200
225
238
238
238
238
828745
216
352
714
1129
Размеры меняются немного позже, пока все не установятся в 242 байта.
Есть ли способ сделать кодировщик примерно таким:
100000
20000
1000
50
50
50
...