[Cin] 8-bit vs 10-bit 420 and 422 pixel formats
Terje J. Hanssen
terjejhanssen at gmail.com
Sun Jul 28 12:18:26 CEST 2024
Den 25.07.2024 17:16, skrev Terje J. Hanssen:
> Usually 8-bit color depth is refered to 420 pixel formats and 10-bit
> to the higher color quality 422 pixel formats,
> which sub-sampled keeps respectively 25% and 50% color information,
> compared with a full 444 format.
>
> But what about the "opposite" cases, 10-bit 420 and 8-bit 422 pixel
> formats?
> What and when are they used and good for (applications)?
> For example frame grabbers like my HDMI->USB3 mini capture card, looks
> to support 'YUY2',' a 8-bit 422 pixel format.
>
> And among 8-bit and 10-bit depths, there are 'yuv', 'nv', 'y' and 'p'
> prefixed pixel formats as well.
I have found some more useful information and references to this topic,
and add related extracts from these below (some overlapped):
YUY2
* is a packed color format that uses 4:2:2 chroma subsampling. Each
pixel has either a U or V sample, but not both.
* is a Chroma subsampled YUV Color Space with chroma sampled at half
the horizontal Resolution Luma is sampled at. YUY2 is mostly used
for analog Capture and editing because it's generally not considered
compressed enough for storage or transmission purposes.
YV12
* is a planar color format that uses 4:2:0 chroma subsampling. Each
chroma sample is located at the nexus of 4 pixels. In the diagram
below the chroma layers are shown relative to pixel positions.
* is a Chroma subsampled YUV Color Space with chroma sampled at half
the horizontal and vertical Resolution Luma is sampled at. YV12 is
primarily used for compressing for storage and transmission because
it's not as good as YUY2 for editing. DVD uses YV12
https://www.afterdawn.com/guides/archive/digital_video_fundamentals-color_formats_page_5.cfm
YUY2
* As described in 4:2:2 Video Pixel Formats, except that two lines of
output Cb and Cr samples are produced for each actual line of 4:2:0
Cb and Cr samples. The second line of each pair of output lines is
generally either a duplicate of the first line or is produced by
averaging the samples in the first line of the pair with the samples
of the first line of the next pair.
YV12
* All Y samples are found first in memory as an array of unsigned char
(possibly with a larger stride for memory alignment), followed
immediately by all Cr samples (with half the stride of the Y lines,
and half the number of lines), then followed immediately by all Cb
samples in a similar fashion.
NV12
* A format in which all Y samples are found first in memory as an
array of unsigned char with an even number of lines (possibly with a
larger stride for memory alignment). This is followed immediately by
an array of unsigned char containing interleaved Cb and Cr samples.
If these samples are addressed as a little-endian WORD type, Cb
would be in the least significant bits and Cr would be in the most
significant bits with the same total stride as the Y samples. NV12
is the preferred 4:2:0 pixel format.
NV21
* The same as NV12, except that Cb and Cr samples are swapped so that
the chroma array of unsigned char would have Cr followed by Cb for
each sample (such that if addressed as a little-endian WORD type, Cr
would be in the least significant bits and Cb would be in the most
significant bits).
https://learn.microsoft.com/en-us/windows-hardware/drivers/display/4-2-0-video-pixel-formats
https://www.loc.gov/preservation/digital/formats/fdd/fdd000364.shtml
YUY2
* is a type of YUV that samples the luma once every pixel but only
samples the chroma once every horizontal pair of pixels - the point
being that the human eye doesn't really notice that the chroma of
the two pixels is the same when the luma values are different. It's
just like the way you can be less accurate when coloring in a black
and white picutre than if you were making the picture from scratch
with only colored pencils.
* So basically YUY2 stores color data at a lower accuracy than RGB
without us really noticing that much. Effectively what happens is
that the chroma information is half the regular vertical resolution.
* Due to this nature of YUY2, when you convert between YUY2 and RGB
you either lose some data (as the chroma is averaged), or
assumptions have to be made and data must be guessed at or
interpolated (because the chroma is averaged already we can't find
out what the real value was before).
YV12
* Even less chroma sampling
* is much like YUY2 but takes this one step further. Where YUY2
samples chroma once in every 2 pixels in a row, YV12 samples chroma
once in every 2x2 pixel block! You'd think that only having one
chroma sample in a 2x2 square would look terrible but the fact is
that we don't really notice the difference all that much. Of course,
because there are so many less chroma samples (it's effectively half
the resoltion than the luma) there is less information to store
which is great for saving bits. All major distribution codecs use a
1 chroma for 4 pixels method - including MPEG2 on DVDs.
https://www.animemusicvideos.org/guides/avtech/colorspace.html
Avisynthplus: Color formats and YV12 (a frameserver available for
Windows, Linux, BSD and MacOS):
What is YV12?
* These are several different ways to represent colors. For example:
YUV and RGB colorspace. In YUV colorspace there is one component
that represent lightness (luma) and two other components that
represent color (chroma). As long as the luma is conveyed with full
detail, detail in the chroma components can be reduced by
subsampling (filtering, or averaging) which can be done in several
ways (thus there are multiple formats for storing a picture in YUV
colorspace). YV12 is such a format (where chroma is shared in every
2x2 pixel block) that is supported by AviSynth. Many important
codecs stored the video in YV12: MPEG-4 (x264, XviD, DivX and many
others), MPEG-2 on DVDs, MPEG-1 and MJPEG.
* The subsampling used by YV12 is also called "4:2:0" compared to
"4:2:2" which is used by YUY2 and UYVY.
What will be the main advantages of processing in YV12?
* speed increase:
* That depends entirely on the external plugins whether they will have
YV12 support or not. Speed increases like 25-35 percent are
expected. Of course there will only be a large speed increase if
both your source and target are in YV12, for example in DVD to
DivX/Xvid conversions.
* no color conversions:
* The colour information doesn't get interpolated (so often) and thus
stays more realistic.
MPEG-2 encoders such as CCE, Procoder and TMPGEnc can't handle YV12
input directly. CCE and Procoder needs YUY2, and TMPGEnc RGB24. This
only means that the last line of AviSynth must be a ConvertToYUY2 (for
CCE/Procoder, or ConvertToRGB24 for TMPGEnc) call, and that you will not
be able to take full advantage of YV12 colorspace. Still there are two
advantages:
* All internal filtering in AviSynth will be faster though (less data
to filter, better structure to filter, and a very fast conversion
from YV12 to YUY2), and you will definitely be able to tell the
difference between v2.06 and v2.5.
* If you are making a progressive clip there is another advantage.
Putting off the YV12->YUY2 conversion until the end of the script
allows you to first IVTC or Deinterlace to create progressive
frames. But the YV12 to YUY2 conversion for progressive frames
maintains more chroma detail than it does for interlaced or
field-based frames.
http://avisynth.nl/index.php/FAQ_YV12#What_is_YV12.3F
http://avisynth.nl/index.php/Avisynthplus_color_formats#Color_Format_Table
> ......snip
> References:
> Chroma Subsampling in ffmpeg
> https://trac.ffmpeg.org/wiki/Chroma%20Subsampling#SettingChromaSubsamplinginffmpeg
> Preferred YUV Formats (Microsoft Windows, Learn)
> https://learn.microsoft.com/en-us/windows/win32/medfound/10-bit-and-16-bit-yuv-video-formats#preferred-yuv-formats
>
>
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.cinelerra-gg.org/pipermail/cin/attachments/20240728/4d92b4de/attachment.htm>
More information about the Cin
mailing list