schema_version: 0.1
type: transition
identifier: matte
title: Matte
version: 1
copyright: Meltytech, LLC
creator: Maksym Veremeyenko
license: LGPLv2.1
language: en
tags:
  - Video
description: >
  Replace the alpha channel of track A with the luma channel from track B.
notes: |
  Please note that the transition automatically detects if the frame
  from track B has scaled or non-scaled luma. The frame property
  "full_range" should indicate it.

  If you need to prepare fill and key (matte) files, you can use melt or
  ffmpeg to extract alpha channel from existing video:

  melt sg_gm_2013_clip_title.avi -attach frei0r.alpha0ps 0=0.21 -consumer \
    avformat:sg_gm_2013_clip_title.matte_scaled.mp4 crf=10 preset=placebo an=1

  ffmpeg -i sg_gm_2013_clip_title.avi -vf "alphaextract" -pix_fmt \
    yuv422p -preset placebo -crf 10 -y sg_gm_2013_clip_title.matte_scaled.mp4

  Because the example above provides a scaled luma output, the transition
  performs scaling from [16,235] -> [0, 255].
  It is possible to create unscaled (full) range:

  melt sg_gm_2013_clip_title.avi -attach frei0r.alpha0ps 0=0.21 -consumer \
    avformat:sg_gm_2013_clip_title.matte_full.mp4 crf=10 preset=placebo an=1 \
    mlt_image_format=rgba pix_fmt=yuvj422p

  ffmpeg -i sg_gm_2013_clip_title.avi -vf "alphaextract" -pix_fmt \
    yuvj422p -preset placebo -crf 10 -y sg_gm_2013_clip_title.matte_full.mp4

  The fill can be converted from rgba to yuv422:
  melt sg_gm_2013_clip_title.avi -consumer avformat:sg_gm_2013_clip_title.fill.mp4 \
    crf=10 preset=placebo an=1

  ffmpeg -i sg_gm_2013_clip_title.avi -pix_fmt yuv422p -preset placebo -crf 10 -y \
    sg_gm_2013_clip_title.fill.mp4

  Putting it all together:

  melt sg_gm_2013_clip_title.matte_full.mp4 -track noise: -track \
    sg_gm_2013_clip_title.fill.mp4 -transition matte a_track=2 \
    b_track=0 -transition composite a_track=1 b_track=2
