Copy link to clipboard
Copied
I am trying to understand how color depth works. So there are two things to consider:
After Effects lets me select between 8, 16, and 32 bits per channel in the project settings:
However, when I go to export, I get this nonsense:
I don't understand what corresponds to what. How many bits per channel is each of these options? Essentially, I want this table filled in:
Depth | Bits Per Channel (BPC) |
---|---|
256 Colors | |
Millions of Colors | |
Millions of Colors+ | |
Trillions of Colors | |
Trillions of Colors+ | |
Floating Point | |
Floating Point+ |
I'm assuming that Millions of Colors is 8 bits per channel, but I'm not confident. I feel like it might be 10. Here's an example of what I mean:
When I export using these settings:
And then I import that exported MXF file into After Effects, I get this:
So if I exported it with "Millions of Colors", why does it get imported as having "Trillions of Colors"? I just don't understand this.
Copy link to clipboard
Copied
The color depth for the project decides the accuracy of calculations when all the layers and effects are combined together. Even if your source footage is all in 8 bits per channel, adding something like the Glow effect can generate pixels which are in between the 256 allowed color values, so you gain smoothness by changing the project to 16pbc or 32bpc, at the expense of slower processing and much more RAM.
The "Depth" menu under Video Output uses the old fashioned way of describing bit depth. It multiplies the number of possible values for R, G and B, and shows "+" if it also includes an alpha channel.
For 8bpc data (0-255) we get 256*256*256 = 16,777,216 = "millions" of colors.
16bpc = "trillions" (32768 values per channel)
32bpc = "floating point" (in 32bpc we use decimals to represent each channel)
"256 colors" is a special case where only one 8-bit channel is exported
We stopped using this descriptor years ago because it falls apart when you have extra channels (e.g. in EXR). After Effects never bothered to change the menu.
However this is only the bit depth of the data that After Effects sends to the encoder library. The bit depth of the exported file also depends on what the particular codec can support. If you send 16bpc "trillions" to a codec that only stores 10-bit numbers, then your file will only be 10pbc. If you send 8pbc "millions" to a codec that always stores data in 16-bit, then the file will contain 16-bit numbers but they will be limited to only 256 possible values. Also if your project is in 8pbc, changing the Video Output menu to Floating Point doesn't magically increase the quality.
Copy link to clipboard
Copied
This is helpful, but to make sure I'm understanding, let's take this scenario. Suppose I am working in a project using a bit depth of 16 bpc.
Then I want to export using the MXF OP1a AVC-Intra Class 100 1080 59.94 fps codec. I know that the final video file is 10 bpc.
However, the bit depth was chosen to be "millions of colors" because that's the only option that After Effects give me in the "Output Module Settings."
Because "Millions of Colors" refers to 8 bits per channel, even though my project is in 16 bpc, and even though my codec of choice supports 10 bit per channel color, I assume that my video is actually only truly 8 bpc because I have "Millions of Colors" selected. Am I correct, or is my video truly 10 bpc?
Copy link to clipboard
Copied
You must be using a legacy version of After Effects - MXF rendering is now done in Media Encoder, where the bit depth is handled behind the scenes. All you get is the "render at maximum depth" box, which you should tick if the project depth is less than the output file can support. Unticked the headless link to AE uses whatever the project depth was, ticked it temporarily toggles to 32bpc.
Normally when you select an output codec in AE's render queue settings window, the "Depth" menu is automatically restricted to the correct value(s). Obviously I can't test with MXF anymore, but for AVI and image sequences it works properly - e.g. selecting an 8-bit AVI codec only allows "Millions", selecting EXR only allows "Floating Point", etc.
Nothing in any of the menus or codec information tools will say if the data inside a 10-bit codec has been limited to only 256 possible values, you have to inspect the frames. So if you want to verify the differences in your setup, create a solid layer with a gentle gradient ramp (mid-gray to slightly-lighter-mid-gray), and export it through to MXF in various combinations of bit depth. Bring them back into the project and switch the project depth to 32bpc, so the gradient ramp is calculated in floating point, whack an extreme contrast boosting adjustment layer on top and compare the posterization, or lack thereof.
You will certainly be able to see a stark difference between the original gradient ramp and the re-imported files, but probably not much between the 8 and 10 bit flavors. There will be more variation in color than in brightness, thanks to the RGB<>YUV transforms.
Copy link to clipboard
Copied
Thank you very much for that suggestion. I have confirmed that the output is indeed using all 10 bits per channel when rendered out with the project settings in 16 bpc, despite the fact that I chose "Millions of Colors." I'll document my results here for future reference:
For all of the tests, the same gradient was exported using the same codec and the same "Millions of Colors" option, with the only different being the project's bit depth.
Original AE Project was in 8 bpc:
Original AE project was in 16 bpc:
Original AE project was in 32 bpc:
So, despite the fact that "Millions of Colors" was selected as the output depth in all scenarios, and all of those MXF files are listed as storing the video in 10 bpc, we can see that if the project bpc was 16 or higher, then the MXF codec does indeed use those extra two bits.
So I guess "Millions of Colors" could mean 8 or 10 bpc.
Copy link to clipboard
Copied
I assume you are aware that it is illegal to use CC 2014. All licenses were revoked in May. Users running versions before CC2018 can be sued for trademark infringement, so not the best plan to advertise it with screenshots.
Upgrade to CC2019, export your MXFs through Media Encoder, and none of this "millions vs trillions" stuff matters.
Copy link to clipboard
Copied
That's the first time I heard this. Would you care to explain the reason behind this? And what's with older projects, that would need to be digged out again?
Copy link to clipboard
Copied
I was so blown away by the absurdity of this concept that, instead of "killing the messenger" and commenting something snarky, I google'd it...
Adobe gets sued for license infringement for once...BLOODY FASCINATING.
Copy link to clipboard
Copied
So it's a legality/copyright thing. Probably distributed 3rd party stuff that cancelled their contracts for further usage. Very unlikely they'll sue you for using something old (if you still got such old apps around). I'm sure this is Adobes way to not get into hot water with it's old contractors.