I've read in different places about -speed and -deadline options for VP9 encoding with ffmpeg, they seem to control more or less the same aspect (compression efficiency to execution time ratio), but I could not find how exactly the two are related.

Many web pages mention only one of the two. The FFmpeg wiki metnions both, but in different sections: Controlling Speed and Quality section mentions -dealine but says nothing about -speed, and -speed is tangentially mentioned elsewhere.

What is the relation between the two? Does it make sense to specify both, or does one override the other?


-speed is the same as -cpu-used

FFmpeg source code (libavcodec/libvpxenc.c) shows that -speed is a legacy alias for -cpu_used.

Use both -deadline and -cpu-used to control speed

-deadline has 3 modes: best, good, and rt. The -cpu-used option can tweak each mode to further adjust speed. The meaning/value of -cpu-used depends on the mode.

  • best - This usually gives the best quality output but is extremely slow. In general this is not a recommended setting unless you have a lot of time on your hands.

  • good - This is the default value if you don't set -deadline. This will be what most users should use most of the time. Within the scope of "good" quality there are 6 further speed steps that are set through the -cpu-used parameter (values from 0 to 5).

    • Setting -cpu-used 0 will give quality that is usually very close to and even sometimes better than that obtained with -deadline best, but the encoder will typically run about twice as fast.

    • Setting -cpu-used 1 or -cpu-used 2 will give further significant boosts to encode speed, but will start to have a more noticeable impact on quality and may also start to effect the accuracy of the data rate control.

    • Setting a value of 4 or 5 will turn off "rate distortion optimisation" which has a big impact on quality, but also greatly speeds up the encoder.

  • rt - Real-time mode allows the encoder to auto adjust the speed vs. quality trade-off in order to try and hit a particular cpu utilisation target. In this mode the -cpu-used parameter controls the %cpu target as follows:

    target cpu utilisation = (100*(16-cpu-used)/16)%

    Legal values for -cpu-used when combined with -deadline rt are (0-15). It is worth noting that in real-time mode the encode quality will depend on how hard a particular clip or section of a clip is and how fast the encoding machine is. In this mode the results will thus vary from machine to machine and even from run to run depending on what else you are doing.

Source: The WebM Project | VP8 Encode Parameter Guide. Should apply to VP9 as well.

Note that -quality is a legacy alias for -deadline.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.