Frage

Ich versuche libavcodec (ffmpeg) zu verwenden Rohpixeldaten zu MP4-Format zu kodieren. Alles geht gut, und ich bin .avi-Datei mit guter Qualität bekommen aber einige Male der Codec gibt „codierten Rahmen zu groß“ Warnung. Und wann immer es das tut, wird ein Teil von einigen Frames (in der Regel unteren Teil des Rahmens) zu buchen, verstümmelt oder ganz durcheinander. Kann jemand mir sagen, wenn diese Warnung. Im Folgenden sind die Einstellungen, die ich für Encoder bin mit:

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;

Grüße,

War es hilfreich?

Lösung

Von dem, was ich ffmpeg zuteilt eine konstante Puffergröße von 2 MB sammeln ein komprimiertes zu halten Rahmen. 1080p ist 3MB zum Beispiel unkomprimiert, und der Codec einen großen Rahmen in weniger als 2 MB nicht immer komprimieren kann.

Sie können möglicherweise dieses Problem beheben, indem Sie die Puffergröße zu erhöhen und / oder es dynamisch zu machen.

Andere Tipps

Sehr wahrscheinlich, dass Codec-Puffer nicht groß genug ist. Versuchen Sie, ändern rc_buffer_size. Alternativ können Sie diese Einstellungen versuchen:

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;

Im Beispielcode fand ich so etwas wie:

outbuf_size = 100000;
outbuf = malloc(outbuf_size);

[...]

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

outbuf_size Pushing größer das Problem gelöst werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top