Pregunta

Estoy intentando utilizar libavcodec (ffmpeg) para codificar los datos de píxeles primas a formato mp4. Cada cosa va bien y yo estoy poniendo .avi archivo con una calidad decente, pero algunas veces el códec da "demasiado grande codificada marco de" advertencia. Y cuando cada vez que lo hace, una parte de algunas tramas (por lo general la parte inferior del marco) mira distorsionada o todo depende mixta. ¿Puede alguien decirme cuando se da esta advertencia. Los siguientes son los ajustes que estoy usando para el codificador:

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;

Saludos,

¿Fue útil?

Solución

A partir de lo que he entendido ffmpeg asigna un tamaño de búfer de 2 MB constante para mantener un comprimido marco. 1080p es de 3 MB descomprimido por ejemplo, y el códec no siempre puede comprimir un marco de gran tamaño en menos de 2 MB.

posiblemente puede solucionar este problema aumentando el tamaño del búfer, y / o lo que es dinámico.

Otros consejos

Es muy probable que el buffer del códec no es lo suficientemente grande. Trate de cambio rc_buffer_size. Como alternativa, puede probar esta configuración:

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;

En el código de ejemplo, he encontrado algo como:

outbuf_size = 100000;
outbuf = malloc(outbuf_size);

[...]

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

Empujar outbuf_size a ser más grandes resuelva el problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top