Question

Je suis en train d'utiliser libavcodec (ffmpeg) pour coder les données brutes des pixels au format mp4. Tout va bien et j'obtenir .avi fichier avec une qualité décente mais quelques fois le codec donne avertissement « trame encodée trop grande ». Et si jamais il le fait, une partie de certains cadres (généralement partie inférieure du cadre) afficheront altérées ou tout mélangé. Quelqu'un peut-il me dire quand cet avertissement est donné. Voici les paramètres que je utilise pour 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;

Cordialement,

Était-ce utile?

La solution

D'après ce que je peux recueillir ffmpeg Alloue une taille de mémoire tampon constante de 2 Mo de tenir un comprimé Cadre. 1080p est 3MB non compressé par exemple, et le codec ne peut pas toujours compresser un grand cadre en moins de 2 Mo.

Vous pouvez éventuellement résoudre ce problème en augmentant la taille de la mémoire tampon, et / ou de la rendre dynamique.

Autres conseils

Très probablement que le tampon de codec n'est pas assez grand. Essayez de changer rc_buffer_size. Vous pouvez essayer ces paramètres:

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;

Dans le code exemple que je trouve quelque chose comme:

outbuf_size = 100000;
outbuf = malloc(outbuf_size);

[...]

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

Pousser outbuf_size à plus résolu la question.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top