Melt的插件众多 ( consumers, filters, producers, transitions ),但文档只有简单的一些参数说明,用起来犹如秉烛夜行,举步维艰。 下面试着把我已经搞懂的插件的作用和用法罗列出来,以便后人参考。

注意:本文介绍插件时并未提及全部的属性,完整属性请参与文档。

发生器 Producer

Core

  • avformat 读取本地视频(音频)文件作为视频(音频)输入

  • tone 生成一段音调,可以配频率、相位和峰值。用他可以生成一些简单的曲调,比如:

qmelt -blank out=:1.0 -audio-track
tone frequency=523 level=0dB out=:0.2
tone frequency=523 level=0dB out=:0.2
tone frequency=587 level=0dB out=:0.2
tone frequency=659 level=0dB out=:0.2 ```

  • noise 生成白噪声视音频,也就是俗称的雪花屏

  • xml 读取 xml 格式配置文件

  • timewarp 改变视频的播放速度,用法:

qmelt timewrap:0.25:example.mp4 # 1/4 倍速播放 qmelt timewrap:-1.0:example.mp4 # 反向播放 ```

  • colour 生成指定颜色的一段视频,参数可以是 HTML 风格的颜色值

    -video-track colour:"#00FF00" out=:2.0  # 生成一段2秒的绿色视频
    
  • hold 指定视频的某一帧,持续播放这一帧

    -video-track hold:example.mp4 frame=5 out=:2.0  # 第5帧持续放2秒
    

Qt

  • qimage 读取本地图片文件作为视频输入
  • qtext 生成文字
  • kdenlivetitle 生成文字,功能更强点吧,需要指定一个 resource,kdenlive 的 title 配置 xml 格式的。

Plus

  • count 倒计时:可以配置数字是加还是少、声音、样式

-track count: sound=frame0 in=:55.0 out=:60.0 ```

<a class="play-video-btn" href="/assets/melt-plugins-review/producer_count.mp4">播放示例视频</a>

生成器 Consumer

  • avformat 保存到本地视频文件,可以指定 width、 height
  • xml 生成 xml 配置文件

滤镜 Filters

视频类

Core

  • brightness 调整视频亮度: 可以配的参数有 start end level alpha。 我实测下来,start、end 时间不可调,基本没用;alpha试了没效果😓;有用就是 level,亮度可调范围 0-15,正常亮度是 1; level 配合 属性动画(Property Animation) 使用可行。

qmelt example.mp4 -filter brightness level="0~=0;:2.0=1" # 2秒渐现 ```

<a class="play-video-btn" href="/assets/melt-plugins-review/filter_brightness.mp4">播放示例视频</a>
  • crop 裁切视频: 参数有 top right bottom left,配置裁剪离上右下左的距离,只能写整数,不支持百分比,还有个 center 参数,设为 1 就启用等比缩放到填充黑边。 我实测下来,如果设置了 avformat consumer 的 width, height 的话,裁剪后的视频会被等比拉伸到全屏(这可以理解),然而即使设置了 center 也没用(坑爹😤)

  • gamma 调整视频 gamma 值

  • greyscale 视频灰度

  • mirror 镜像:效果蛮好的,貌似歪掉的视频会先拉正了再镜像,可选的参数有:horizontal 左右镜像 vertical 上下镜像 diagonal xdiagonal flip flop

    播放示例视频

  • obscure 打码:参数有 start end,值的形式是 X/Y:WxH[:PWxPY] where PWxPY is the size of the averaging region in pixels

qmelt example.mp4 -filter obscure:100/100:100x100 # 在 (100px, 100px) 处开始的 100x100 范围内打码 ```

  • region 区域:把滤镜应用到指定区域内,范围用图片的 alpha 通道设定

qmelt
-video-track IMG_1767.MOV out=:4.0
-video-track IMG_1826.MOV out=:4.0
-filter region:mask.png \ # the mask is a star -attach greyscale ```

<a class="play-video-btn" href="/assets/melt-plugins-review/filter_region.mp4">播放示例视频</a>
  • resize 缩放:如果几个剪辑的大小不一样,不会拉伸视频,而是用黑边填充。如果设置了 avformat consumer 的 width, height 的话,这个就不生效。😩

  • watermark 水印:可以设置大小、位置。用了哪个 producer 来加载图片,就用这个 producer 的参数来设置图片大小,用 composite.* 设置位置 (producer.width无效,producer.meta.media.width有效,不知道为啥)。 如果设置了 avformat consumer 的 width, height 的话,这个就不生效。

