FFMPEG (LIBAVCODEC) Предупреждение: кодированная рамка слишком большая

StackOverflow https://stackoverflow.com/questions/3863919

Вопрос

Я пытаюсь использовать libavcodec (ffmpeg), чтобы кодировать необработанные данные пикселей в формате MP4. Каждая вещь идет хорошо, и я получаю файл .avi с приличным качеством, но в некотором смысле кодек дает «закодированному кадру слишком большое» предупреждение. И когда когда-либо это делает, часть некоторых кадров (обычно нижняя часть рамы) выглядит искажена или все перемешано. Может ли кто-нибудь сказать мне, когда дано это предупреждение. Ниже приведены настройки, которые я использую для кодировщика:

qmax = 6;
qmin = 2;
bit_rate = 200000; // if I increase this, I get more warnings. 
width = 1360;
height = 768;
time_base.den = 15; // frames per second
time_base.num = 1;
gop_size = 48;
pix_fmt = PIX_FMT_YUV420P;

С уважением,

Это было полезно?

Решение

Из того, что я могу собрать FFMPEG выделяет постоянный размер буфера 2 МБ для удержания сжатой рамы. Например, 1080P - 3 МБ, например, и кодек не всегда может сжимать большую раму в менее 2 МБ.

Вы можете исправить это, увеличив размер буфера, и / или сделать его динамическими.

Другие советы

Очень вероятно, что буфер кодека недостаточно велик. Попробуйте изменить RC_BUFFER_SIZE. В качестве альтернативы вы можете попробовать это настройки:

ctx->bit_rate = 500000;
ctx->bit_rate_tolerance = 0;
ctx->rc_max_rate = 0;
ctx->rc_buffer_size = 0;
ctx->gop_size = 40;
ctx->max_b_frames = 3;
ctx->b_frame_strategy = 1;
ctx->coder_type = 1;
ctx->me_cmp = 1;
ctx->me_range = 16;
ctx->qmin = 10;
ctx->qmax = 51;
ctx->scenechange_threshold = 40;
ctx->flags |= CODEC_FLAG_LOOP_FILTER;
ctx->me_method = ME_HEX;
ctx->me_subpel_quality = 5;
ctx->i_quant_factor = 0.71;
ctx->qcompress = 0.6;
ctx->max_qdiff = 4;
ctx->directpred = 1;
ctx->flags2 |= CODEC_FLAG2_FASTPSKIP;

В примере кода я нашел что-то вроде:

outbuf_size = 100000;
outbuf = malloc(outbuf_size);

[...]

out_size = avcodec_encode_video(c, outbuf, outbuf_size, picture);

Толкание outbuf_size быть больше, решили проблему.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top