[Ffmpeg-devel] ratecontrol advice
Loren Merritt
lorenm
Tue May 10 09:55:44 CEST 2005
On Tue, 10 May 2005, Matthew Hodgson wrote:
> I'm trying to use libavcodec to 1-pass encode an h.263 stream which has
> limits on both the maximum size-per-picture and total datarate. I can't work
> out what the right way is to respect both limitations using the ratecontrol
> settings, whilst maintaining the best possible QP for any given frame (so
> long as it doesn't end up larger than X bytes - or push the total datarate
> for over Y kbits/s).
>
> I assume I can do this with a custom rc_eq formula and/or adjusting qcompress
> - but I can't see an obvious formula for capping the picture-size.
> Alternatively, is there another way to force ffmpeg to adjust the qp so that
> pictures are never larger than a given size?
>
> Any suggestions would be very much appreciated indeed :)
You can't cap per-frame bits using rceq, because rceq is unitless. lavc
will multiply the output of rceq by whatever factor it takes to fill up
your desired average bitrate.
But if you don't mind modifying a few lines of code, look in
modify_qscale() line 435 or so. Currently that limits per-frame bits based
on the number of bits left in the VBV buffer; you could put in your own
cap similarly.
(Warning: anything done by a 1pass encode will be an approximate/soft
limit, since you don't know in advance excatly how many bits a given QP
will take. So you'll need to fudge the limit a little if you care about
strict compliance.)
--Loren Merritt
More information about the ffmpeg-devel
mailing list