-attach watermark:watermark.png
producer.meta.media.width=300 producer.meta.media.height=300
composite.halign=right composite.valign=top ```

<a class="play-video-btn" href="/assets/melt-plugins-review/filter_watermark.mp4">播放示例视频</a>
  • audiowave 音频可视化。这个 filter 会完全覆盖视频内容

    This does not work alone on audio-only clips. It must have video to overwrite.

    播放示例视频

Plus

  • affine 画面变形

    • transition.cycle 配置动画循环间隔。0表示不循环,0~1表示百分比,其他正整数表示帧数
    • transition.geometry 配置位置、大小,可以写属性动画,但我试下来只能写帧数,不能写时间,大概是 "using old mlt_geometry API" 的缘故
    • transition.rotate_(xyz)|shear_(xyz)|scale_(xyz) 配置旋转、切变、缩放,我试下来是不支持属性动画的,只能写一个每一帧的变换值
    • repeat_off 禁用动画循环播放
    • mirror_off 禁用动画循环播放时的来回播放,类似 CSS 里的 animation-direction: alternate;

-filter affine
transition.cycle=50
transition.geometry="0=10%/10%:80%x80%;25=-10%/-10%:120%x120%;50=0/0:100%x100%;" ```

<a class="play-video-btn" href="/assets/melt-plugins-review/filter_affine.mp4">播放示例视频</a>
  • charcoal 碳化

    播放示例视频

  • dynamictext 添加文字。有一些井号开头的特殊关键字用于替换动态参数

-attach dynamictext:"送审样片 #timecode#" size=36
fgcolour="white" bgcolour=0x00000060
halign=center valign=top geometry="0/50:100%x100%" ```

<a class="play-video-btn" href="/assets/melt-plugins-review/filter_dynamictext.mp4">播放示例视频</a>
  • invert 反相

  • lift_gamma_gain 亮度调整。简单的说,lift、gamma和gain 对应的是画面中的阴影(暗部)、中间调和高光(亮部)区域。

    Very roughly speaking, lift=shadows, gamma=midtones and gain=highlights, although all parameters affect the entire curve. Mathematically speaking, it is a bit unusual to look at gamma as a color, but it works pretty well in practice.

    每项调整又对应 r、g、b 三个通道。

-attach lift_gamma_gain \ # 提高亮部,降低中间调 gamma_r=0.5 gamma_g=0.5 gamma_b=0.5
gain_r=1.5 gain_g=1.5 gain_b=1.5 ```

<a class="play-video-btn" href="/assets/melt-plugins-review/filter_lift_gamma_gain.mp4">播放示例视频</a>
  • sepia 色调。可配 u(黄-蓝)、v(蓝绿-红) 两个分量。默认配置是复古老照片风格

-attach sepia
u="0=0; :2.0=200; :4.0=0; :6.0=200; :8.0=0; :10.0~=200; :12.0=0"
v="0=0; :2.0=200; :3.0=100; :4.0=200; :7.0=50; :7.1|=200; :10.0=0 :12.0=200" ```

<a class="play-video-btn" href="/assets/melt-plugins-review/filter_sepia.mp4">播放示例视频</a>
  • lumakey 用画面的 Luma 值修改它的 alpha 通道。直接用没效果,需要配合复合器使用。

-attach lumakey
-transition composite in=:0.0 out=:5.0 ```

<a class="play-video-btn" href="/assets/melt-plugins-review/filter_lumakey.mp4">播放示例视频</a>
  • rgblut 颜色替换。滤镜映射指定的 r、g、b 的数值表

-attach rgblut
R_table="0;13;0;33;...226;255;232;212"
G_table="3;0;0;79;...205;176;255;255;223"
B_table="0;0;15;0;...230;200;255;245;211" ```

随机生成数值表测试下,效果比较魔幻。

```js

Array.from(new Array(256), function (a, i) { let val = i + Math.floor(Math.random() * 0x4F) - 0x2F return Math.min(0xFF, Math.max(val, 0)) }).join(';') ```

<a class="play-video-btn" href="/assets/melt-plugins-review/filter_rgblut.mp4">播放示例视频</a>

Qt

  • qtblend 图层混合。一开始以为是跟前一轨 blend,试了没效果,看源码 原来 destImage 就是填充了黑色背景,晕。除了 compositing=30 的反相(invert)其他感觉都没用,可是要反相的话,为什么不直接用 invert 滤镜呢?

  • lightshow 声音频谱改变画面亮度

  • audiowaveform 跟 audiowave 相似,但参数更多更强大,可以叠加到画面上

    播放示例视频

  • audiospectrum 可视化声音频谱

OpenCV

  • opencv.tracker 对象跟踪。指定要跟踪的对象在第一帧的位置和大小,可以指定是否模糊对象

-attach opencv.tracker rect="158 322 160 160" shape=1 blur=8 blur_type=1 ```

<a class="play-video-btn" href="/assets/melt-plugins-review/filter_opencv_tracker.mp4">播放示例视频</a>

Webvfx

  • webvfx 调用 webvfx 对象的各种方法使用 web 技术实现滤镜。支持传参。用法见 示例

