[FFmpeg-devel] lavc/libvpxenc: Deprecate lossless option

Gyan ffmpeg at gyani.pro
Fri Feb 8 07:08:40 EET 2019

On 08-02-2019 03:31 AM, Carl Eugen Hoyos wrote:
> .
> No strong opinion here, I hadn't realized that -crf 0 only works with
> newer versions.
> Can you explain why crf alone has no effect and needs -b:v 0?
> Isn't this a bug both with libvpx and libaom?

With crf present but VBV params absent, VPX operates using a constrained 
Q RC mode , where the target bitrate acts as a ceiling. Since acvodec 
has a non-zero default -b of 200 kbps, this produces undesirable 
effects. If set to 0, VPX switches to constant quality.

I do see this block though,

     if (avctx->codec_id == AV_CODEC_ID_VP9 && ctx->lossless == 1) {
         enccfg.rc_min_quantizer =
         enccfg.rc_max_quantizer = 0;
     } else {
         if (avctx->qmin >= 0)
             enccfg.rc_min_quantizer = avctx->qmin;
         if (avctx->qmax >= 0)
             enccfg.rc_max_quantizer = avctx->qmax;

Looks like the quantizer range is disabled only by using the deprecated 
option, or has this changed?

Also, with libvpx v1.7.0-1758, I get different results for -crf 0 -b:v 
0  vs only -lossless 1, with the latter producing a slightly larger 
file, and its result showing a slightly larger SSIM score. Although 
neither produces a SSIM of 1, like libx264. Not truly lossless?


More information about the ffmpeg-devel mailing list