Transcoding Footage to a Higher Bit Depth Won’t Increase Quality
I’m writing this article because I see a lot of misinformation about this around the internet, and it’s a pretty fundamental concept: Transcoding your footage to a higher bit depth will not increase its quality.
The misunderstanding comes from confusions about capturing vs transcoding. Capturing at a higher bit depth is pretty much always a good thing for image quality. If you can capture at a higher bit depth, that’s great – go for it.
But if you are just transcoding from one codec to another, then the decision to encode to a higher-bit-depth codec (from 8-bit source to 10-bit output, for example) will not improve the image at all. It probably won’t hurt, but it also won’t help.
Bit depth fundamentals
If you watched my video on codecs, you’ll remember this illustration: imagine that you want to draw a picture of a beautiful sunset.
… but you’re drawing a picture with crayons, and you have only 10 different colors.
The sunset will have a thousand fine shades of reds, oranges, and yellows, but you only have 1 red, 1 orange, 1 yellow, and 1 purple crayon. You can sort of draw a sunset, but it’s not going to capture the fine nuances of the sky.
If you have a big box of 30 crayons, now you might have 3 different reds, 3 oranges, 3 yellows, and 3 purples.
Now you can do a better job of capturing the different shades in the sunset and the sky, though it’s still far from perfect.
If you had a box of 1,000 crayons, you could do an even better job. If you had 2000 crayons, you could do an even better job. That’s basically how bit-depth works. More bit depth means you’ve got more crayons.
8-bit gives you about 16 million crayons.
10-bit gives you a billion.
12-bit gives you 68 billion.
16-bit gives you 281 trillion.
That’s a lot of crayons.
More colors won’t help you
Ok, back to transcoding. Transcoding is like copying the picture from one sheet of paper to another. If you have one picture that was drawn with only 10 crayons, and you want to copy it with 10 crayons, then you’re good – you can copy all of those colors. You don’t need the big box of 30 crayons.
If you really wanted to copy the picture with your 30-crayon set, then sure, no problem. But those extra 20 crayons aren’t going to make the picture any better because you won’t use them. This is why transcoding to a codec with higher bit depth won’t help your image. You have more colors to choose from, but you won’t end up using them because your source image didn’t use them.
So, if you are transcoding without altering the image, then you don’t gain anything by increasing the bit rate.
When you should export to higher bit depth
If you are altering the image in any way (via color-correction, LUTs, VFX, etc), then you should consider exporting to a higher bit depth. This is different from “transcoding,” however, which is the process of converting footage from one format to another.
Here are some illustrations:
Imagine that I have 10 crayons, and I draw 3 squares of red, orange, and yellow.
I can copy them to another sheet with 10 crayons. No problem.
But what if I shift the image a bit darker in my color correction?
Now I’ve got 3 new colors. My 10-crayon set isn’t good enough, now. If I were to try to copy this image with a 10-crayon set, I would have to just pick my original red, orange and yellow crayons. My new color correction would be lost entirely! This is a simplified example, but the same principle applies if you’re going from 255 colors to 1024 colors.
Hopefully now you can see why, if you’re going to do color correction, then you should probably think about increasing the bit depth when you export from your color software, especially if your source footage is 8-bit.
LUTs are essentially color-correction presets, so the same logic applies to LUTs.
If you’re applying a LUT during the transcode with a direct intermediate workflow, then you almost definitely want to export to a high-bit-depth codec. If you’re adding a LUT during a transcode to do an offline edit with a proxy workflow, however, then 8-bit should be just fine because those files are just temporary files.
You also should consider exporting to a higher bit-depth format after you have done any VFX or image processing work.
For example, imagine all the new colors we’d need if I just added a blur to the three squares from before:
We went from 3 colors to over 300 colors, just by adding a blur. I didn’t do a “color correction” to my squares, but my blur effect generated a whole bunch of new colors.
Another way that you might process your footage when you’re transcoding is with a dithering process. You normally only do this when changing bit depths, but if you add a dither, you can sort-of create some extra information.
The concept of dithering is complex and more than I have time to explain here, but you can read a basic explanation here.
If you think that dithering will help improve your image quality, you should note that doing the dither during the transcode will not give you any advantage over doing it during the rendering process, and it will likely be simpler to do it then.
There is one other historical reason why transcoding from an 8-bit codec to a 10-bit codec might help you, but it’s no longer relevant with today’s technology. It used to be that some editing software would work in a higher bit depth if you loaded higher-bit-depth footage. The footage itself would trigger the software to render in higher bit depth. Nowadays, all video editors (FCPx, Premiere, Media Composer) can render in high bit depths. It’s a question of which settings you check, not what type of footage you use. You can give it 8-bit footage but set it to render in a higher bit depth.
And lastly, you may choose a higher bit-depth codec because it is an otherwise good codec, but just don’t choose it for its bit depth. It might be a great idea to transcode your h.264 footage to ProRes because it will speed up your editing, but it’s not going to make your images somehow look better.