-attach webvfx resource=filter-banner.html
FadeIn=.4 FadeOut=.2 Title="Meanwhile in Tokyo 🤡" ```

<a class="play-video-btn" href="/assets/melt-plugins-review/filter_webvfx.mp4">播放示例视频</a>

Frei0r

这个插件包括了大量的图像处理的方法,通道、曲线、色阶、色相、饱和度等都可以调整,使用起来也比较友好。

这边举例说明一下,使用 sobel 算子 + 色阶 + 饱和度调整 + qtblend 实现漫画效果。

qmelt \
-video-track example.mp4 out=:10.0 \
    -attach frei0r.saturat0r 0=0.4 \
-video-track example.mp4 out=:10.0 \
    -attach frei0r.sobel \
    -attach frei0r.levels 0=0 3=.5 4=0.4 5=0.6 6=0 \
-transition qtblend compositing=14 in=:0.0 out=:10.0

播放示例视频

Oldfilm

这个插件包括了几个制作老电影效果的滤镜,可以直接使用。

-video-track example.mp4 \
    -attach dust -attach grain -attach tcolor \
    -attach lines -attach vignette -attach oldfilm

播放示例视频

音频类

Core

  • volume 调整音量

-attach volume level="0=-30dB; :0.5|=2dB; :54.5~=2dB; :58.5=-30dB" ```

  • audiomap 改变声道映射。比如交换左右声道:

-filter audiomap 0=1 1=0 ```

<a class="play-video-btn" href="/assets/melt-plugins-review/filter_audiomap.mp4">播放示例视频</a>

Plus

  • loudness 调整音量到符合 EBU R128 标准

  • dynamic_loudness 动态调整音量到符合 EBU R128 标准,比 loudness 多了一些参数,可以指定计算音量的窗口长度

    播放示例视频

  • fft 快速傅里叶变换。这个滤镜不会直接修改音频或视频,而是把数据保存在内部,给其他滤镜使用,如 lightshow

转场 Transitions

视频类

Core

  • composite 图层复合。可以配置过渡位置、大小和透明度动画。不支持属性动画,起始状态用 start end 表示

-transition composite start=100%/0:20%x20%:20 end=0/0:100%x100%:100 ```

<a class="play-video-btn" href="/assets/melt-plugins-review/transition_composite.mp4">播放示例视频</a>

-transition region resource=mask.png filter0=sepia ```

<a class="play-video-btn" href="/assets/melt-plugins-review/transition_region.mp4">播放示例视频</a>

Plus

  • affine 画面变形

-transition affine in=:1.0 out=:3.0
geometry="0=100%/40%:20%x20%; 40=-10%/-10%:120%x120%; 50=0/0:100%x100%" ```

<a class="play-video-btn" href="/assets/melt-plugins-review/transition_affine.mp4">播放示例视频</a>

Qt

  • qtblend 图层混合。混合模式(compositing)取值见 QPainter::CompositionMode。 这个与其说是转场,不如说是多轨混合,效果不错的。

qmelt
-video-track example.mp4 out=:12.0
-video-track example.mp4 out=:12.0
-attach crop left=320
-attach affine transition.geometry="320/0:320x360"
-attach sepia
-transition qtblend compositing=14 in=:0.0 out=:12.0 ```

<a class="play-video-btn" href="/assets/melt-plugins-review/transition_qtblend.mp4">播放示例视频</a>

Webvfx

  • webvfx 调用 webvfx 对象的各种方法使用 web 技术实现转场。支持传参。用法见 示例

-transition webvfx resource=transition-shader-glslio.html glslio_name="morph"
in=:5.0 out=:7.0 a_track=0 b_track=1 ```

<a class="play-video-btn" href="/assets/melt-plugins-review/transition_webvfx.mp4">播放示例视频</a>

Frei0r

Frei0r 提供的转场效果也类似 qtblend ,可以用来做 tracks 混合。

播放示例视频

音频类

Core

  • mix 音频混合。入场音频渐响,避免音乐突变

-transition mix start=0 end=1 ```

<a class="play-video-btn" href="/assets/melt-plugins-review/transition_mix.mp4">播放示例视频</a>

一点人生经验

qmelt 运行时如果指定的插件不存在,它会直接忽略并不报错,而看生成的视频没有指定的效果,让人费解;所以使用插件前务必先用 qmelt -query 命令检查下是否已经安装了这个插件。插件安装方法见之前的文章。

在滤镜或转场的属性上使用“属性动画”的时候先看确认下这个插件是否支持,避免浪费时间。

不少涉及到位置大小参数的插件,一旦设置了 consumer 的宽高就失效了(懵逼脸),所以尽量不要给 consumer 设置宽高🙄。 如果有改变大小需求的,可以导出后再用 ffmpeg 转一下。