Dolby Vision Filters
Advanced Dolby Vision Topics
Mastering Metadata
Transform supports Dolby Vision Mastering Metadata versions 2.0.5, 4.0.2 and 5.1.0 in the following formats:
- as a sidecar XML file typically produced by the Dolby mastering tools.
- Prototype High Dynamic Range (PHDR). This is a proprietary scheme that frame interleaves the metadata into a JPEG-2000 MXF image track file.
- Isochronous Stream of XML Documents (ISXD). This format embeds the metadata in a separate MXF track file that is IMF compliant (SMPTE RDD47-2018).
Metadata Insertion
Transform can insert Dolby Vision Mastering Metadata into an IMF package in any of the supported formats.
Supported video formats include JPEG-2000 jp2k and Apple ProRes 4:4:4 HQ ap4h or XQ ap4x. Audio must be 16-bit twos or 24-bit in24 PCM. Subtitles must be ISMC profile TTML ttml.
For example the following composition will create an IMF package with PHDR mastering metadata from the following source files:
- a sidecar xmlcontaining the Dolby Vision masteringmetadata.
- a QuickTime movcontaining thepicturetrack, astereoprogram and a 5.1surroundsound program.
- a sidecar ismcfile containing theenglishsubtitles.
---
input:
  container:
  - name: xml
    video:
    - name: metadata
  - name: mov
    video:
    - name: picture
      merge:
        name: metadata
    audio:
    - name: stereo
      select:
        label:
        - Lt
        - Rt
    - name: surround
      select:
        label:
        - L
        - R
        - C
        - LFE
        - Ls
        - Rs
  - name: ismc
    subtitle:
    - name: english
output:
  container:
  - name: imf
  	type: 'imf '
    properties:
      DataContainer: phdr
    video:
    - name: picture
    audio:
    - name: stereo
    - name: surround
    subtitle:
    - name: english
{
  "input": {
    "container": [
      {
        "name": "xml",
        "video": [
          {
            "name": "metadata"
          }
        ]
      },
      {
        "name": "mov",
        "video": [
          {
            "name": "picture",
            "merge": {
              "name": "metadata"
            }
          }
        ],
        "audio": [
          {
            "name": "stereo",
            "select": {
              "label": [
                "Lt",
                "Rt"
              ]
            }
          },
          {
            "name": "surround",
            "select": {
              "label": [
                "L",
                "R",
                "C",
                "LFE",
                "Ls",
                "Rs"
              ]
            }
          }
        ]
      },
      {
        "name": "ismc",
        "subtitle": [
          {
            "name": "english"
          }
        ]
      }
    ]
  },
  "output": {
    "container": [
      {
        "name": "imf",
        "type": "imf ",
        "video": [
          {
            "name": "picture"
          }
        ],
        "audio": [
          {
            "name": "stereo"
          },
          {
            "name": "surround"
          }
        ],
        "subtitle": [
          {
            "name": "english"
          }
        ]
      }
    ]
  }
}
IMF Container Writer
The Interoperable Master Format imf  writer supports the following Dolby Vision related properties:
| Property | Value | Description | 
|---|---|---|
| DataContainer | string or array[string] | phdrDolby Vision metadata frame interleaved.isxdDolby Vision metadata in a separate MXF track file. | 
Metadata Extraction
Transform can extract Dolby Vision Mastering Metadata from an IMF package an MXF video track file or an MXF ISXD track file. This is typically used to create a sidecar XML for iTunes delivery.
For example the following composition will extract Dolby Vision Mastering Metadata from an IMF package:
---
input:
  container:
  - name: imf
    video:
    - name: picture
output:
  container:
  - name: xml
    type: 'dovi'
    video:
    - route:
        name: picture
    properties:
      WriteRevision: true
{
  "input": {
    "container": [
      {
        "name": "imf",
        "video": [
          {
            "name": "picture"
          }
        ]
      }
    ]
  },
  "output": {
    "container": [
      {
        "name": "xml",
        "type": "dovi",
        "video": [
          {
            "route": {
              "name": "picture"
            }
          }
        ],
        "properties": {
          "WriteRevision": true
        }
      }
    ]
  }
}
XML Metadata Writer
The Dolby Vision XML dovi writer creates a sidecar XML file from the frame interleaved metadata. The writer supports the following properties:
| Property | Value | Description | 
|---|---|---|
| WriteRevision | boolean | If trueadds an entry to the metadata RevisionHistory list. | 
| DateTime | string | The revision date and time in ISO8601 format. By default the current date and time is used. | 
| Author | string | The name of the individual or entity that revised the metadata. | 
| Software | string | The name of the software tool used to revise the metadata. | 
| SoftwareVersion | string | The version of the software tool used to revise the metadata. | 
| Comment | string | A description of the revision. | 
Encoding Profiles
Transcode supports the following Dolby Vision encoding profiles:
- Profile 5, Single layer.
Additional Profiles Coming Soon:
- Profile 8.1, Single layer HDR10 compatible.
- Profile 8.4, Single layer HLG compatible.
- SDR from Dolby Vision.
Mastering metadata may be supplied in any of the supported formats.
Distribution Encoding
For consumer distribution video must be encoded using an HEVC codec h265 . Audio is typically encoded as either Dolby Digital Plus ec3  or Dolby Atmos ec3j.
For example the following composition creates a Dolby Vision Profile 5 output for consumer distribution:
---
input:
  container:
  - name: imf
    video:
    - name: picture
    audio:
    - name: sound
