Constant Rate Factor
Table of Contents

CRF Guide

CRF stands for Constant Rate Factor, x264's best single-pass encoding method.

CRF in a nutshell

The way constant quality encoding is usually done, it keeps up a constant quality by compressing every frame of the same type the same amount. In tech speak, that's maintaining a constant QP (quantization parameter).

Constant Rate Factor, on the other hand, will compress different frames by different amounts. It does this by taking motion into account.

The eye perceives more detail in still objects than when they're in motion. Because of this, a video compressor can apply more compression (drop more detail) when things are moving, and apply less compression (retain more detail) when things are still. Subjectively, the video will seem to have higher quality.

How to use it

If you're using x264, CRF is used by default for constant quality.

But isn't that other way, constant QP, really better quality in the end?

No. It just wastes space by compressing less in areas you really won't notice. This isn't even like MP3s cutting off highs and lows in music that are audible on CDs. There is not a purist's argument to made here.

If you were a computer, you would look at a CRF encoding and say it was lower quality than the CQP copy. And it would be. But if you're a human being, subjectively, the CRF copy will look better. It least compresses the parts you see the most, and most compresses the parts you see the least.

Many people always use CRF for single-pass encodes and argue there is no reason to ever use CQP.

Slightly more technical explanation

A constant QP encode at Q=18 will stay at Q=18 regardless of the frame. Constant Rate Factor will increase the Q to, say, 20, for high motion frames (compressing them more) and lower it down to 16 for low motion. That means that while the average quality as objectively gauged by PSNR goes slightly down, the *perceptible* image quality goes up.

When you use a constant rate factor, it varies the QP slightly. When a scene has a lot of action and motion, it will raise the QP (compressing more). This is because your eye will be distracted by everything going on, and won't have the image on screen for enough time to see the heavier compression. When a frame doesn't have a lot of motion, it will lower the QP, compressing it less. This is because your eye will have more time to look at the image, so you want it to be as much like the source as possible.

CRF is about improving subjective quality--what the human eye sees--at the expense of objective quality--what a PSNR calculation sees. There is no way for anyone to tell you what your eye will notice on any given film.

If quality goes down in motion, does that mean it gets all blocky like my digital TV?

CRF is not the cause of the blocking you might see on digital cable/sat broadcasts. That derives from too low of a bitrate.

Different bitrates correspond to different compression rate factors with different sources. So 1500kbps will be enough to get an RF of 15 with one source, but only an RF of 20 with another, dirtier source. When you use CRF or CQP you're saying "use whatever bitrate is necessary to preserve this much detail." It's not a 1-to-1 thing.

Those TV broadcasts get blocky because the complex things they're displaying require more bits than the broadcaster has chosen to give them. They say "preserve as much detail as you can while never going above this high a bitrate no matter how complicated things get."

But still…isn't lower quality bad?

When you use CRF, it raises the QP (compressing more, losing more detail) for complex parts, yes. But it doesn't raise it drastically, and it makes sure those complex parts still maintain a set quality level. Just a level a little lower than the simple parts. The bitrate for those parts might still be higher than for the simple parts, because the bitrate needed at a given moment to reach a given rate factor fluctuates. You can go to a lower RF for the simple parts while still keeping a bitrate similar to what you need for the complex parts at a higher RF.

If you use a CRF of 25, sure, you're going to see blocking on high-motion because the bitrate is simply too low. It's going to be using a QP of, like, 27 for the complex parts, which is way too heavy a quantizer. And it'll only use, say, 23 for the simple parts, which isn't quite low enough to drastically increase quality. But if you use reasonable CRF values, in the range of, say, 23-17, this won't occur.

License

Text taken from https://web.archive.org/web/20120311161344/https://trac.handbrake.fr/wiki/CRFGuide and reproduced with permission.

http://slhck.info/articles/crf is the top link in Google:

Note: Parts of this guide were copied from the Handbrake Wiki but has been deleted there. It also shortly appeared on Wikipedia but was removed because it only relied on one source—the Handbrake Wiki. This is an attempt to recover the information, adding a bit here and there. I don't know if there's an original copyright on the content or not. If so, please let me know.

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License