[Ffmpeg-devel] Encoding IBBP MPEG2 with fixed gop size.

Michel Bardiaux mbardiaux
Wed Oct 25 18:58:05 CEST 2006


Thomas Parmegiani wrote:
>> -----Message d'origine-----
>> De : ffmpeg-devel-bounces at mplayerhq.hu
>> [mailto:ffmpeg-devel-bounces at mplayerhq.hu]De la part de Michel Bardiaux
>> Envoy? : mercredi 25 octobre 2006 16:58
>> ? : FFmpeg development discussions and patches
>> Objet : Re: [Ffmpeg-devel] Encoding IBBP MPEG2 with fixed gop size.
>>
>>
>> Thomas Parmegiani wrote:
>>> Hi all !
>>>
>>> I try encode a file to have a MPEG2 IBBP with a fixed gop size (12) :
>>>
>>> If I use ffmpeg : ./ffmpeg -i /G/video.ts -minrate 20000K -maxrate
>>> 20000K -bufsize 2000K -b 20000K -flags2 sgop -bf 2 -g 12 /G/test.ts
>>>
>>> It works. I checked the source code it seems ffmpeg set AVCodecContext
>>> flags2 value to CODEC_FLAG2_STRICT_GOP. If I do the same thing on my
>>> application it does not work.
>> It does not work *HOW*? My crystal ball is in the repair shop...
> 
>  ;D

???

>>> So I guess I have to set another parameter but
>>> which one ? Anybody can help me ?
>> Do you use avcodec_get_context_defaults in your app?
> 
> Yes this function is called by avcodec_alloc_context() function.
> Please read below to see parameters I set to prepare encoding :
> 
> ...
> 
> AVCodecContext *ovc;
> 
> ovc = avcodec_alloc_context();
> 
> ovc->codec_type	   = CODEC_TYPE_VIDEO;
> setTimeBase(ovc, m_ic->streams[m_iStream]->r_frame_rate.den,
> m_ic->streams[m_iStream]->r_frame_rate.num);
> ovc->me_method       = ME_EPZS;
> ovc->pix_fmt         = PIX_FMT_YUV420P;
> ovc->width           = m_ic->streams[m_iStream]->codec->width;
> ovc->height          = m_ic->streams[m_iStream]->codec->height;
> 
> if (m_iInterlace == 1)
> 	ovc->flags = CODEC_FLAG_INTERLACED_DCT|CODEC_FLAG_INTERLACED_ME;
> ovc->gop_size        = 12;
> ovc->max_b_frames    = 2;
> ovc->sample_aspect_ratio = dec->sample_aspect_ratio;
> ovc->mb_decision = 1;
> ovc->bit_rate_tolerance = 1;
> ovc->qmin = 2;
> ovc->bit_rate = 25000000;
> ovc->rc_max_rate = ovc->bit_rate;
> ovc->rc_min_rate = ovc->bit_rate;
> ovc->flags2 = CODEC_FLAG2_STRICT_GOP;
> ovc->rc_buffer_size     = ovc->bit_rate/10;
> 
> ovcodec = avcodec_find_encoder(CODEC_ID_MPEG2VIDEO);
> iResult = avcodec_open(ovc, ovcodec);
> 

I can only suggest the addition of a pack of prints (well, av_log) in 
ffmpeg.c to check the value of all these fields before the 1st call to 
avcodec_encode_video. Or you can do it in gdb.

> ...
> 


-- 
Michel Bardiaux
R&D Director
T +32 [0] 2 790 29 41
F +32 [0] 2 790 29 02
E mailto:mbardiaux at mediaxim.be

Mediaxim NV/SA
Vorstlaan 191 Boulevard du Souverain
Brussel 1160 Bruxelles
http://www.mediaxim.com/




More information about the ffmpeg-devel mailing list