Video Usability Information (VUI) Guide
by Christian Heine ( sennindemokrit at gmx dot net )

1. Sample Aspect Ratio
-----------------------

* What is it?
    The Sample Aspect Ratio (SAR) (sometimes called Pixel Aspect Ratio or just
    Pel Aspect Ratio) is defined as the ratio of the width of the sample to the
    height of the sample. While pixels on a computer monitor generally are
    "square" meaning that their SAR is 1:1, digitized video usually has rather
    odd SARs. Playback of material with a particular SAR on a system with
    a different SAR will result in a stretched/squashed image. A correction is
    necessary that relies on the knowledge of both SARs.

* How do I use it?
    You can derive the SAR of an image from the width, height and the
    display aspect ratio (DAR) of the image as follows:
    
    SAR_x   DAR_x * height
    ----- = --------------
    SAR_y   DAR_y * width
    
    for example:
    width x height = 704x576, DAR = 4:3 ==> SAR = 2304:2112 or 12:11
    
    Please note that if your material is a digitized analog signal, you should
    not use this equation to calculate the SAR. Refer to the manual of your
    digitizing equipment or this link instead.

    A Quick Guide to Digital Video Resolution and Aspect Ratio Conversions
    http://www.iki.fi/znark/video/conversion/

* Should I use this option?
    In one word: yes. Most decoders/ media players nowadays support automatic
    correction of aspect ratios, and there are just few exceptions. You should
    even use it, if the SAR of your material is 1:1, as the default of x264 is
    "SAR not defined".
    
2. Overscan
------------

* What is it?
    The term overscan generally refers to all regions of an image that do
    not contain information but are added to achieve a certain resolution or
    aspect ratio. A "letterboxed" image therefore has overscan at the top and
    the bottom. This is not the overscan this option refers to. Neither refers
    it to the overscan that is added as part of the process of digitizing an
    analog signal. Instead it refers to the "overscan" process on a display
    that shows only a part of the image. What that part is depends on the
    display.
    
* How do I use this option?
    As I'm not sure about what part of the image is shown when the display uses
    an overscan process, I can't provide you with rules or examples. The safe
    assumption would be "overscan=show" as this always shows the whole image.
    Use "overscan=crop" only if you are sure about the consequences. You may
    also use the default value ("undefined").

* Should I use this option?
    Only if you know exactly what you are doing. Don't use it on video streams
    that have general overscan. Instead try to to crop the borders before
    encoding and benefit from the higher bitrate/ image quality.

    Furthermore the H264 specification says that the setting "overscan=show"
    must be respected, but "overscan=crop" may be ignored. In fact most
    playback equipment ignores this setting and shows the whole image.

3. Video Format
----------------

* What is it?
    A purely informative setting, that explains what the type of your analog
    video was, before you digitized it.
    
* How do I use this option?
    Just set it to the desired value. ( e.g. NTSC, PAL )
    If you transcode from MPEG2, you may find the value for this option in the
    m2v bitstream. (see ITU-T Rec. H262 / ISO/IEC 13818-2 for details)

* Should I use this option?
    That is entirely up to you. I have no idea how this information would ever
    be relevant. I consider it to be informative only.

4. Full Range
--------------

* What is it?
    Another relic from digitizing analog video. When digitizing analog video
    the digital representation of the luma and chroma levels is limited to lie
    within 16..235 and 16..240 respectively. Playback equipment usually assumes
    all digitized samples to be within this range. However most DVDs use the
    full range of 0..255 for luma and chroma samples, possibly resulting in an
    oversaturation when played back on that equipment. To avoid this a range
    correction is needed.

* How do I use this option?
    If your source material is a digitized analog video/TV broadcast it is
    quite possible that it is range limited. If you can make sure that it is
    range limited you can safely set full range to off. If you are not sure
    or want to make sure that your material is played back without
    oversaturation, set if to on. Please note that the default for this option
    in x264 is off, which is not a safe assumption.
    
* Should I use this option?
    Yes, but there are few decoders/ media players that distinguish
    between the two options.
    
5. Color Primaries, Transfer Characteristics, Matrix Coefficients
-------------------------------------------------------------------

* What is it?
    A videophile setting. The average users won't ever need it.
    Not all monitor models show all colors the same way. When comparing the
    same image on two different monitor models you might find that one of them
    "looks more blue", while the other "looks more green". Bottom line is, each
    monitor model has a different color profile, which can be used to correct
    colors in a way, that images look almost the same on all monitors. The same
    goes for printers and film/ video digitizing equipment. If the color
    profile of the digitizing equipment is known, it is possible to correct the
    colors and gamma of the decoded h264 stream in a way that the video stream
    looks the same, regardless of the digitizing equipment used.
    
* How do I use these options?
    If you are able to find out which characteristics your digitizing equipment
    uses, (see the equipment documentation or make reference measurements)
    then find the most suitable characteristics in the list of available
    characteristics (see H264 Annex E) and pass it to x264. Otherwise leave it
    to the default (unspecified).
    If you transcode from MPEG2, you may find the values for these options in
    the m2v bitstream. (see ITU-T Rec. H262 / ISO/IEC 13818-2 for details)

* Should I use these options?
    Only if you know exactly what you are doing. The default setting is better
    than a wrong one. Use of this option is not a bad idea though.
    Unfortunately I don't know any decoder/ media player that ever even
    attempted color/gamma/color matrix correction.

6. Chroma Sample Location
--------------------------

* What is it?
    A videophile setting. The average user won't ever notice a difference.
    Due to a weakness of the eye, it is often economic to reduce the number of
    chroma samples in a process called subsampling. In particular x264 uses
    only one chroma sample of each chroma channel every block of 2x2 luma
    samples. There are a number of possibilities on how this subsampling is
    done, each resulting in another relative location of the chroma sample
    towards the luma samples. The Chroma Sample Location matters when the
    subsampling process is reversed, e.g. the number of chroma samples is
    increased. This is most likely to happen at color space conversions. If it
    is not done correctly the chroma values may appear shifted compared to the
    luma samples by at most 1 pixel, or strangely blurred.

* How do I use this option?
    Because x264 does no subsampling, since it only accepts already subsampled
    input frames, you have to determine the method yourself.

    If you transcode from MPEG1 with proper subsampled 4:2:0, and don't do any
    color space conversion, you should set this option to 1.
    If you transcode from MPEG2 with proper subsampled 4:2:0, and don't do any
    color space conversion, you should set this option to 0.
    If you transcode from MPEG4 with proper subsampled 4:2:0, and don't do any
    color space conversion, you should set this option to 0.

    If you do the color space conversion yourself this isn't that easy. If the
    filter kernel of the subsampling is ( 0.5, 0.5 ) in one direction then the
    chroma sample location in that direction is between the two luma samples.
    If your filter kernel is ( 0.25, 0.5, 0.25 ) in one direction then the
    chroma sample location in that direction is equal to one of the luma
    samples. H264 Annex E contains images that tell you how to "transform" your
    Chroma Sample Location into a value of 0 to 5 that you can pass to x264.
    
* Should I use this option?
    Unless you are a perfectionist, don't bother. Media players ignore this
    setting, and favor their own (fixed) assumed Chroma Sample Location.


