### **nil** Do nothing. Keep the section unchanged at normal speed and pitch. ### **cut** Remove the section completely from the output. ### **speed**`:float32` Range: `(0.0, 99999.0)` Change the playback speed while preserving pitch via time-stretching. 1.0 = unchanged, 2.0 = twice as fast, 0.5 = half speed. ### **varispeed**`:float32` Range: `[0.2, 100.0]` Change the playback speed by resampling, so pitch shifts along with it, like analog tape or vinyl. 1.0 = unchanged, 2.0 = twice as fast and an octave higher. ### **ease**`:curve[:duration]` Set the easing for the animated actions that follow it (until another `ease` overrides it); equivalent to adding `:ease=curve` to each. `curve` is one of `linear`, `in`, `out`, or `inout`. The optional `duration` (e.g. `2sec` or a bare frame count) is how long the animation takes before holding at its end value; omitted, it spans the whole section. Example: `ease:inout,zoom:1..2`. ### **volume**`:v[..v...]` Scale the audio volume by val. 1.0 = unchanged, 0.5 = half (-6 dB), 2.0 = double (+6 dB). Animatable: accepts keyframes `a..b..c` interpolated across the section, optionally eased with `:ease=`. ### **deesser**`:intensity[:max[:freq]]` Range: `each [0.0, 1.0]` Reduce harsh "s" and "sh" sibilance in the section. Implemented via ffmpeg's `deesser` filter. Positional args: `intensity` sets how much to de-ess (0.0 = none, 1.0 = maximum), `max` caps the reduction (default 0.5), and `freq` sets the split frequency (default 0.5). ### **duck**`:[amount[:threshold[:attack[:release]]]]` Autoduck (sidechain): lower this clip's audio wherever the louder audio layers beneath it (higher track indices) are active, e.g. tuck a music/desktop track under a voice track. Cross-track, so it is applied when the audio layers are mixed; a no-op on the bottom-most layer and on single-layer audio. Positional args: `amount` is the maximum attenuation (0.0 = none, 1.0 = duck to silence, default 0.85), `threshold` the key loudness 0.0..1.0 that engages the duck (default 0.04), and `attack`/`release` the duck-down/recover times in milliseconds (defaults 100 and 500). ### **invert** Invert every pixel in the section, producing a photo-negative. ### **hflip** Flip the section horizontally, mirroring it left to right. ### **vflip** Flip the section vertically, mirroring it top to bottom. ### **erosion** Erode the picture by replacing each pixel with the darkest of its 3x3 neighborhood. Bright details shrink and dark regions grow, giving a gritty, eaten-away look. Implemented via ffmpeg's `erosion` filter. ### **zoom**`:v[..v...]` Range: `(0.0, 100.0]` Scale the picture about its center by val. 1.0 = no zoom, 2.0 = zoom in 2x, 0.5 = zoom out 2x. Animatable: accepts keyframes `a..b..c` interpolated across the section, optionally eased with `:ease=`. ### **opacity**`:v[..v...]` Range: `[0.0, 1.0]` Blend the section against the background. 1.0 = fully opaque, 0.0 = fully transparent. Animatable: accepts keyframes `a..b..c`, optionally eased with `:ease=`. ### **blur**`:v[..v...]` Range: `[0.0, 1024.0]` Gaussian-blur the picture by sigma = val. 0.0 = no blur; larger values blur more. Animatable: accepts keyframes `a..b..c`, optionally eased with `:ease=`. ### **brightness**`:v[..v...]` Range: `[-1.0, 1.0]` Shift brightness by adding an equal offset to the R, G, and B channels. 0.0 = unchanged, positive brightens, negative darkens. Implemented via ffmpeg's `lutrgb` filter. Animatable: accepts keyframes `a..b..c`, optionally eased with `:ease=`. ### **brighthue**`:snorm16` Range: `[-1.0, 1.0]` Shift luma by offsetting the Y channel. 0.0 = unchanged, positive brightens, negative darkens. ### **contrast**`:float32` Range: `[-2.0, 2.0]` Scale contrast around mid-gray. 1.0 = unchanged, higher values increase contrast, lower values reduce it. Implemented via ffmpeg's `lutyuv` filter. ### **saturation**`:float32` Range: `[0.0, 3.0]` Scale color saturation. 1.0 = unchanged, 0.0 = grayscale, higher values are more vivid. Implemented via ffmpeg's `lutyuv` filter. ### **rotate**`:deg` Rotate the picture clockwise about its center by a fixed `deg` angle, expanding the frame so nothing is clipped and filling the exposed corners with the background color. Good for aspect flips, e.g. `rotate:90`. For a continuous spin, use `spin` instead. ### **spin**`:deg/rate` Spin the picture continuously, starting at `deg` and turning at `rate` degrees per second (negative is counter-clockwise), e.g. `spin:0/120`. The picture spins within a constant square that contains every rotation (so it is never clipped); on an overlay the exposed corners are transparent, otherwise they are filled with the background color. ### **drawbox**`:x:y:w:h:color` Draw a filled rectangle onto the picture. Positional args: `x` and `y` are the top-left corner, `w` and `h` the width and height in pixels, and `color` an RGB color (a name like `red` or a hex value like `#ff0000`). Example: `drawbox:100:100:400:200:red`. Implemented via ffmpeg's `drawbox` filter. ### **pos**`:x:y[:scale]` Place this clip as an overlay when it is composited over a lower video track. `x` and `y` are the top-left corner in canvas pixels; the optional `scale` multiplies the source's native size (default 1.0). Has no effect on the base (bottom) track. Example: `pos:600:300:0.5`. Animatable: each of `x`, `y`, and `scale` accepts a keyframe ramp `a..b..c` interpolated across the section, optionally eased with `:ease=`, e.g. `pos:0..600:300:1..0.5:ease=inout` slides the overlay across while shrinking it. ### **lens**`:k1[:k2]` Range: `each [-1.0, 1.0]` Distort the picture like a camera lens. With no arguments, a fun fisheye is applied. Implemented via ffmpeg's `lenscorrection` filter. Positional args: `k1` is the quadratic correction factor and `k2` the double-quadratic factor. Negative values bulge the image outward (fisheye); positive values pinch it inward (pincushion). ### **colorkey**`:color[:similar:blend]` Range: `[0.0, 1.0]` Make a color transparent by matching it in RGB space. Best for flat, synthetic backgrounds (a logo's matte, a screen recording, a gif with one clean color); for real green-/blue-screen camera footage use `chromakey` instead. On the base (bottom) video track there is nothing to reveal, so the matched color is replaced with the timeline background (`-bg`) instead. Positional args: `color` is the key color (a name like `green` or a hex value), `similar` how close a pixel must be to be keyed (default 0.25), and `blend` how soft the edge is (default 0.0). Implemented via ffmpeg's `colorkey` filter. ### **chromakey**`:color[:similar:blend]` Range: `[0.0, 1.0]` Make a color transparent by matching it in chroma (YUV) space, tolerating lighting variation, shadows, and soft edges. This is the green-/blue-screen keyer for real camera footage; for flat synthetic backgrounds use `colorkey` instead. On the base (bottom) video track there is nothing to reveal, so the matched color is replaced with the timeline background (`-bg`) instead. Positional args: `color` is the key color (a name like `green` or a hex value), `similar` how close a pixel must be to be keyed (default 0.25), and `blend` how soft the edge is (default 0.0). Implemented via ffmpeg's `chromakey` filter. ### **choke**`:[n]` Range: `[1.0, 16.0]` Shrink (choke) the alpha matte left by a `colorkey`/`chromakey` inward by `n` pixels (default 1), cutting off the ring of key-color spill and ragged edge pixels around the subject. Must come after the key in the chain, e.g. `add:fg.mp4,chromakey:green,choke:2`. Only meaningful on overlay tracks (where keying produces alpha); a no-op on the base track. Implemented by eroding only the alpha plane via ffmpeg's `erosion` filter. ### **aberration**`:[h[:v[:edge]]]` Range: `each [-127.0, 127.0]` Fake chromatic aberration by shifting the color channels apart, leaving red/cyan fringing for a cheap-lens or glitch look. Implemented via ffmpeg's `rgbashift` filter. Simple form `aberration[:h[:v[:edge]]]`: split red and blue symmetrically by `h` pixels horizontally (default 5) and `v` pixels vertically (default 0), with green left in place. `edge` is `smear` (extend the border pixel, the default) or `wrap` (wrap around to the far side). Per-channel form: pass `key=value` pairs drawn from `rh`, `rv`, `gh`, `gv`, `bh`, `bv` (signed pixel shift for each channel/axis, default 0) plus `edge`, e.g. `aberration:rh=8:bh=-8:gv=2:edge=wrap`. ### **loop** Loop the clip's source back to its start when it runs out of frames, instead of ending. Useful for overlays whose source (e.g. a short gif) is shorter than the section it covers, e.g. `add:logo.gif,loop`.
Type: A=audio, V=video, *=animatable.
| Action | Arguments | Range | Type | Summary | | --- | --- | --- | --- | --- | | nil | — | `—` | `AV` | Do nothing. | | cut | — | `—` | `AV` | Remove the section completely from the output. | | speed | `float32` | `(0.0, 99999.0)` | `AV` | Change the playback speed while preserving pitch via time-stretching. | | varispeed | `float32` | `[0.2, 100.0]` | `AV` | Change the playback speed by resampling, so pitch shifts along with it, like analog tape or vinyl. | | ease | `curve[:duration]` | `—` | `AV` | Set the easing for the animated actions that follow it (until another `ease` overrides it); equivalent to adding `:ease=curve` to each. | | volume | `v[..v...]` | `—` | `A*` | Scale the audio volume by val. | | deesser | `intensity[:max[:freq]]` | `each [0.0, 1.0]` | `A` | Reduce harsh "s" and "sh" sibilance in the section. | | duck | `[amount[:threshold[:attack[:release]]]]` | `—` | `A` | Autoduck (sidechain): lower this clip's audio wherever the louder audio layers beneath it (higher track indices) are active, e.g. | | invert | — | `—` | `V` | Invert every pixel in the section, producing a photo-negative. | | hflip | — | `—` | `V` | Flip the section horizontally, mirroring it left to right. | | vflip | — | `—` | `V` | Flip the section vertically, mirroring it top to bottom. | | erosion | — | `—` | `V` | Erode the picture by replacing each pixel with the darkest of its 3x3 neighborhood. | | zoom | `v[..v...]` | `(0.0, 100.0]` | `V*` | Scale the picture about its center by val. | | opacity | `v[..v...]` | `[0.0, 1.0]` | `V*` | Blend the section against the background. | | blur | `v[..v...]` | `[0.0, 1024.0]` | `V*` | Gaussian-blur the picture by sigma = val. | | brightness | `v[..v...]` | `[-1.0, 1.0]` | `V*` | Shift brightness by adding an equal offset to the R, G, and B channels. | | brighthue | `snorm16` | `[-1.0, 1.0]` | `V` | Shift luma by offsetting the Y channel. | | contrast | `float32` | `[-2.0, 2.0]` | `V` | Scale contrast around mid-gray. | | saturation | `float32` | `[0.0, 3.0]` | `V` | Scale color saturation. | | rotate | `deg` | `—` | `V` | Rotate the picture clockwise about its center by a fixed `deg` angle, expanding the frame so nothing is clipped and filling the exposed corners with the background color. | | spin | `deg/rate` | `—` | `V` | Spin the picture continuously, starting at `deg` and turning at `rate` degrees per second (negative is counter-clockwise), e.g. | | drawbox | `x:y:w:h:color` | `—` | `V` | Draw a filled rectangle onto the picture. | | pos | `x:y[:scale]` | `—` | `V*` | Place this clip as an overlay when it is composited over a lower video track. | | lens | `k1[:k2]` | `each [-1.0, 1.0]` | `V` | Distort the picture like a camera lens. | | colorkey | `color[:similar:blend]` | `[0.0, 1.0]` | `V` | Make a color transparent by matching it in RGB space. | | chromakey | `color[:similar:blend]` | `[0.0, 1.0]` | `V` | Make a color transparent by matching it in chroma (YUV) space, tolerating lighting variation, shadows, and soft edges. | | choke | `[n]` | `[1.0, 16.0]` | `V` | Shrink (choke) the alpha matte left by a `colorkey`/`chromakey` inward by `n` pixels (default 1), cutting off the ring of key-color spill and ragged edge pixels around the subject. | | aberration | `[h[:v[:edge]]]` | `each [-127.0, 127.0]` | `V` | Fake chromatic aberration by shifting the color channels apart, leaving red/cyan fringing for a cheap-lens or glitch look. | | loop | — | `—` | `V` | Loop the clip's source back to its start when it runs out of frames, instead of ending. | --- Version 31.0.0