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)。它挂有一个或多个
滤镜。运行时:
- 该生产器自己的图像被丢弃(隐藏)
- 它挂载的滤镜被应用到下方轨道合成后的视频上
- 上方轨道看到滤波后的结果,并将其作为自己合成的背景
配合 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点和关键帧(动画)参数