MLT 概念
本文帮助你至少对部分 MLT 概念建立基本的理解。MLT 是 Kdenlive 赖以进行音视频合成与渲染的媒体引擎。
请理解,我们无法、也不力求对 MLT 做出全面而详尽的介绍。相反,我们把本文看作一种面向外行的入门导读,旨在帮助你对 MLT 的运作方式形成粗略的初步认识,从而理解 Kdenlive 如何使用 MLT。
如果你想进一步了解 MLT,请阅读官方的 MLT Framework Design (opens in a new tab)(MLT 框架设计)文档。
MLT 的四种基础服务
MLT 的核心是其四种基础服务(或服务类型):
- 生产器(producers) 是单个音频和视频帧的来源。后文我们会看到,既有基础(简单)的生产器,也有更复杂的生产器。
- 消费器(consumers) 是音频和视频帧的汇聚终点(sink)。例子包括屏幕显示(如 Kdenlive 的监视器),或写出视频容器文件的音视频编码器(如 AAC/H.264)。
- 滤镜(filters)(MLT 术语)位于生产器和消费器之间的某个位置。这些滤镜在帧经过时对其进行修改。在 Kdenlive 的用户界面中,你通常是以"效果"的形式看到滤镜的。
- 转场(transitions)(MLT 术语)把两个输入帧合成为一个新的输出帧。详见下文。
生产器
生产器负责"生产"帧。在 MLT 框架中,它们只有在被请求时才生产帧,因为 MLT 遵循"拉取(pulling)帧"的方式;这也是为什么会有牵引器(tractor)和消费器。
唉,生产器类服务还可以进一步细分为:
- 基础生产器(basic producers) 直接从音视频来源生产帧;这些来源可以是文件、设备、标题片段、颜色片段以及其他来源。详见 MLT basic producers。
- 播放列表(playlists) 是生产器的顺序容器,并可包含可选的中间空白间隔。
- 牵引器(tractors) 是……
- 多轨(multitracks) 是……
基础生产器
MLT 自带大量生产器,我们无法在此逐一涉及。相反,我们只是照亮一下在 Kdenlive 语境中我们认为最值得一提的几个生产器。它们是(按出现顺序):
- avformat 和 avformat-novalidate:使用 FFmpeg 读取形形色色的音视频媒体格式
- timewarp:加速或减慢音视频媒体
- pixbuf:读取并解析多种不同的图像格式
- kdenlivetitle:渲染 Kdenlive 标题
- color/colour 生产器:生产单一颜色的帧
Avformat 生产器
avformat 生产器大概是最常用的主力生产器,它使用著名的 FFmpeg 多媒体处理库从音视频媒体文件中生产帧。凡是你能成功交给 FFmpeg 解码或编码的内容,都可以在 Kdenlive 中使用。更多细节请参考 MLT 的 avformat producer 文档。
Avformat-novalidate 生产器
avformat 生产器的这个名为 avformat-novalidate 的变体,用于加快加载那些媒体文件已知良好的播放列表。(另见关于 avformat-novalidate 的这条 MLT 提交信息。)
Timewarp 生产器
timewarp 生产器相对较新,它允许将视频和音频加速(最高 20 倍)或减慢(低至 0.01 倍)。它甚至能在 0.01 倍到 20 倍这同一范围内反向播放音频和视频。
Timewarp 实际上是一个被封装的生产器。另见 MLT timewarp producer 文档。Kdenlive 在内部使用这个生产器来模拟"速度"效果(严格来说,它并不是 MLT 滤镜,而是一个 MLT 生产器)。
Pixbuf 生产器
pixmap 生产器从广泛的位图与矢量图形格式生产帧。它在底层使用 GDK pixbuf,因此得名(另见
MLT pixbuf producer 文档)。这个生产器的若干显著特性:
- 它支持图像序列。为此,resource 属性(即路径和文件名)需要包含通配符 "/.all."(注意结尾的点)。生产器随后会从该路径下加载所有匹配以下扩展名的图像文件。
- 部分支持的图像文件格式包括:
- PNG (.png)
- JPEG (.jpg, jpeg)
- SVG (.svg)
- TIFF
- XPM
- ……以及更多。
Kdenlivetitle 生产器
给 kdenlivetitle 生产器喂一些 XML,它就会生产包含漂亮标题的帧。描述标题的 XML 必须直接包含在该服务的 xmldata 属性中。
Color/Colour 生产器
这个生产器有两个名字:color 和 colour。它只是生产单一颜色的帧。颜色和 alpha(透明度)信息编码在生产器的 resource 属性中。该 resource 属性可以取以下值:
- 文本形式的 32 位十六进制值,格式为 RRGGBBAA。其中 RR 是 8 位红色通道值,范围从
00到ff。同理,GG 和 BB 分别编码 8 位的绿色和蓝色通道值。AA 是 8 位的 alpha 值,ff表示完全不透明,00表示完全透明。 - 少数广为人知的颜色名称,尤其是
black和white。
注意: Kdenlive 在其时间线内部最底层的黑轨上使用 colour(!) 生产器。相比之下,Kdenlive 对所有(工程)素材箱(bin)颜色片段使用 color 生产器。这可真是政治正确啊!
牵引器(Tractors)
MLT 的设计有些独特:它不使用渲染树。相反,MLT 使用它所谓"网络"(带引号,另见 MLT Framework Design (opens in a new tab) 文档)。这些网络把生产器连接到消费器,中间夹着滤镜(用于效果)和转场(用于混合)。
要从多条(时间线)轨道的生产器中拉取帧、并在时间上正确协调它们,最终得到用于输出的单一帧,一个关键元素就是 MLT 的 tractor(牵引器)。没错,它真的就叫"tractor"。
注意: 后文我们会了解播放列表(playlists),它是生产器的一种(子)类型。tractor 和 playlist 的重要区别在于:playlist 只能把一个接一个地(即顺序地)使用多个生产器;而 tractor 可以在同一时间并行地使用生产器。
消费器
TODO
滤镜
TODO
转场
MLT 的"transition"(转场)一词可能会让很多读者感到困惑;其他非线性视频剪辑软件用得越久,就越困惑。简单地说,MLT 的转场是混合器(mixer),它把恰好两个输入帧合成一个新的单一输出帧。
注意: 这是有意做的略微简化;更技术上地说,MLT 的转场仍然输出两个帧,其中所谓"B 帧"原样输出不做修改,只有"A 帧"是由输入的 A 帧和 B 帧混合而来。