Skip to content

Video Filters

Martin Pulec edited this page May 19, 2026 · 2 revisions

This page is commom for both video postprocessors (receiver) and capture filters (sender). Although both classes are implemented separately, most of the filters is shared and can be used both as capture filter and video postprocessor.

Video postprocessors can modify incoming video in several ways. Example usage is following:

uv -p <postprocessor> -d gl

Eg.;

uv -p "text:My text"

to annotate incoming video with a text "My text". Capture filter command will then look like:

uv -F <postprocessor> -t <capture>
uv -F "text:My text" -t dummy

You can enumerate available video filters with following commands:

uv -F help
uv -p help

For individual modules, it is advisable to look directly to the module command-line documentation, this page is meant merely as an overview, eg.:

uv -F add_frame:help

Available filters:

add_frame

Use for frame stuffing, eg. 25p->50p or 50p->60p

Although both CF and VOPP name the same, those are actually separate implementations.

blank (capture filter only)

Clears the input with a single color.

border

Border postprocessor allows you to add color border around incoming video. Examples:

uv -p border -d gl

Borders video with default parameters.

uv -p border:color=#ff0000:width=20==8

Creates 8 pixel red border.

change_pixfmt

pixel format change

color

[development only] Computes central color statistic (print on console).

crop

frame cropping

deinterlace

simple linear deinterlace (blend) -> from 50i makes 25p (no temporal change, except of both fields are presnted at one time)

deinterlace_blend

alias for deinterlace (pp only)

deinterlace_bob

field doubler - every field line is doubled, achieves 50p from 50i

correlates with: deinterlace_linear, double_framerate

deinterlace_linear

deinterlacer doubles every field to full resolution by interpolating missing lines

correlates with: deinterlace_bob, double_framerate

delay (pp only)

Delays incomming video frame by given number of seconds or frames.

The granularity is adjusted to multpiles of frames, so no slight timing adjustnment like 10 ms possible. This can be achieved with --audio-delay -10 instead, anyways.

double_framerate

linear deinterlace but combining temporarily fields producing 50p signal from 50i

may be combined with blending when :d option added

correlates with: deinterlace_bob, deinterlace_linear

dummy

dummy (pass) filter

every

drops evern nth frame, a fraction may be given

This can be eg used for 60p->50p or 60p->30p conversion.

related: every

flip

vertical flip

gamma

image gamma manipulation

grayscale

makes the image grayscale

interlace

creates interlaced picture form progressive by dropping lines, eg. 50p->50i

interlaced_3d (pp only)

merges left and right eye into line-interleaved 3D

logo (capture filter only)

draws PAM (with alpha) over the video

matrix

do matrix operation on pixel triplet

matrix2

do matrix operation on YCbCr color spaces, namely conversion between color spaces (601 to 709 or similar)

mirror

horizontal picture mirror

noise (capture filter only)

add white noise to the image

Mostly for development.

override_prop

Override the video preferences without altering the data.

Use with caution - mostly useful eg to change interlaced/progressive scan.

rate_limit (capture filter only)

Rate limts the video frame, eg. if received frame arives earlier than its frame time, it is dropped.

relates to: every

resize

resize image using OpenCV

supported pixel formats: RGB, RGBA, I420, UYVY, YUYV, RG48

scale

resize image using OpenGL (only RGB and UYVY)

split

splits image into multiple tiles

There are just special use cases for this - eg. split side-by-side 3D (or top-bottom) or eg. split to tiles to allow parallel compression if the codec scales poorly.

temporal_3d

combines 2 temporarily interleaved 3D frames (eyes) into single, 2 tile stream

text

Note: This module is currently experimental. Requires MagickWand. You can add text to received video using text video postprocess filter. Usage is simply:

uv -d gl -p text:<your_text> <sender_address>

If your text contains spaces, you can enclose entire argument with apostrophes:

uv -d gl -p "text:Your text with spaces" <sender_address>

Clone this wiki locally