[FFmpeg-devel] [Ffmpeg-devel] [RFC] ratecontrol buffer size magic
Baptiste Coudurier
baptiste.coudurier
Tue Sep 25 12:00:02 CEST 2007
Hi
Michael Niedermayer wrote:
> Hi
>
> On Wed, Apr 25, 2007 at 12:21:52PM +0200, Baptiste Coudurier wrote:
>> Michael Niedermayer wrote:
>>> Hi
>>>
>>> On Thu, Apr 12, 2007 at 11:07:10AM +0200, Baptiste Coudurier wrote:
>>>> Hi
>>>>
>>>> Michael Niedermayer wrote:
>>>>> Hi
>>>>>
>>>>> On Wed, Apr 11, 2007 at 01:47:55PM +0200, Baptiste Coudurier wrote:
>>>>>> Hi
>>>>>>
>>>>>> Michael Niedermayer wrote:
>>>>>>> Hi
>>>>>>>
>>>>>>> On Thu, Apr 05, 2007 at 06:51:00PM +0200, Baptiste Coudurier wrote:
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> I stumbed accross a weird behaviour of the CBR ratecontrol lately,
>>>>>>>> basically doing:
>>>>>>>>
>>>>>>>> ffmpeg -i file.mpg -vcodec mpeg2video -minrate 30000k -maxrate 30000k
>>>>>>>> -b 30000k -intra -flags +ildct+low_delay -dc 10 -flags2
>>>>>>>> +ivlc+non_linear_q -ps 1 -qmin 1 -qmax 12 -top 1 -vglobal 4 -acodec
>>>>>>>> pcm_s16be -f mov -bufsize 1200000 -rc_init_occupancy 1200000 cbr.mov
>>>>>>>>
>>>>>>>> Constraints are so in order to achieve vbv delay as 3600.
>>>>>>>> Now ffmpeg will only give me qp as 24. While tweaking I changed some
>>>>>>>> magic in ratecontrol.c (see patch attached) and now qp have decent/good
>>>>>>>> values.
>>>>>>>>
>>>>>>>> I dig into svn history and found out that r2601 bumped */2 to */3 to
>>>>>>>> improve CBR ratecontrol. Can anyone explain in detail why that magic
>>>>>>>> does improve behaviour ?
>>>>>>> yes, your vbv buf size is VERY significantly too small it can barely
>>>>>>> hold a single frame, increase it by a factor of 100 ...
>>>>>>>
>>>>>>> i hope theres no spec which mandates such nonsense parameters ...
>>>>>>>
>>>>>>>
>>>>>>>> Can that parameter be user setable ?
>>>>>>> if you make it user settable ...
>>>>>> Is something like that ok ?
>>>>> yes except that name of the variable and the comment
>>>> +
>>>> + /**
>>>> + * Ratecontrol available buffer space coefficient applied when
>>>> choosing qp.
>>> does anyone understand what this variable does based on this description?
>>> no?
>>> if no then patch rejected
>> Humm ok another try:
>>
>> /**
>> * Coefficient applied to buffer space, by ratecontrol,
>> * for limiting QP (bits2qp) when encoding with a buffer size.
>> * - encoding: Set by user.
>> * - decoding: unused
>> */
>> float rc_buffer_space_to_qp_coeff;
>
> hmm its better
> but still
> the description says therese that parameter which is a coefficient
> and that is applied to the buffer space, whats still unclear
> * buffer? -> vbv buffer
> * buffer space? is that the size of the whole buffer? of the free space
> left?
> * applied? if id say ill apply a coeffificint to a number 95% of the math
> people would lynch me, its scaled or multiplied or something like that
> or if its a more complex operation then that should also be said more
> clearly
> * also what is the now changed "buffer size" used for?
>
Another try:
/**
* Ratecontrol factor applied to vbv buffer free space when limiting QP
(bits2qp).
* With a maximum rate: free space / factor;
* With a minimum rate: free space * factor;
* - encoding: Set by user.
* - decoding: unused
*/
float rc_vbv_to_qp_factor;
{"rc_vbv_to_qp_factor", "ratecontrol vbv buffer free space to qp
factor", OFFSET(rc_vbv_buf_free_space_to_qp_factor), FF_OPT_TYPE_FLOAT,
3.0, FLT_MIN, FLT_MAX, V|E},
Im trying to keep name somewhat short.
--
Baptiste COUDURIER GnuPG Key Id: 0x5C1ABAAA
SMARTJOG S.A. http://www.smartjog.com
Key fingerprint 8D77134D20CC9220201FC5DB0AC9325C5C1ABAAA
Phone: +33 1 49966312
More information about the ffmpeg-devel
mailing list