docs
FX 剪切说明

FX 剪切说明

概述

FX Cut(也称为调整片段 adjustment clip)是一种把滤镜应用到时间线某一段区域 而不必把它们挂在特定片段上的方式。它就像 Adobe After Effects 或 DaVinci Resolve 中的 调整图层(adjustment layer):FX Cut 位于自己的轨道上,并在它所占据的时间 范围内把自身的滤镜应用到其下方所有轨道的视频上。FX Cut 上方的轨道(例如标题或 叠加层)会被合成到已滤波的结果之上,但它们本身不会被 FX Cut 的滤镜处理。

工作原理

FX Cut 是一个把属性 meta.fx_cut 设为 1 的生产器(producer)。它挂有一个或多个 滤镜。运行时:

  1. 该生产器自己的图像被丢弃(隐藏)
  2. 它挂载的滤镜被应用到下方轨道合成后的视频上
  3. 上方轨道看到滤波后的结果,并将其作为自己合成的背景

配合 melt 使用

对视频片段在时间线的一部分区间上应用棕褐色(sepia)效果:

melt video.mp4 -track -blank 50 -producer color:0 meta.fx_cut=1 out=99 -attach sepia

这会创建一个两轨的 multitrack,其中:

  • 轨道 0(T0):视频
  • 轨道 1(T1):前 50 帧为空,随后 100 帧为棕褐色效果

sepia 滤镜只在 FX Cut 的时长内(第 51–151 帧)生效。

多个 FX Cut 可以放在同一条轨道上,彼此之间用空片段隔开:

melt video.mp4 -track -blank 20 -producer color:0 meta.fx_cut=1 out=30 -attach sepia \
                       -blank 40 -producer color:0 meta.fx_cut=1 out=20 -attach greyscale

配合 MLT XML 使用

<producer id="fx_sepia" in="0" out="100">
  <property name="mlt_service">color</property>
  <property name="resource">0</property>
  <property name="mlt_image_format">rgba</property>
  <property name="meta.fx_cut">1</property>
  <filter>
    <property name="mlt_service">sepia</property>
  </filter>
</producer>

<playlist id="fx_track">
  <blank length="50"/>
  <entry producer="fx_sepia" in="0" out="100">
    <property name="meta.fx_cut">1</property>
  </entry>
</playlist>

重要: meta.fx_cut 属性必须同时设置在生产器和播放列表条目(剪切片段)上, 该机制才能正确工作。

配合 C++ API 使用

// Create the FX Cut producer
Mlt::Producer fx(profile, "color", "0");
fx.set("mlt_image_format", "rgba");
fx.set("meta.fx_cut", 1);

// Attach a filter
Mlt::Filter sepia(profile, "sepia");
fx.attach(sepia);

// Add to a playlist (track)
Mlt::Playlist track;
track.blank(49);  // blank for 50 frames
track.append(fx, 0, 100);

// Set up the multitrack
Mlt::Tractor tractor;
tractor.set_track(*video_producer, 0);
tractor.set_track(track, 1);

要求

  • FX Cut 生产器必须把 meta.fx_cut 设为 1
  • 占位生产器通常是 color:0(透明黑)并配合 mlt_image_format=rgba, 不过任何生产器都可以使用
  • 挂在 FX Cut 上的滤镜支持 in/out 点和关键帧(动画)参数