(MLT 框架)<tractor> 如何在考虑 <transition> 的情况下决定使用哪个 <track> 的框架?

(MLT Framework) How does a <tractor> decide which frame to use from which <track>, taking <transition>s into account?

我无法真正理解为什么 MLT,以下面的例子为例,使用来自音轨 #1(中间音轨)的视频帧,而不是来自音轨 #0 和音轨 #2 合成的视频帧。有什么解释吗?

让我们假设一个简单的 MLT 设置,大致如下:

<mlt>
  ... <!-- some producers here -->
  <tractor>
    <multitrack>
      <track producer="playlist1"/>
      <track producer="playlist2"/>
      <track producer="playlist3"/>
    </multitrack>
    <transition id="transition1">
      <property name="a_track">0</property>
      <property name="b_track">2</property>
      <property name="mlt_service">composite</property>
    </transition>
  </tractor>
</mlt>

现在我们还假设所有三个播放列表都有以相同入点和出点开始的视频剪辑。也就是说,所有三个剪辑都相互重叠。

在没有任何过渡的情况下,如果我是正确的,我理解拖拉机的工作方式是它总是从轨道 #2 中获取 "topmost" 视频帧,即从 "playlist3"。

但是在 "transition1" 就位后,拖拉机从轨道 #1 获取框架,又名 "playlist2"。请记住,所有三个播放列表都有相同的入点和出点,因此它们在时间上重叠。

有人可以向我解释为什么拖拉机现在 "produces" 视频帧来自音轨 #1 而不是来自音轨 #2 的合成到音轨 #0 吗?

否则我会期待后者或来自轨道 #2,但使用 Kdenlive 的快速检查显示仅拍摄来自轨道 #2 的视频帧。为什么?

正如我现在了解到的,使用过渡基本上 "consumes" 过渡期间的 top/B 轨道。这实际上是有道理的,尽管它使 MLT 有点违反直觉。考虑到 "consumer rule",我上面的示例工作如下:

  1. 曲目 0、1、2 存在。
  2. 过渡 1 占用轨道 2。
  3. 轨道 0 和 1 还剩。
  4. track 1 现在是产生帧的最上面的轨道。