Terminology - Proryanator/encoder-benchmark GitHub Wiki

Real-time encoding

Any computer can encode video input files; but some encode at much slower speeds than others. One computer might encode a 4K@60 video file at a rate of 2fps, which is not a problem if you're simply compressing/archiving video footage.

However, if you're wanting to stream the encoded version of that video at a target framerate, your hardware will need to encode at 60fps or higher as it's going. This is what is meant by real-time encoding.

This is what occurs when you stream to Twitch (albeit with a lot more leniance), and what is happening when you are streaming from a gaming PC to a lighter client.

Visually Lossless

Any encoded video that scores >= 95 vmaf score is considered visually lossless, and is what you are shooting for in terms of encoded video quality. Anything lower and you end up seeing minor blockiness or artifacting.

By default, the tool does not calculate vmaf score to initially focus on producing fps statistics. However, you can have the tool calculate vmaf score on each permutation by using the -c flag.

How to Interpret FPS Statistics

The tool will provide you with the following FPS stats when running through permutations:

  Average FPS:  78
  1%'ile:       68
  90%'ile:      94

Each stat has specific things that it can tell you about what your system can do in real-time.

  • Average: gives an idea of the overall experience you can expect during encoding
  • 1%'ile: gives an indication of detected dips/low points in framerate
  • 90%'ile: gives an indication of the upper-limits of the encoding capabilities of your hardware

When choosing encoder permutation settings to use, you should look at all 3 datapoints before deciding what your system can handle.

A Good Encoding Experience Example

Let's say you get the following fps stats:

  Average FPS:  78
  1%'ile:       68
  90%'ile:      94

You have an average of 78fps and a 1%'ile of 68fps, I can confidently say that my system will produce a smooth and consistent 60fps encode experience.

However if I really wanted to, I could look at the 90%'ile and know that my system could periodically do 90fps but will drop down to as low as 68fps. If that fps variance is fine with you, you can feel free to set your target fps to 90fps. Just know that at heavier encode times or game content where there's more movement/variance, your encode fps will drop.

A Bad Encoding Experience Example

Let's say instead, you see the following stats:

  Average FPS:  78
  1%'ile:       30
  90%'ile:      85

Notice the 1%'ile 30fps is much lower than the average and the 90%'ile. In this case, you may end up seeing fps drops during encoding that are drastic and would most likely provide a bad encoding experience.

For results like these, it's recommended to try using different hardware/encoding settings to have the 1%'ile be much closer to the average. Or, just know that you might see some hard dips in FPS and consider not game streaming at all for a better experience.