output:
  container:
  - name: mp4
    type: 'mp4 '
    video:
    - name: picture
      filter:
      - type: 'dvpr'
        properties:
          Profile: 1
          MaxSceneFrames: 100
      encode:
        type: 'h265'
      attach:
      - type: 'rpu '
        filter:
          type: 'dvpo'
          properties:
            Level1Filter: 1
    audio:
    - name: sound
      encode:
        type: 'ec3 '
{
  "input": {
    "container": [
      {
        "name": "imf",
        "video": [
          {
            "name": "picture"
          }
        ],
        "audio": [
          {
            "name": "sound"
          }
        ]
      }
    ]
  },
  "output": {
    "container": [
      {
        "name": "mp4",
        "type": "mp4 ",
        "video": [
          {
            "name": "picture",
            "filter": [
              {
                "type": "dvpr",
                "properties": {
                  "MaxSceneFrames": 100
                }
              }
            ],
            "encode": {
              "type": "h265"
            },
            "attach": [
              {
                "type": "rpu ",
                "filter": {
                  "type": "dvpo",
                  "properties": {
                    "Level1Filter": 1
                  }
                }
              }
            ]
          }
        ],
        "audio": [
          {
            "name": "sound",
            "encode": {
              "type": "ec3 "
            }
          }
        ]
      }
    ]
  }
}
Pre-Processor
The Dolby Vision pre-processor dvpr filter must be applied to the output video stream prior to encoding. Depending on the encoding profile the pre-processor performs the following:
- noise reduction and color space conversion (profile 5).
- dynamic range reduction (SDR, HDR10, HLG compatibility).
- generation of the Dolby Vision Reference Picture Unit rpumetadata for each frame.
Note that for Dolby Vision Profile 5 the pre-processor converts the video to an unspecified color space. This produces a noticble color shift when viewed using a non-Dolby Vision player.
| Property | Value | Description | 
|---|---|---|
| Profile | enum | 0SDR1Profile 52Profile 8.1 (HDR10)3Profile 8.1 (HDR10 1000 nits)4Profile 8.4 (HLG) | 
| MaxSceneFrames | integer | The maximum number of frames the pre-processor will buffer while searching for a scene boundary. This value should be greater than or equal to the encoded GOP length. | 
| RpuProfile | enum | 0Baseline,1Main,2High | 
| MultiPassMode | enum | 0Scene,1SegmentFirstPass,2SegmentSecondPass | 
Post-Processor
The Dolby Vision post-processor dvpo filter must be applied to the rpu  metadata prior to being attached to the encoded stream.
| Property | Value | Description | 
|---|---|---|
| RpuCompression | enum | 0Basic,1IdrRefresh | 
| Level1Filter | enum | 0None,1Default,2Window | 
| MaxFALL | number | Sets the L6 metadata maximum frame-average light level in nits (cd/m^2). | 
| MaxCLL | number | Sets the L6 metadata maximum content light level in nits (cd/m^2). | 
Contribution Encoding
The pre-processor can all be used to create an SDR, HDR10 or HLG contribution mezzanine. This process uses the Dolby Vision mastering metadata to dynamically convert the master to the desired color space and dynamic range.
For example the following composition converts a Dolby Vision master (with sidecar XML metadata) to an Apple ProRes HDR10 (1000 nit) mezzanine:
---
input:
  container:
  - name: xml
    video:
    - name: metadata
  - name: mxf
    video:
    - name: picture
      merge:
        name: metadata
    audio:
    - name: sound
output:
  container:
  - name: mov
    type: 'mov '
    video:
    - name: picture
      filter:
      - type: dvpr
        properties:
          Profile: 3
      encode:
        type: apcx
    audio:
    - name: sound
      format: in24
{
  "input": {
    "container": [
      {
        "name": "xml",
        "video": [
          {
            "name": "metadata"
          }
        ]
      },
      {
        "name": "mxf",
        "video": [
          {
            "name": "picture",
            "merge": {
              "name": "metadata"
            }
          }
        ],
        "audio": [
          {
            "name": "sound"
          }
        ]
      }
    ]
  },
  "output": {
    "container": [
      {
        "name": "mov",
        "type": "mov ",
        "video": [
          {
            "name": "picture",
            "filter": [
              {
                "type": "dvpr",
                "properties": {
                  "Profile": 3
                }
              }
            ],
            "encode": {
              "type": "apcx"
            }
          }
        ],
        "audio": [
          {
            "name": "sound",
            "format": "in24"
          }
        ]
      }
    ]
  }
}
Updated about 2 years ago
