Domanda

Sto cercando di usare libavcodec (ffmpeg) per codificare i dati dei pixel grezzi in formato MP4. Ogni cosa va bene e mi sto .avi file con qualità decente, ma a volte il codec dà "frame troppo grande codificato" warning. E quando mai lo fa, una parte di alcuni fotogrammi (di solito parte inferiore del telaio) sguardo confuso o tutto in su mista. Nessuno può dirmi quando viene dato questo avvertimento. Di seguito sono le impostazioni che sto usando per encoder:

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;

Saluti,

È stato utile?

Soluzione

Da quello che posso raccogliere ffmpeg alloca una dimensione di buffer costante di 2 MB per tenere una compressa telaio. 1080p è 3MB non compressa per esempio, e il codec non può sempre comprimere un grande cornice in meno di 2 MB.

Si può eventualmente risolvere questo problema aumentando la dimensione del buffer, e / o rendere dinamico.

Altri suggerimenti

Molto probabilmente quella del buffer di codec non è grande abbastanza. Provare a cambiare rc_buffer_size. In alternativa, si può provare queste impostazioni:

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;

Nel codice di esempio ho trovato qualcosa di simile:

outbuf_size = 100000;
outbuf = malloc(outbuf_size);

[...]

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

Spingendo outbuf_size ad essere più grandi risolto il problema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top