By default, vpxenc
will use 2-pass method for encoding.
To gain a CRF-type result, use –end-usage=cq –cq-level=<arg>
format, and then a 1-pass encode –passes=1
Using this, vpxenc
uses a default CQ of 32.
I get different encoding times on multiple runs, even though it's producing the exact same files, so watch out for that.
By default, HandBrake uses a CQ of 22.
HandBrake will only use 2-passes if a bitrate is set as well.
You can use ffmpeg
to get a deep level of output to see what it's doing, it uses the default CRF of 32:
ffmpeg -loglevel debug -i sample.y4m -vcodec libvpx-vp9 sample.webm
Relevant output:
[libvpx-vp9 @ 0x55a6e613e3c0] VP8E_SET_CPUUSED: 1 [libvpx-vp9 @ 0x55a6e613e3c0] VP8E_SET_ARNR_MAXFRAMES: 0 [libvpx-vp9 @ 0x55a6e613e3c0] VP8E_SET_ARNR_STRENGTH: 3 [libvpx-vp9 @ 0x55a6e613e3c0] VP8E_SET_ARNR_TYPE: 3 [libvpx-vp9 @ 0x55a6e613e3c0] VP8E_SET_STATIC_THRESHOLD: 0 [libvpx-vp9 @ 0x55a6e613e3c0] VP8E_SET_CQ_LEVEL: 32 [libvpx-vp9 @ 0x55a6e613e3c0] VP9E_SET_COLOR_SPACE: 0 [libvpx-vp9 @ 0x55a6e613e3c0] VP9E_SET_COLOR_RANGE: 0 [libvpx-vp9 @ 0x55a6e613e3c0] VP9E_SET_TARGET_LEVEL: 255