# `FFix.Filter`
[🔗](https://github.com/akash-akya/ffix/blob/v0.1.0/lib/ffix/filter.ex#L1)

Generated helpers for ffmpeg filters.

Each function mirrors one filter reported by the local `ffmpeg` executable at
compile time. Function names and option keys stay close to ffmpeg. Function
arguments are `FFix.Stream` values; the final argument is a keyword list of
ffmpeg filter options.

    video
    |> scale(w: 1280, h: -1)
    |> fps(fps: 30)

Most filters return a single `FFix.Stream`. Multi-output filters return a tuple
or list:

    [left, right] = split(video, outputs: 2)
    stacked = hstack([left, hflip(right)])

Some ffmpeg filters have dynamic output shapes. Use `FFix.shape/2` when the
generated metadata cannot infer the shape you need:

    [audio, video] =
      audio_in
      |> ebur128(video: true)
      |> FFix.shape([:audio, :video])

Generated metadata is useful but not perfect. Use `FFix.filter/3` when the
filter name is dynamic, raw strings for ffmpeg-specific option syntax, and
`FFix.shape/2` when a dynamic filter needs an explicit output shape.

Timeline-capable filters accept ffmpeg's implicit `enable:` option. Filters
backed by ffmpeg framesync also accept the common `eof_action:`, `shortest:`,
`repeatlast:`, and `ts_sync_mode:` options.

# `abuffer`

```elixir
@spec abuffer(
  sample_fmt: term(),
  time_base: term(),
  sample_rate: integer(),
  channel_layout: String.t(),
  channels: integer()
) :: FFix.Stream.t()
```

Buffer audio frames, and make them accessible to the filterchain.

## Options

  * sample_fmt - (default none)
  * time_base - (from 0 to INT_MAX) (default 0/1)
  * sample_rate - (from 0 to INT_MAX) (default 0)
  * channel_layout - 
  * channels - (from 0 to INT_MAX) (default 0)

# `aevalsrc`

```elixir
@spec aevalsrc(
  exprs: String.t(),
  c: String.t(),
  s: String.t(),
  d: term(),
  n: integer(),
  duration: term(),
  nb_samples: integer(),
  sample_rate: String.t(),
  channel_layout: String.t()
) :: FFix.Stream.t()
```

Generate an audio signal generated by an expression.

## Options

  * exprs - set the '|'-separated list of channels expressions
  * c - set channel layout
  * s - set the sample rate (default "44100")
  * d - set audio duration (default -0.000001)
  * n - set the number of samples per requested frame (from 0 to INT_MAX) (default 1024)
  * duration - set audio duration (default -0.000001)
  * nb_samples - set the number of samples per requested frame (from 0 to INT_MAX) (default 1024)
  * sample_rate - set the sample rate (default "44100")
  * channel_layout - set channel layout

# `afdelaysrc`

```elixir
@spec afdelaysrc(
  c: term(),
  r: integer(),
  d: float(),
  delay: float(),
  n: integer(),
  t: integer(),
  nb_samples: integer(),
  sample_rate: integer(),
  channel_layout: term(),
  taps: integer()
) :: FFix.Stream.t()
```

Generate a Fractional delay FIR coefficients.

## Options

  * c - set channel layout (default "stereo")
  * r - set sample rate (from 1 to INT_MAX) (default 44100)
  * d - set fractional delay (from 0 to 32767) (default 0)
  * delay - set fractional delay (from 0 to 32767) (default 0)
  * n - set the number of samples per requested frame (from 1 to INT_MAX) (default 1024)
  * t - set number of taps for delay filter (from 0 to 32768) (default 0)
  * nb_samples - set the number of samples per requested frame (from 1 to INT_MAX) (default 1024)
  * sample_rate - set sample rate (from 1 to INT_MAX) (default 44100)
  * channel_layout - set channel layout (default "stereo")
  * taps - set number of taps for delay filter (from 0 to 32768) (default 0)

# `afireqsrc`

```elixir
@spec afireqsrc(
  p: integer() | String.t() | atom(),
  i: integer() | String.t() | atom(),
  b: String.t(),
  h: integer() | String.t() | atom(),
  r: integer(),
  phase: integer() | String.t() | atom(),
  n: integer(),
  t: integer(),
  nb_samples: integer(),
  sample_rate: integer(),
  gains: String.t(),
  preset: integer() | String.t() | atom(),
  g: String.t(),
  bands: String.t(),
  taps: integer(),
  interp: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Generate a FIR equalizer coefficients audio stream.

## Options

  * p - set equalizer preset (from -1 to 17) (default flat)
    - custom (-1) 
    - flat (0) 
    - acoustic (1) 
    - bass (2) 
    - beats (3) 
    - classic (4) 
    - clear (5) 
    - deep bass (6) 
    - dubstep (7) 
    - electronic (8) 
    - hardstyle (9) 
    - hip-hop (10) 
    - jazz (11) 
    - metal (12) 
    - movie (13) 
    - pop (14) 
    - r&b (15) 
    - rock (16) 
    - vocal booster (17) 

  * i - set the interpolation (from 0 to 1) (default linear)
    - linear (0) 
    - cubic (1) 

  * b - set central frequency values per band (default "25 40 63 100 160 250 400 630 1000 1600 2500 4000 6300 10000 16000 24000")
  * h - set the phase (from 0 to 1) (default min)
    - linear (0)  - linear phase
    - min (1)  - minimum phase

  * r - set sample rate (from 1 to INT_MAX) (default 44100)
  * phase - set the phase (from 0 to 1) (default min)
    - linear (0)  - linear phase
    - min (1)  - minimum phase

  * n - set the number of samples per requested frame (from 1 to INT_MAX) (default 1024)
  * t - set number of taps (from 16 to 65535) (default 4096)
  * nb_samples - set the number of samples per requested frame (from 1 to INT_MAX) (default 1024)
  * sample_rate - set sample rate (from 1 to INT_MAX) (default 44100)
  * gains - set gain values per band (default "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0")
  * preset - set equalizer preset (from -1 to 17) (default flat)
    - custom (-1) 
    - flat (0) 
    - acoustic (1) 
    - bass (2) 
    - beats (3) 
    - classic (4) 
    - clear (5) 
    - deep bass (6) 
    - dubstep (7) 
    - electronic (8) 
    - hardstyle (9) 
    - hip-hop (10) 
    - jazz (11) 
    - metal (12) 
    - movie (13) 
    - pop (14) 
    - r&b (15) 
    - rock (16) 
    - vocal booster (17) 

  * g - set gain values per band (default "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0")
  * bands - set central frequency values per band (default "25 40 63 100 160 250 400 630 1000 1600 2500 4000 6300 10000 16000 24000")
  * taps - set number of taps (from 16 to 65535) (default 4096)
  * interp - set the interpolation (from 0 to 1) (default linear)
    - linear (0) 
    - cubic (1) 

# `afirsrc`

```elixir
@spec afirsrc(
  p: String.t(),
  m: String.t(),
  f: String.t(),
  r: integer(),
  w: integer() | String.t() | atom(),
  phase: String.t(),
  n: integer(),
  t: integer(),
  nb_samples: integer(),
  sample_rate: integer(),
  win_func: integer() | String.t() | atom(),
  frequency: String.t(),
  taps: integer(),
  magnitude: String.t()
) :: FFix.Stream.t()
```

Generate a FIR coefficients audio stream.

## Options

  * p - set phase values (default "0 0")
  * m - set magnitude values (default "1 1")
  * f - set frequency points (default "0 1")
  * r - set sample rate (from 1 to INT_MAX) (default 44100)
  * w - set window function (from 0 to 20) (default blackman)
    - rect (0)  - Rectangular
    - bartlett (4)  - Bartlett
    - hann (1)  - Hann
    - hanning (1)  - Hanning
    - hamming (2)  - Hamming
    - blackman (3)  - Blackman
    - welch (5)  - Welch
    - flattop (6)  - Flat-top
    - bharris (7)  - Blackman-Harris
    - bnuttall (8)  - Blackman-Nuttall
    - bhann (11)  - Bartlett-Hann
    - sine (9)  - Sine
    - nuttall (10)  - Nuttall
    - lanczos (12)  - Lanczos
    - gauss (13)  - Gauss
    - tukey (14)  - Tukey
    - dolph (15)  - Dolph-Chebyshev
    - cauchy (16)  - Cauchy
    - parzen (17)  - Parzen
    - poisson (18)  - Poisson
    - bohman (19)  - Bohman
    - kaiser (20)  - Kaiser
    - rect (0)  - Rectangular
    - bartlett (4)  - Bartlett
    - hann (1)  - Hann
    - hanning (1)  - Hanning
    - hamming (2)  - Hamming
    - blackman (3)  - Blackman
    - welch (5)  - Welch
    - flattop (6)  - Flat-top
    - bharris (7)  - Blackman-Harris
    - bnuttall (8)  - Blackman-Nuttall
    - bhann (11)  - Bartlett-Hann
    - sine (9)  - Sine
    - nuttall (10)  - Nuttall
    - lanczos (12)  - Lanczos
    - gauss (13)  - Gauss
    - tukey (14)  - Tukey
    - dolph (15)  - Dolph-Chebyshev
    - cauchy (16)  - Cauchy
    - parzen (17)  - Parzen
    - poisson (18)  - Poisson
    - bohman (19)  - Bohman
    - kaiser (20)  - Kaiser

  * phase - set phase values (default "0 0")
  * n - set the number of samples per requested frame (from 1 to INT_MAX) (default 1024)
  * t - set number of taps (from 9 to 65535) (default 1025)
  * nb_samples - set the number of samples per requested frame (from 1 to INT_MAX) (default 1024)
  * sample_rate - set sample rate (from 1 to INT_MAX) (default 44100)
  * win_func - set window function (from 0 to 20) (default blackman)
    - rect (0)  - Rectangular
    - bartlett (4)  - Bartlett
    - hann (1)  - Hann
    - hanning (1)  - Hanning
    - hamming (2)  - Hamming
    - blackman (3)  - Blackman
    - welch (5)  - Welch
    - flattop (6)  - Flat-top
    - bharris (7)  - Blackman-Harris
    - bnuttall (8)  - Blackman-Nuttall
    - bhann (11)  - Bartlett-Hann
    - sine (9)  - Sine
    - nuttall (10)  - Nuttall
    - lanczos (12)  - Lanczos
    - gauss (13)  - Gauss
    - tukey (14)  - Tukey
    - dolph (15)  - Dolph-Chebyshev
    - cauchy (16)  - Cauchy
    - parzen (17)  - Parzen
    - poisson (18)  - Poisson
    - bohman (19)  - Bohman
    - kaiser (20)  - Kaiser
    - rect (0)  - Rectangular
    - bartlett (4)  - Bartlett
    - hann (1)  - Hann
    - hanning (1)  - Hanning
    - hamming (2)  - Hamming
    - blackman (3)  - Blackman
    - welch (5)  - Welch
    - flattop (6)  - Flat-top
    - bharris (7)  - Blackman-Harris
    - bnuttall (8)  - Blackman-Nuttall
    - bhann (11)  - Bartlett-Hann
    - sine (9)  - Sine
    - nuttall (10)  - Nuttall
    - lanczos (12)  - Lanczos
    - gauss (13)  - Gauss
    - tukey (14)  - Tukey
    - dolph (15)  - Dolph-Chebyshev
    - cauchy (16)  - Cauchy
    - parzen (17)  - Parzen
    - poisson (18)  - Poisson
    - bohman (19)  - Bohman
    - kaiser (20)  - Kaiser

  * frequency - set frequency points (default "0 1")
  * taps - set number of taps (from 9 to 65535) (default 1025)
  * magnitude - set magnitude values (default "1 1")

# `allrgb`

```elixir
@spec allrgb(r: term(), d: term(), rate: term(), duration: term(), sar: term()) ::
  FFix.Stream.t()
```

Generate all RGB colors.

## Options

  * r - set video rate (default "25")
  * d - set video duration (default -0.000001)
  * rate - set video rate (default "25")
  * duration - set video duration (default -0.000001)
  * sar - set video sample aspect ratio (from 0 to INT_MAX) (default 1/1)

# `allyuv`

```elixir
@spec allyuv(r: term(), d: term(), rate: term(), duration: term(), sar: term()) ::
  FFix.Stream.t()
```

Generate all yuv colors.

## Options

  * r - set video rate (default "25")
  * d - set video duration (default -0.000001)
  * rate - set video rate (default "25")
  * duration - set video duration (default -0.000001)
  * sar - set video sample aspect ratio (from 0 to INT_MAX) (default 1/1)

# `amovie`

```elixir
@spec amovie(
  filename: String.t(),
  loop: integer(),
  f: String.t(),
  s: String.t(),
  streams: String.t(),
  format_name: String.t(),
  stream_index: integer(),
  si: integer(),
  seek_point: float(),
  sp: float(),
  discontinuity: term(),
  dec_threads: integer(),
  format_opts: term()
) :: [FFix.Stream.t()]
```

Read audio from a movie source.

## Options

  * filename - 
  * loop - set loop count (from 0 to INT_MAX) (default 1)
  * f - set format name
  * s - set streams
  * streams - set streams
  * format_name - set format name
  * stream_index - set stream index (from -1 to INT_MAX) (default -1)
  * si - set stream index (from -1 to INT_MAX) (default -1)
  * seek_point - set seekpoint (seconds) (from 0 to 9.22337e+12) (default 0)
  * sp - set seekpoint (seconds) (from 0 to 9.22337e+12) (default 0)
  * discontinuity - set discontinuity threshold (default 0)
  * dec_threads - set the number of threads for decoding (from 0 to INT_MAX) (default 0)
  * format_opts - set format options for the opened file

# `anoisesrc`

```elixir
@spec anoisesrc(
  c: integer() | String.t() | atom(),
  a: float(),
  s: integer(),
  seed: integer(),
  r: integer(),
  d: term(),
  n: integer(),
  color: integer() | String.t() | atom(),
  duration: term(),
  nb_samples: integer(),
  sample_rate: integer(),
  amplitude: float(),
  colour: integer() | String.t() | atom(),
  density: float()
) :: FFix.Stream.t()
```

Generate a noise audio signal.

## Options

  * c - set noise color (from 0 to 5) (default white)
    - white (0) 
    - pink (1) 
    - brown (2) 
    - blue (3) 
    - violet (4) 
    - velvet (5) 

  * a - set amplitude (from 0 to 1) (default 1)
  * s - set random seed (from -1 to UINT32_MAX) (default -1)
  * seed - set random seed (from -1 to UINT32_MAX) (default -1)
  * r - set sample rate (from 15 to INT_MAX) (default 48000)
  * d - set duration (default 0)
  * n - set the number of samples per requested frame (from 1 to INT_MAX) (default 1024)
  * color - set noise color (from 0 to 5) (default white)
    - white (0) 
    - pink (1) 
    - brown (2) 
    - blue (3) 
    - violet (4) 
    - velvet (5) 

  * duration - set duration (default 0)
  * nb_samples - set the number of samples per requested frame (from 1 to INT_MAX) (default 1024)
  * sample_rate - set sample rate (from 15 to INT_MAX) (default 48000)
  * amplitude - set amplitude (from 0 to 1) (default 1)
  * colour - set noise color (from 0 to 5) (default white)
    - white (0) 
    - pink (1) 
    - brown (2) 
    - blue (3) 
    - violet (4) 
    - velvet (5) 

  * density - set density (from 0 to 1) (default 0.05)

# `anullsrc`

```elixir
@spec anullsrc(
  r: integer(),
  d: term(),
  n: integer(),
  duration: term(),
  nb_samples: integer(),
  sample_rate: integer(),
  channel_layout: term(),
  cl: term()
) :: FFix.Stream.t()
```

Null audio source, return empty audio frames.

## Options

  * r - set sample rate (from 1 to INT_MAX) (default 44100)
  * d - set the audio duration (default -0.000001)
  * n - set the number of samples per requested frame (from 1 to 65535) (default 1024)
  * duration - set the audio duration (default -0.000001)
  * nb_samples - set the number of samples per requested frame (from 1 to 65535) (default 1024)
  * sample_rate - set sample rate (from 1 to INT_MAX) (default 44100)
  * channel_layout - set channel_layout (default "stereo")
  * cl - set channel_layout (default "stereo")

# `avsynctest`

```elixir
@spec avsynctest(
  size: term(),
  c: boolean(),
  cycle: boolean(),
  period: integer(),
  p: integer(),
  a: float(),
  s: term(),
  d: term(),
  delay: integer(),
  fr: term(),
  framerate: term(),
  duration: term(),
  bg: term(),
  samplerate: integer(),
  sr: integer(),
  amplitude: float(),
  dl: integer(),
  fg: term(),
  ag: term()
) :: {FFix.Stream.t(), FFix.Stream.t()}
```

Generate an Audio Video Sync Test.

## Options

  * size - set frame size (default "hd720")
  * c - set delay cycle (default false)
  * cycle - set delay cycle (default false)
  * period - set beep period (from 1 to 99) (default 3)
  * p - set beep period (from 1 to 99) (default 3)
  * a - set beep amplitude (from 0 to 1) (default 0.7)
  * s - set frame size (default "hd720")
  * d - set duration (default 0)
  * delay - set flash delay (from -30 to 30) (default 0)
  * fr - set frame rate (default "30")
  * framerate - set frame rate (default "30")
  * duration - set duration (default 0)
  * bg - set background color (default "black")
  * samplerate - set sample rate (from 8000 to 384000) (default 44100)
  * sr - set sample rate (from 8000 to 384000) (default 44100)
  * amplitude - set beep amplitude (from 0 to 1) (default 0.7)
  * dl - set flash delay (from -30 to 30) (default 0)
  * fg - set foreground color (default "white")
  * ag - set additional color (default "gray")

# `buffer`

```elixir
@spec buffer(
  range: integer() | String.t() | atom(),
  width: integer(),
  colorspace: integer() | String.t() | atom(),
  time_base: term(),
  sar: term(),
  height: integer(),
  pix_fmt: term(),
  video_size: term(),
  pixel_aspect: term(),
  frame_rate: term()
) :: FFix.Stream.t()
```

Buffer video frames, and make them accessible to the filterchain.

## Options

  * range - select color range (from 0 to 2) (default unspecified)
    - unspecified (0) 
    - unknown (0) 
    - limited (1) 
    - tv (1) 
    - mpeg (1) 
    - full (2) 
    - pc (2) 
    - jpeg (2) 

  * width - (from 0 to INT_MAX) (default 0)
  * colorspace - select colorspace (from 0 to 17) (default unknown)
    - gbr (0) 
    - bt709 (1) 
    - unknown (2) 
    - fcc (4) 
    - bt470bg (5) 
    - smpte170m (6) 
    - smpte240m (7) 
    - ycgco (8) 
    - ycgco-re (16) 
    - ycgco-ro (17) 
    - bt2020nc (9) 
    - bt2020c (10) 
    - smpte2085 (11) 
    - chroma-derived-nc 12
    - chroma-derived-c 13
    - ictcp (14) 
    - ipt-c2 (15) 

  * time_base - (from 0 to DBL_MAX) (default 0/1)
  * sar - sample aspect ratio (from 0 to DBL_MAX) (default 0/1)
  * height - (from 0 to INT_MAX) (default 0)
  * pix_fmt - (default none)
  * video_size - 
  * pixel_aspect - sample aspect ratio (from 0 to DBL_MAX) (default 0/1)
  * frame_rate - (from 0 to DBL_MAX) (default 0/1)

# `cellauto`

```elixir
@spec cellauto(
  size: term(),
  filename: String.t(),
  full: boolean(),
  p: String.t(),
  pattern: String.t(),
  f: String.t(),
  s: term(),
  seed: integer(),
  r: term(),
  ratio: float(),
  scroll: boolean(),
  rate: term(),
  random_seed: integer(),
  rule: integer(),
  random_fill_ratio: float(),
  stitch: boolean(),
  start_full: boolean()
) :: FFix.Stream.t()
```

Create pattern generated by an elementary cellular automaton.

## Options

  * size - set video size
  * filename - read initial pattern from file
  * full - start filling the whole video (default true)
  * p - set initial pattern
  * pattern - set initial pattern
  * f - read initial pattern from file
  * s - set video size
  * seed - set the seed for filling the initial grid randomly (from -1 to UINT32_MAX) (default -1)
  * r - set video rate (default "25")
  * ratio - set fill ratio for filling initial grid randomly (from 0 to 1) (default 0.618034)
  * scroll - scroll pattern downward (default true)
  * rate - set video rate (default "25")
  * random_seed - set the seed for filling the initial grid randomly (from -1 to UINT32_MAX) (default -1)
  * rule - set rule (from 0 to 255) (default 110)
  * random_fill_ratio - set fill ratio for filling initial grid randomly (from 0 to 1) (default 0.618034)
  * stitch - stitch boundaries (default true)
  * start_full - start filling the whole video (default false)

# `color`

```elixir
@spec color(
  size: term(),
  c: term(),
  s: term(),
  r: term(),
  d: term(),
  color: term(),
  rate: term(),
  duration: term(),
  sar: term()
) :: FFix.Stream.t()
```

Provide an uniformly colored input.

## Options

  * size - set video size (default "320x240")
  * c - set color (default "black")
  * s - set video size (default "320x240")
  * r - set video rate (default "25")
  * d - set video duration (default -0.000001)
  * color - set color (default "black")
  * rate - set video rate (default "25")
  * duration - set video duration (default -0.000001)
  * sar - set video sample aspect ratio (from 0 to INT_MAX) (default 1/1)

# `color_vulkan`

```elixir
@spec color_vulkan(
  size: term(),
  format: String.t(),
  c: term(),
  s: term(),
  r: term(),
  d: term(),
  color: term(),
  rate: term(),
  duration: term(),
  sar: term(),
  out_range: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Generate a constant color (Vulkan)

## Options

  * size - set video size (default "1920x1080")
  * format - Output video format (software format of hardware frames)
  * c - set color (default "black")
  * s - set video size (default "1920x1080")
  * r - set video rate (default "60")
  * d - set video duration (default -0.000001)
  * color - set color (default "black")
  * rate - set video rate (default "60")
  * duration - set video duration (default -0.000001)
  * sar - set video sample aspect ratio (from 0 to INT_MAX) (default 1/1)
  * out_range - Output colour range (from 0 to 2) (default 0) (from 0 to 2) (default 0)
    - full (2)  - Full range
    - limited (1)  - Limited range
    - jpeg (2)  - Full range
    - mpeg (1)  - Limited range
    - tv (1)  - Limited range
    - pc (2)  - Full range

# `colorchart`

```elixir
@spec colorchart(
  r: term(),
  d: term(),
  rate: term(),
  duration: term(),
  sar: term(),
  preset: integer() | String.t() | atom(),
  patch_size: term()
) :: FFix.Stream.t()
```

Generate color checker chart.

## Options

  * r - set video rate (default "25")
  * d - set video duration (default -0.000001)
  * rate - set video rate (default "25")
  * duration - set video duration (default -0.000001)
  * sar - set video sample aspect ratio (from 0 to INT_MAX) (default 1/1)
  * preset - set the color checker chart preset (from 0 to 1) (default reference)
    - reference (0)  - reference
    - skintones (1)  - skintones

  * patch_size - set the single patch size (default "64x64")

# `colorspectrum`

```elixir
@spec colorspectrum(
  size: term(),
  type: integer() | String.t() | atom(),
  s: term(),
  r: term(),
  d: term(),
  rate: term(),
  duration: term(),
  sar: term()
) :: FFix.Stream.t()
```

Generate colors spectrum.

## Options

  * size - set video size (default "320x240")
  * type - set the color spectrum type (from 0 to 2) (default black)
    - black (0)  - fade to black
    - white (1)  - fade to white
    - all (2)  - white to black

  * s - set video size (default "320x240")
  * r - set video rate (default "25")
  * d - set video duration (default -0.000001)
  * rate - set video rate (default "25")
  * duration - set video duration (default -0.000001)
  * sar - set video sample aspect ratio (from 0 to INT_MAX) (default 1/1)

# `frei0r_src`

```elixir
@spec frei0r_src(
  size: term(),
  filter_name: String.t(),
  framerate: term(),
  filter_params: String.t()
) ::
  FFix.Stream.t()
```

Generate a frei0r source.

## Options

  * size - Dimensions of the generated video. (default "320x240")
  * filter_name - 
  * framerate - (default "25")
  * filter_params - 

# `gradients`

```elixir
@spec gradients(
  size: term(),
  type: integer() | String.t() | atom(),
  speed: float(),
  s: term(),
  seed: integer(),
  r: term(),
  d: term(),
  n: integer(),
  t: integer() | String.t() | atom(),
  x1: integer(),
  x0: integer(),
  rate: term(),
  duration: term(),
  c1: term(),
  c2: term(),
  c0: term(),
  c3: term(),
  y1: integer(),
  y0: integer(),
  c4: term(),
  c5: term(),
  c6: term(),
  c7: term(),
  nb_colors: integer()
) :: FFix.Stream.t()
```

Draw a gradients.

## Options

  * size - set frame size (default "640x480")
  * type - set gradient type (from 0 to 4) (default linear)
    - linear (0)  - set linear gradient
    - radial (1)  - set radial gradient
    - circular (2)  - set circular gradient
    - spiral (3)  - set spiral gradient
    - square (4)  - set square gradient

  * speed - set gradients rotation speed (from 0 to 1) (default 0.01)
  * s - set frame size (default "640x480")
  * seed - set the seed (from -1 to UINT32_MAX) (default -1)
  * r - set frame rate (default "25")
  * d - set video duration (default -0.000001)
  * n - set the number of colors (from 2 to 8) (default 2)
  * t - set gradient type (from 0 to 4) (default linear)
    - linear (0)  - set linear gradient
    - radial (1)  - set radial gradient
    - circular (2)  - set circular gradient
    - spiral (3)  - set spiral gradient
    - square (4)  - set square gradient

  * x1 - set gradient line destination x1 (from -1 to INT_MAX) (default -1)
  * x0 - set gradient line source x0 (from -1 to INT_MAX) (default -1)
  * rate - set frame rate (default "25")
  * duration - set video duration (default -0.000001)
  * c1 - set 2nd color (default "random")
  * c2 - set 3rd color (default "random")
  * c0 - set 1st color (default "random")
  * c3 - set 4th color (default "random")
  * y1 - set gradient line destination y1 (from -1 to INT_MAX) (default -1)
  * y0 - set gradient line source y0 (from -1 to INT_MAX) (default -1)
  * c4 - set 5th color (default "random")
  * c5 - set 6th color (default "random")
  * c6 - set 7th color (default "random")
  * c7 - set 8th color (default "random")
  * nb_colors - set the number of colors (from 2 to 8) (default 2)

# `haldclutsrc`

```elixir
@spec haldclutsrc(
  level: integer(),
  r: term(),
  d: term(),
  rate: term(),
  duration: term(),
  sar: term()
) ::
  FFix.Stream.t()
```

Provide an identity Hald CLUT.

## Options

  * level - set level (from 2 to 16) (default 6)
  * r - set video rate (default "25")
  * d - set video duration (default -0.000001)
  * rate - set video rate (default "25")
  * duration - set video duration (default -0.000001)
  * sar - set video sample aspect ratio (from 0 to INT_MAX) (default 1/1)

# `hilbert`

```elixir
@spec hilbert(
  r: integer(),
  w: integer() | String.t() | atom(),
  n: integer(),
  t: integer(),
  nb_samples: integer(),
  sample_rate: integer(),
  win_func: integer() | String.t() | atom(),
  taps: integer()
) :: FFix.Stream.t()
```

Generate a Hilbert transform FIR coefficients.

## Options

  * r - set sample rate (from 1 to INT_MAX) (default 44100)
  * w - set window function (from 0 to 20) (default blackman)
    - rect (0)  - Rectangular
    - bartlett (4)  - Bartlett
    - hann (1)  - Hann
    - hanning (1)  - Hanning
    - hamming (2)  - Hamming
    - blackman (3)  - Blackman
    - welch (5)  - Welch
    - flattop (6)  - Flat-top
    - bharris (7)  - Blackman-Harris
    - bnuttall (8)  - Blackman-Nuttall
    - bhann (11)  - Bartlett-Hann
    - sine (9)  - Sine
    - nuttall (10)  - Nuttall
    - lanczos (12)  - Lanczos
    - gauss (13)  - Gauss
    - tukey (14)  - Tukey
    - dolph (15)  - Dolph-Chebyshev
    - cauchy (16)  - Cauchy
    - parzen (17)  - Parzen
    - poisson (18)  - Poisson
    - bohman (19)  - Bohman
    - kaiser (20)  - Kaiser
    - rect (0)  - Rectangular
    - bartlett (4)  - Bartlett
    - hann (1)  - Hann
    - hanning (1)  - Hanning
    - hamming (2)  - Hamming
    - blackman (3)  - Blackman
    - welch (5)  - Welch
    - flattop (6)  - Flat-top
    - bharris (7)  - Blackman-Harris
    - bnuttall (8)  - Blackman-Nuttall
    - bhann (11)  - Bartlett-Hann
    - sine (9)  - Sine
    - nuttall (10)  - Nuttall
    - lanczos (12)  - Lanczos
    - gauss (13)  - Gauss
    - tukey (14)  - Tukey
    - dolph (15)  - Dolph-Chebyshev
    - cauchy (16)  - Cauchy
    - parzen (17)  - Parzen
    - poisson (18)  - Poisson
    - bohman (19)  - Bohman
    - kaiser (20)  - Kaiser

  * n - set the number of samples per requested frame (from 1 to INT_MAX) (default 1024)
  * t - set number of taps (from 11 to 65535) (default 22051)
  * nb_samples - set the number of samples per requested frame (from 1 to INT_MAX) (default 1024)
  * sample_rate - set sample rate (from 1 to INT_MAX) (default 44100)
  * win_func - set window function (from 0 to 20) (default blackman)
    - rect (0)  - Rectangular
    - bartlett (4)  - Bartlett
    - hann (1)  - Hann
    - hanning (1)  - Hanning
    - hamming (2)  - Hamming
    - blackman (3)  - Blackman
    - welch (5)  - Welch
    - flattop (6)  - Flat-top
    - bharris (7)  - Blackman-Harris
    - bnuttall (8)  - Blackman-Nuttall
    - bhann (11)  - Bartlett-Hann
    - sine (9)  - Sine
    - nuttall (10)  - Nuttall
    - lanczos (12)  - Lanczos
    - gauss (13)  - Gauss
    - tukey (14)  - Tukey
    - dolph (15)  - Dolph-Chebyshev
    - cauchy (16)  - Cauchy
    - parzen (17)  - Parzen
    - poisson (18)  - Poisson
    - bohman (19)  - Bohman
    - kaiser (20)  - Kaiser
    - rect (0)  - Rectangular
    - bartlett (4)  - Bartlett
    - hann (1)  - Hann
    - hanning (1)  - Hanning
    - hamming (2)  - Hamming
    - blackman (3)  - Blackman
    - welch (5)  - Welch
    - flattop (6)  - Flat-top
    - bharris (7)  - Blackman-Harris
    - bnuttall (8)  - Blackman-Nuttall
    - bhann (11)  - Bartlett-Hann
    - sine (9)  - Sine
    - nuttall (10)  - Nuttall
    - lanczos (12)  - Lanczos
    - gauss (13)  - Gauss
    - tukey (14)  - Tukey
    - dolph (15)  - Dolph-Chebyshev
    - cauchy (16)  - Cauchy
    - parzen (17)  - Parzen
    - poisson (18)  - Poisson
    - bohman (19)  - Bohman
    - kaiser (20)  - Kaiser

  * taps - set number of taps (from 11 to 65535) (default 22051)

# `life`

```elixir
@spec life(
  size: term(),
  filename: String.t(),
  f: String.t(),
  s: term(),
  seed: integer(),
  r: term(),
  ratio: float(),
  rate: term(),
  random_seed: integer(),
  rule: String.t(),
  random_fill_ratio: float(),
  stitch: boolean(),
  mold: integer(),
  life_color: term(),
  death_color: term(),
  mold_color: term()
) :: FFix.Stream.t()
```

Create life.

## Options

  * size - set video size
  * filename - set source file
  * f - set source file
  * s - set video size
  * seed - set the seed for filling the initial grid randomly (from -1 to UINT32_MAX) (default -1)
  * r - set video rate (default "25")
  * ratio - set fill ratio for filling initial grid randomly (from 0 to 1) (default 0.618034)
  * rate - set video rate (default "25")
  * random_seed - set the seed for filling the initial grid randomly (from -1 to UINT32_MAX) (default -1)
  * rule - set rule (default "B3/S23")
  * random_fill_ratio - set fill ratio for filling initial grid randomly (from 0 to 1) (default 0.618034)
  * stitch - stitch boundaries (default true)
  * mold - set mold speed for dead cells (from 0 to 255) (default 0)
  * life_color - set life color (default "white")
  * death_color - set death color (default "black")
  * mold_color - set mold color (default "black")

# `mandelbrot`

```elixir
@spec mandelbrot(
  size: term(),
  s: term(),
  r: term(),
  rate: term(),
  end_pts: float(),
  maxiter: integer(),
  start_x: float(),
  start_y: float(),
  start_scale: float(),
  end_scale: float(),
  bailout: float(),
  morphxf: float(),
  morphyf: float(),
  morphamp: float(),
  outer: integer() | String.t() | atom(),
  inner: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Render a Mandelbrot fractal.

## Options

  * size - set frame size (default "640x480")
  * s - set frame size (default "640x480")
  * r - set frame rate (default "25")
  * rate - set frame rate (default "25")
  * end_pts - set the terminal pts value (from 0 to I64_MAX) (default 400)
  * maxiter - set max iterations number (from 1 to INT_MAX) (default 7189)
  * start_x - set the initial x position (from -100 to 100) (default -0.743644)
  * start_y - set the initial y position (from -100 to 100) (default -0.131826)
  * start_scale - set the initial scale value (from 0 to FLT_MAX) (default 3)
  * end_scale - set the terminal scale value (from 0 to FLT_MAX) (default 0.3)
  * bailout - set the bailout value (from 0 to FLT_MAX) (default 10)
  * morphxf - set morph x frequency (from -FLT_MAX to FLT_MAX) (default 0.01)
  * morphyf - set morph y frequency (from -FLT_MAX to FLT_MAX) (default 0.0123)
  * morphamp - set morph amplitude (from -FLT_MAX to FLT_MAX) (default 0)
  * outer - set outer coloring mode (from 0 to INT_MAX) (default normalized_iteration_count)
    - iteration_count 0 - set iteration count mode
    - normalized_iteration_count 1 - set normalized iteration count mode
    - white (2)  - set white mode
    - outz (3)  - set outz mode

  * inner - set inner coloring mode (from 0 to INT_MAX) (default mincol)
    - black (0)  - set black mode
    - period (1)  - set period mode
    - convergence (2)  - show time until convergence
    - mincol (3)  - color based on point closest to the origin of the iterations

# `movie`

```elixir
@spec movie(
  filename: String.t(),
  loop: integer(),
  f: String.t(),
  s: String.t(),
  streams: String.t(),
  format_name: String.t(),
  stream_index: integer(),
  si: integer(),
  seek_point: float(),
  sp: float(),
  discontinuity: term(),
  dec_threads: integer(),
  format_opts: term()
) :: [FFix.Stream.t()]
```

Read from a movie source.

## Options

  * filename - 
  * loop - set loop count (from 0 to INT_MAX) (default 1)
  * f - set format name
  * s - set streams
  * streams - set streams
  * format_name - set format name
  * stream_index - set stream index (from -1 to INT_MAX) (default -1)
  * si - set stream index (from -1 to INT_MAX) (default -1)
  * seek_point - set seekpoint (seconds) (from 0 to 9.22337e+12) (default 0)
  * sp - set seekpoint (seconds) (from 0 to 9.22337e+12) (default 0)
  * discontinuity - set discontinuity threshold (default 0)
  * dec_threads - set the number of threads for decoding (from 0 to INT_MAX) (default 0)
  * format_opts - set format options for the opened file

# `mptestsrc`

```elixir
@spec mptestsrc(
  m: integer(),
  r: term(),
  d: term(),
  test: integer() | String.t() | atom(),
  t: integer() | String.t() | atom(),
  rate: term(),
  duration: term(),
  max_frames: integer()
) :: FFix.Stream.t()
```

Generate various test pattern.

## Options

  * m - Set the maximum number of frames generated for each test (from 1 to I64_MAX) (default 30)
  * r - set video rate (default "25")
  * d - set video duration (default -0.000001)
  * test - set test to perform (from 0 to INT_MAX) (default all)
    - dc_luma (0) 
    - dc_chroma (1) 
    - freq_luma (2) 
    - freq_chroma (3) 
    - amp_luma (4) 
    - amp_chroma (5) 
    - cbp (6) 
    - mv (7) 
    - ring1 (8) 
    - ring2 (9) 
    - all (10) 

  * t - set test to perform (from 0 to INT_MAX) (default all)
    - dc_luma (0) 
    - dc_chroma (1) 
    - freq_luma (2) 
    - freq_chroma (3) 
    - amp_luma (4) 
    - amp_chroma (5) 
    - cbp (6) 
    - mv (7) 
    - ring1 (8) 
    - ring2 (9) 
    - all (10) 

  * rate - set video rate (default "25")
  * duration - set video duration (default -0.000001)
  * max_frames - Set the maximum number of frames generated for each test (from 1 to I64_MAX) (default 30)

# `nullsrc`

```elixir
@spec nullsrc(
  size: term(),
  s: term(),
  r: term(),
  d: term(),
  rate: term(),
  duration: term(),
  sar: term()
) :: FFix.Stream.t()
```

Null video source, return unprocessed video frames.

## Options

  * size - set video size (default "320x240")
  * s - set video size (default "320x240")
  * r - set video rate (default "25")
  * d - set video duration (default -0.000001)
  * rate - set video rate (default "25")
  * duration - set video duration (default -0.000001)
  * sar - set video sample aspect ratio (from 0 to INT_MAX) (default 1/1)

# `openclsrc`

```elixir
@spec openclsrc(
  size: term(),
  format: term(),
  kernel: String.t(),
  s: term(),
  r: term(),
  source: String.t(),
  rate: term()
) :: FFix.Stream.t()
```

Generate video using an OpenCL program

## Options

  * size - Video size
  * format - Video format (default none)
  * kernel - Kernel name in program
  * s - Video size
  * r - Video frame rate (default "25")
  * source - OpenCL program source file
  * rate - Video frame rate (default "25")

# `pal75bars`

```elixir
@spec pal75bars(
  size: term(),
  s: term(),
  r: term(),
  d: term(),
  rate: term(),
  duration: term(),
  sar: term()
) :: FFix.Stream.t()
```

Generate PAL 75% color bars.

## Options

  * size - set video size (default "320x240")
  * s - set video size (default "320x240")
  * r - set video rate (default "25")
  * d - set video duration (default -0.000001)
  * rate - set video rate (default "25")
  * duration - set video duration (default -0.000001)
  * sar - set video sample aspect ratio (from 0 to INT_MAX) (default 1/1)

# `pal100bars`

```elixir
@spec pal100bars(
  size: term(),
  s: term(),
  r: term(),
  d: term(),
  rate: term(),
  duration: term(),
  sar: term()
) :: FFix.Stream.t()
```

Generate PAL 100% color bars.

## Options

  * size - set video size (default "320x240")
  * s - set video size (default "320x240")
  * r - set video rate (default "25")
  * d - set video duration (default -0.000001)
  * rate - set video rate (default "25")
  * duration - set video duration (default -0.000001)
  * sar - set video sample aspect ratio (from 0 to INT_MAX) (default 1/1)

# `perlin`

```elixir
@spec perlin(
  size: term(),
  s: term(),
  seed: term(),
  r: term(),
  rate: term(),
  octaves: integer(),
  persistence: float(),
  xscale: float(),
  yscale: float(),
  tscale: float(),
  random_mode: integer() | String.t() | atom(),
  random_seed: term()
) :: FFix.Stream.t()
```

Generate Perlin noise

## Options

  * size - set video size (default "320x240")
  * s - set video size (default "320x240")
  * seed - set the seed for filling the initial pattern (from 0 to UINT32_MAX) (default 0)
  * r - set video rate (default "25")
  * rate - set video rate (default "25")
  * octaves - set the number of components to use to generate the noise (from 1 to INT_MAX) (default 1)
  * persistence - set the octaves persistence (from 0 to DBL_MAX) (default 1)
  * xscale - set x-scale factor (from 0 to DBL_MAX) (default 1)
  * yscale - set y-scale factor (from 0 to DBL_MAX) (default 1)
  * tscale - set t-scale factor (from 0 to DBL_MAX) (default 1)
  * random_mode - set random mode used to compute initial pattern (from 0 to 2) (default random)
    - random (0)  - compute and use random seed
    - ken (1)  - use the predefined initial pattern defined by Ken Perlin in the original article
    - seed (2)  - use the value specified by random_seed

  * random_seed - set the seed for filling the initial pattern (from 0 to UINT32_MAX) (default 0)

# `qrencodesrc`

```elixir
@spec qrencodesrc(
  level: integer() | String.t() | atom(),
  fc: term(),
  bc: term(),
  q: String.t(),
  text: String.t(),
  r: term(),
  l: integer() | String.t() | atom(),
  cs: boolean(),
  rate: term(),
  textfile: String.t(),
  expansion: integer() | String.t() | atom(),
  qrcode_width: String.t(),
  padded_qrcode_width: String.t(),
  Q: String.t(),
  case_sensitive: boolean(),
  foreground_color: term(),
  background_color: term()
) :: FFix.Stream.t()
```

Generate a QR code.

## Options

  * level - error correction level, lowest is L (from 0 to 3) (default Q)
    - L (0) 
    - M (1) 
    - Q (2) 
    - H (3) 

  * fc - set QR foreground color (default "black")
  * bc - set QR background color (default "white")
  * q - set rendered QR code width expression (default "64")
  * text - set text to encode
  * r - set video rate (default "25")
  * l - error correction level, lowest is L (from 0 to 3) (default Q)
    - L (0) 
    - M (1) 
    - Q (2) 
    - H (3) 

  * cs - generate code which is case sensitive (default true)
  * rate - set video rate (default "25")
  * textfile - set text file to encode
  * expansion - set the expansion mode (from 0 to 2) (default normal)
    - none (0)  - set no expansion
    - normal (1)  - set normal expansion

  * qrcode_width - set rendered QR code width expression (default "64")
  * padded_qrcode_width - set rendered padded QR code width expression (default "q")
  * Q - set rendered padded QR code width expression (default "q")
  * case_sensitive - generate code which is case sensitive (default true)
  * foreground_color - set QR foreground color (default "black")
  * background_color - set QR background color (default "white")

# `rgbtestsrc`

```elixir
@spec rgbtestsrc(
  size: term(),
  s: term(),
  r: term(),
  d: term(),
  co: boolean(),
  rate: term(),
  duration: term(),
  sar: term(),
  complement: boolean()
) :: FFix.Stream.t()
```

Generate RGB test pattern.

## Options

  * size - set video size (default "320x240")
  * s - set video size (default "320x240")
  * r - set video rate (default "25")
  * d - set video duration (default -0.000001)
  * co - set complement colors (default false)
  * rate - set video rate (default "25")
  * duration - set video duration (default -0.000001)
  * sar - set video sample aspect ratio (from 0 to INT_MAX) (default 1/1)
  * complement - set complement colors (default false)

# `sierpinski`

```elixir
@spec sierpinski(
  size: term(),
  type: integer() | String.t() | atom(),
  s: term(),
  seed: integer(),
  jump: integer(),
  r: term(),
  rate: term()
) :: FFix.Stream.t()
```

Render a Sierpinski fractal.

## Options

  * size - set frame size (default "640x480")
  * type - set fractal type (from 0 to 1) (default carpet)
    - carpet (0)  - sierpinski carpet
    - triangle (1)  - sierpinski triangle

  * s - set frame size (default "640x480")
  * seed - set the seed (from -1 to UINT32_MAX) (default -1)
  * jump - set the jump (from 1 to 10000) (default 100)
  * r - set frame rate (default "25")
  * rate - set frame rate (default "25")

# `sinc`

```elixir
@spec sinc(
  round: boolean(),
  r: integer(),
  phase: float(),
  n: integer(),
  nb_samples: integer(),
  sample_rate: integer(),
  lp: float(),
  hp: float(),
  beta: float(),
  att: float(),
  hptaps: integer(),
  lptaps: integer()
) :: FFix.Stream.t()
```

Generate a sinc kaiser-windowed low-pass, high-pass, band-pass, or band-reject FIR coefficients.

## Options

  * round - enable rounding (default false)
  * r - set sample rate (from 1 to INT_MAX) (default 44100)
  * phase - set filter phase response (from 0 to 100) (default 50)
  * n - set the number of samples per requested frame (from 1 to INT_MAX) (default 1024)
  * nb_samples - set the number of samples per requested frame (from 1 to INT_MAX) (default 1024)
  * sample_rate - set sample rate (from 1 to INT_MAX) (default 44100)
  * lp - set low-pass filter frequency (from 0 to INT_MAX) (default 0)
  * hp - set high-pass filter frequency (from 0 to INT_MAX) (default 0)
  * beta - set kaiser window beta (from -1 to 256) (default -1)
  * att - set stop-band attenuation (from 40 to 180) (default 120)
  * hptaps - set number of taps for high-pass filter (from 0 to 32768) (default 0)
  * lptaps - set number of taps for low-pass filter (from 0 to 32768) (default 0)

# `sine`

```elixir
@spec sine(
  f: float(),
  b: float(),
  r: integer(),
  d: term(),
  duration: term(),
  sample_rate: integer(),
  frequency: float(),
  beep_factor: float(),
  samples_per_frame: String.t()
) :: FFix.Stream.t()
```

Generate sine wave audio signal.

## Options

  * f - set the sine frequency (from 0 to DBL_MAX) (default 440)
  * b - set the beep frequency factor (from 0 to DBL_MAX) (default 0)
  * r - set the sample rate (from 1 to INT_MAX) (default 44100)
  * d - set the audio duration (default 0)
  * duration - set the audio duration (default 0)
  * sample_rate - set the sample rate (from 1 to INT_MAX) (default 44100)
  * frequency - set the sine frequency (from 0 to DBL_MAX) (default 440)
  * beep_factor - set the beep frequency factor (from 0 to DBL_MAX) (default 0)
  * samples_per_frame - set the number of samples per frame (default "1024")

# `smptebars`

```elixir
@spec smptebars(
  size: term(),
  s: term(),
  r: term(),
  d: term(),
  rate: term(),
  duration: term(),
  sar: term()
) :: FFix.Stream.t()
```

Generate SMPTE color bars.

## Options

  * size - set video size (default "320x240")
  * s - set video size (default "320x240")
  * r - set video rate (default "25")
  * d - set video duration (default -0.000001)
  * rate - set video rate (default "25")
  * duration - set video duration (default -0.000001)
  * sar - set video sample aspect ratio (from 0 to INT_MAX) (default 1/1)

# `smptehdbars`

```elixir
@spec smptehdbars(
  size: term(),
  s: term(),
  r: term(),
  d: term(),
  rate: term(),
  duration: term(),
  sar: term()
) :: FFix.Stream.t()
```

Generate SMPTE HD color bars.

## Options

  * size - set video size (default "320x240")
  * s - set video size (default "320x240")
  * r - set video rate (default "25")
  * d - set video duration (default -0.000001)
  * rate - set video rate (default "25")
  * duration - set video duration (default -0.000001)
  * sar - set video sample aspect ratio (from 0 to INT_MAX) (default 1/1)

# `testsrc2`

```elixir
@spec testsrc2(
  size: term(),
  s: term(),
  r: term(),
  d: term(),
  rate: term(),
  duration: term(),
  sar: term(),
  alpha: integer()
) :: FFix.Stream.t()
```

Generate another test pattern.

## Options

  * size - set video size (default "320x240")
  * s - set video size (default "320x240")
  * r - set video rate (default "25")
  * d - set video duration (default -0.000001)
  * rate - set video rate (default "25")
  * duration - set video duration (default -0.000001)
  * sar - set video sample aspect ratio (from 0 to INT_MAX) (default 1/1)
  * alpha - set global alpha (opacity) (from 0 to 255) (default 255)

# `testsrc`

```elixir
@spec testsrc(
  decimals: integer(),
  size: term(),
  s: term(),
  r: term(),
  d: term(),
  n: integer(),
  rate: term(),
  duration: term(),
  sar: term()
) :: FFix.Stream.t()
```

Generate test pattern.

## Options

  * decimals - set number of decimals to show (from 0 to 17) (default 0)
  * size - set video size (default "320x240")
  * s - set video size (default "320x240")
  * r - set video rate (default "25")
  * d - set video duration (default -0.000001)
  * n - set number of decimals to show (from 0 to 17) (default 0)
  * rate - set video rate (default "25")
  * duration - set video duration (default -0.000001)
  * sar - set video sample aspect ratio (from 0 to INT_MAX) (default 1/1)

# `yuvtestsrc`

```elixir
@spec yuvtestsrc(
  size: term(),
  s: term(),
  r: term(),
  d: term(),
  rate: term(),
  duration: term(),
  sar: term()
) :: FFix.Stream.t()
```

Generate YUV test pattern.

## Options

  * size - set video size (default "320x240")
  * s - set video size (default "320x240")
  * r - set video rate (default "25")
  * d - set video duration (default -0.000001)
  * rate - set video rate (default "25")
  * duration - set video duration (default -0.000001)
  * sar - set video sample aspect ratio (from 0 to INT_MAX) (default 1/1)

# `zoneplate`

```elixir
@spec zoneplate(
  size: term(),
  s: term(),
  r: term(),
  precision: integer(),
  d: term(),
  kv: integer(),
  to: integer(),
  rate: term(),
  duration: term(),
  sar: term(),
  xo: integer(),
  yo: integer(),
  k0: integer(),
  kx: integer(),
  ky: integer(),
  kt: integer(),
  kxt: integer(),
  kyt: integer(),
  kxy: integer(),
  kx2: integer(),
  ky2: integer(),
  kt2: integer(),
  ku: integer()
) :: FFix.Stream.t()
```

Generate zone-plate.

## Options

  * size - set video size (default "320x240")
  * s - set video size (default "320x240")
  * r - set video rate (default "25")
  * precision - set LUT precision (from 4 to 16) (default 10)
  * d - set video duration (default -0.000001)
  * kv - set 0-order V-color phase (from INT_MIN to INT_MAX) (default 0)
  * to - set T-axis offset (from INT_MIN to INT_MAX) (default 0)
  * rate - set video rate (default "25")
  * duration - set video duration (default -0.000001)
  * sar - set video sample aspect ratio (from 0 to INT_MAX) (default 1/1)
  * xo - set X-axis offset (from INT_MIN to INT_MAX) (default 0)
  * yo - set Y-axis offset (from INT_MIN to INT_MAX) (default 0)
  * k0 - set 0-order phase (from INT_MIN to INT_MAX) (default 0)
  * kx - set 1-order X-axis phase (from INT_MIN to INT_MAX) (default 0)
  * ky - set 1-order Y-axis phase (from INT_MIN to INT_MAX) (default 0)
  * kt - set 1-order T-axis phase (from INT_MIN to INT_MAX) (default 0)
  * kxt - set X-axis*T-axis product phase (from INT_MIN to INT_MAX) (default 0)
  * kyt - set Y-axis*T-axis product phase (from INT_MIN to INT_MAX) (default 0)
  * kxy - set X-axis*Y-axis product phase (from INT_MIN to INT_MAX) (default 0)
  * kx2 - set 2-order X-axis phase (from INT_MIN to INT_MAX) (default 0)
  * ky2 - set 2-order Y-axis phase (from INT_MIN to INT_MAX) (default 0)
  * kt2 - set 2-order T-axis phase (from INT_MIN to INT_MAX) (default 0)
  * ku - set 0-order U-color phase (from INT_MIN to INT_MAX) (default 0)

# `addroi`

```elixir
@spec addroi(FFix.Stream.t(),
  clear: boolean(),
  x: String.t(),
  y: String.t(),
  h: String.t(),
  w: String.t(),
  qoffset: term()
) :: FFix.Stream.t()
```

Add region of interest to frame.

## Options

  * clear - Remove any existing regions of interest before adding the new one. (default false)
  * x - Region distance from left edge of frame. (default "0")
  * y - Region distance from top edge of frame. (default "0")
  * h - Region height. (default "0")
  * w - Region width. (default "0")
  * qoffset - Quantisation offset to apply in the region. (from -1 to 1) (default -1/10)

# `alphaextract`

```elixir
@spec alphaextract(
  FFix.Stream.t(),
  []
) :: FFix.Stream.t()
```

Extract an alpha channel as a grayscale image component.

## Options

# `alphamerge`

```elixir
@spec alphamerge(FFix.Stream.t(), FFix.Stream.t(),
  enable: String.t(),
  shortest: boolean(),
  eof_action: integer() | String.t() | atom(),
  repeatlast: boolean(),
  ts_sync_mode: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Copy the luma value of the second input into the alpha channel of the first input.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * shortest - force termination when the shortest input terminates (default false)
  * eof_action - Action to take when encountering EOF from secondary input  (from 0 to 2) (default repeat)
    - repeat (0)  - Repeat the previous frame.
    - endall (1)  - End both streams.
    - pass (2)  - Pass through the main input.

  * repeatlast - extend last frame of secondary streams beyond EOF (default true)
  * ts_sync_mode - How strictly to sync streams based on secondary input timestamps (from 0 to 1) (default default)
    - default (0)  - Frame from secondary input with the nearest lower or equal timestamp to the primary input frame
    - nearest (1)  - Frame from secondary input with the absolute nearest timestamp to the primary input frame

# `amplify`

```elixir
@spec amplify(FFix.Stream.t(),
  high: float(),
  low: float(),
  enable: String.t(),
  threshold: float(),
  planes: term(),
  radius: integer(),
  factor: float(),
  tolerance: float()
) :: FFix.Stream.t()
```

Amplify changes between successive video frames.

## Options

  * high - set high limit for amplification (from 0 to 65535) (default 65535)
  * low - set low limit for amplification (from 0 to 65535) (default 65535)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * threshold - set threshold (from 0 to 65535) (default 10)
  * planes - set what planes to filter (default 7)
  * radius - set radius (from 1 to 63) (default 2)
  * factor - set factor (from 0 to 65535) (default 2)
  * tolerance - set tolerance (from 0 to 65535) (default 0)

# `ass`

```elixir
@spec ass(FFix.Stream.t(),
  filename: String.t(),
  f: String.t(),
  alpha: boolean(),
  original_size: term(),
  fontsdir: String.t(),
  shaping: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Render ASS subtitles onto input video using the libass library.

## Options

  * filename - set the filename of file to read
  * f - set the filename of file to read
  * alpha - enable processing of alpha channel (default false)
  * original_size - set the size of the original video (used to scale fonts)
  * fontsdir - set the directory containing the fonts to read
  * shaping - set shaping engine (from -1 to 1) (default auto)
    - auto (-1) 
    - simple (0)  - simple shaping
    - complex (1)  - complex shaping

# `atadenoise`

```elixir
@spec atadenoise(FFix.Stream.t(),
  p: term(),
  a: integer() | String.t() | atom(),
  s: integer(),
  enable: String.t(),
  &quot;0a&quot;: float(),
  &quot;0b&quot;: float(),
  &quot;1a&quot;: float(),
  &quot;1b&quot;: float(),
  &quot;2a&quot;: float(),
  &quot;2b&quot;: float(),
  &quot;0s&quot;: float(),
  &quot;1s&quot;: float(),
  &quot;2s&quot;: float()
) :: FFix.Stream.t()
```

Apply an Adaptive Temporal Averaging Denoiser.

## Options

  * p - set what planes to filter (default 7)
  * a - set variant of algorithm (from 0 to 1) (default p)
    - p (0)  - parallel
    - s (1)  - serial

  * s - set how many frames to use (from 5 to 129) (default 9)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * 0a - set threshold A for 1st plane (from 0 to 0.3) (default 0.02)
  * 0b - set threshold B for 1st plane (from 0 to 5) (default 0.04)
  * 1a - set threshold A for 2nd plane (from 0 to 0.3) (default 0.02)
  * 1b - set threshold B for 2nd plane (from 0 to 5) (default 0.04)
  * 2a - set threshold A for 3rd plane (from 0 to 0.3) (default 0.02)
  * 2b - set threshold B for 3rd plane (from 0 to 5) (default 0.04)
  * 0s - set sigma for 1st plane (from 0 to 32767) (default 32767)
  * 1s - set sigma for 2nd plane (from 0 to 32767) (default 32767)
  * 2s - set sigma for 3rd plane (from 0 to 32767) (default 32767)

# `avgblur`

```elixir
@spec avgblur(FFix.Stream.t(),
  enable: String.t(),
  planes: integer(),
  sizeX: integer(),
  sizeY: integer()
) :: FFix.Stream.t()
```

Apply Average Blur filter.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * planes - set planes to filter (from 0 to 15) (default 15)
  * sizeX - set horizontal size (from 1 to 1024) (default 1)
  * sizeY - set vertical size (from 0 to 1024) (default 0)

# `avgblur_opencl`

```elixir
@spec avgblur_opencl(FFix.Stream.t(),
  planes: integer(),
  sizeX: integer(),
  sizeY: integer()
) ::
  FFix.Stream.t()
```

Apply average blur filter

## Options

  * planes - set planes to filter (from 0 to 15) (default 15)
  * sizeX - set horizontal size (from 1 to 1024) (default 1)
  * sizeY - set vertical size (from 0 to 1024) (default 0)

# `avgblur_vulkan`

```elixir
@spec avgblur_vulkan(FFix.Stream.t(),
  planes: integer(),
  sizeX: integer(),
  sizeY: integer()
) ::
  FFix.Stream.t()
```

Apply avgblur mask to input video

## Options

  * planes - Set planes to filter (bitmask) (from 0 to 15) (default 15)
  * sizeX - Set horizontal radius (from 1 to 32) (default 3)
  * sizeY - Set vertical radius (from 1 to 32) (default 3)

# `backgroundkey`

```elixir
@spec backgroundkey(FFix.Stream.t(),
  enable: String.t(),
  threshold: float(),
  blend: float(),
  similarity: float()
) :: FFix.Stream.t()
```

Turns a static background into transparency.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * threshold - set the scene change threshold (from 0 to 1) (default 0.08)
  * blend - set the blend value (from 0 to 1) (default 0)
  * similarity - set the similarity (from 0 to 1) (default 0.1)

# `bbox`

```elixir
@spec bbox(FFix.Stream.t(), enable: String.t(), min_val: integer()) :: FFix.Stream.t()
```

Compute bounding box for each frame.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * min_val - set minimum luminance value for bounding box (from 0 to 65535) (default 16)

# `bench`

```elixir
@spec bench(
  FFix.Stream.t(),
  [{:action, integer() | String.t() | atom()}]
) :: FFix.Stream.t()
```

Benchmark part of a filtergraph.

## Options

  * action - set action (from 0 to 1) (default start)
    - start (0)  - start timer
    - stop (1)  - stop timer

# `bilateral`

```elixir
@spec bilateral(FFix.Stream.t(),
  enable: String.t(),
  planes: integer(),
  sigmaS: float(),
  sigmaR: float()
) :: FFix.Stream.t()
```

Apply Bilateral filter.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * planes - set planes to filter (from 0 to 15) (default 1)
  * sigmaS - set spatial sigma (from 0 to 512) (default 0.1)
  * sigmaR - set range sigma (from 0 to 1) (default 0.1)

# `bitplanenoise`

```elixir
@spec bitplanenoise(FFix.Stream.t(),
  filter: boolean(),
  enable: String.t(),
  bitplane: integer()
) ::
  FFix.Stream.t()
```

Measure bit plane noise.

## Options

  * filter - show noisy pixels (default false)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * bitplane - set bit plane to use for measuring noise (from 1 to 16) (default 1)

# `blackdetect`

```elixir
@spec blackdetect(FFix.Stream.t(),
  d: float(),
  black_min_duration: float(),
  picture_black_ratio_th: float(),
  pic_th: float(),
  pixel_black_th: float(),
  pix_th: float()
) :: FFix.Stream.t()
```

Detect video intervals that are (almost) black.

## Options

  * d - set minimum detected black duration in seconds (from 0 to DBL_MAX) (default 2)
  * black_min_duration - set minimum detected black duration in seconds (from 0 to DBL_MAX) (default 2)
  * picture_black_ratio_th - set the picture black ratio threshold (from 0 to 1) (default 0.98)
  * pic_th - set the picture black ratio threshold (from 0 to 1) (default 0.98)
  * pixel_black_th - set the pixel black threshold (from 0 to 1) (default 0.1)
  * pix_th - set the pixel black threshold (from 0 to 1) (default 0.1)

# `blackframe`

```elixir
@spec blackframe(FFix.Stream.t(),
  threshold: integer(),
  amount: integer(),
  thresh: integer()
) ::
  FFix.Stream.t()
```

Detect frames that are (almost) black.

## Options

  * threshold - threshold below which a pixel value is considered black (from 0 to 255) (default 32)
  * amount - percentage of the pixels that have to be below the threshold for the frame to be considered black (from 0 to 100) (default 98)
  * thresh - threshold below which a pixel value is considered black (from 0 to 255) (default 32)

# `blend`

```elixir
@spec blend(FFix.Stream.t(), FFix.Stream.t(),
  enable: String.t(),
  shortest: boolean(),
  c0_mode: integer() | String.t() | atom(),
  c1_mode: integer() | String.t() | atom(),
  c2_mode: integer() | String.t() | atom(),
  c3_mode: integer() | String.t() | atom(),
  all_mode: integer() | String.t() | atom(),
  c0_opacity: float(),
  c1_opacity: float(),
  c2_opacity: float(),
  c3_opacity: float(),
  all_opacity: float(),
  eof_action: integer() | String.t() | atom(),
  repeatlast: boolean(),
  ts_sync_mode: integer() | String.t() | atom(),
  c0_expr: String.t(),
  c1_expr: String.t(),
  c2_expr: String.t(),
  c3_expr: String.t(),
  all_expr: String.t()
) :: FFix.Stream.t()
```

Blend two video frames into each other.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * shortest - force termination when the shortest input terminates (default false)
  * c0_mode - set component #0 blend mode (from 0 to 39) (default normal)
    - addition (1) 
    - addition128 (28) 
    - grainmerge (28) 
    - and (2) 
    - average (3) 
    - burn (4) 
    - darken (5) 
    - difference (6) 
    - difference128 (7) 
    - grainextract (7) 
    - divide (8) 
    - dodge (9) 
    - exclusion (10) 
    - extremity (32) 
    - freeze (31) 
    - glow (27) 
    - hardlight (11) 
    - hardmix (25) 
    - heat (30) 
    - lighten (12) 
    - linearlight (26) 
    - multiply (13) 
    - multiply128 (29) 
    - negation (14) 
    - normal (0) 
    - or (15) 
    - overlay (16) 
    - phoenix (17) 
    - pinlight (18) 
    - reflect (19) 
    - screen (20) 
    - softlight (21) 
    - subtract (22) 
    - vividlight (23) 
    - xor (24) 
    - softdifference (33) 
    - geometric (34) 
    - harmonic (35) 
    - bleach (36) 
    - stain (37) 
    - interpolate (38) 
    - hardoverlay (39) 

  * c1_mode - set component #1 blend mode (from 0 to 39) (default normal)
    - addition (1) 
    - addition128 (28) 
    - grainmerge (28) 
    - and (2) 
    - average (3) 
    - burn (4) 
    - darken (5) 
    - difference (6) 
    - difference128 (7) 
    - grainextract (7) 
    - divide (8) 
    - dodge (9) 
    - exclusion (10) 
    - extremity (32) 
    - freeze (31) 
    - glow (27) 
    - hardlight (11) 
    - hardmix (25) 
    - heat (30) 
    - lighten (12) 
    - linearlight (26) 
    - multiply (13) 
    - multiply128 (29) 
    - negation (14) 
    - normal (0) 
    - or (15) 
    - overlay (16) 
    - phoenix (17) 
    - pinlight (18) 
    - reflect (19) 
    - screen (20) 
    - softlight (21) 
    - subtract (22) 
    - vividlight (23) 
    - xor (24) 
    - softdifference (33) 
    - geometric (34) 
    - harmonic (35) 
    - bleach (36) 
    - stain (37) 
    - interpolate (38) 
    - hardoverlay (39) 

  * c2_mode - set component #2 blend mode (from 0 to 39) (default normal)
    - addition (1) 
    - addition128 (28) 
    - grainmerge (28) 
    - and (2) 
    - average (3) 
    - burn (4) 
    - darken (5) 
    - difference (6) 
    - difference128 (7) 
    - grainextract (7) 
    - divide (8) 
    - dodge (9) 
    - exclusion (10) 
    - extremity (32) 
    - freeze (31) 
    - glow (27) 
    - hardlight (11) 
    - hardmix (25) 
    - heat (30) 
    - lighten (12) 
    - linearlight (26) 
    - multiply (13) 
    - multiply128 (29) 
    - negation (14) 
    - normal (0) 
    - or (15) 
    - overlay (16) 
    - phoenix (17) 
    - pinlight (18) 
    - reflect (19) 
    - screen (20) 
    - softlight (21) 
    - subtract (22) 
    - vividlight (23) 
    - xor (24) 
    - softdifference (33) 
    - geometric (34) 
    - harmonic (35) 
    - bleach (36) 
    - stain (37) 
    - interpolate (38) 
    - hardoverlay (39) 

  * c3_mode - set component #3 blend mode (from 0 to 39) (default normal)
    - addition (1) 
    - addition128 (28) 
    - grainmerge (28) 
    - and (2) 
    - average (3) 
    - burn (4) 
    - darken (5) 
    - difference (6) 
    - difference128 (7) 
    - grainextract (7) 
    - divide (8) 
    - dodge (9) 
    - exclusion (10) 
    - extremity (32) 
    - freeze (31) 
    - glow (27) 
    - hardlight (11) 
    - hardmix (25) 
    - heat (30) 
    - lighten (12) 
    - linearlight (26) 
    - multiply (13) 
    - multiply128 (29) 
    - negation (14) 
    - normal (0) 
    - or (15) 
    - overlay (16) 
    - phoenix (17) 
    - pinlight (18) 
    - reflect (19) 
    - screen (20) 
    - softlight (21) 
    - subtract (22) 
    - vividlight (23) 
    - xor (24) 
    - softdifference (33) 
    - geometric (34) 
    - harmonic (35) 
    - bleach (36) 
    - stain (37) 
    - interpolate (38) 
    - hardoverlay (39) 

  * all_mode - set blend mode for all components (from -1 to 39) (default -1)
    - addition (1) 
    - addition128 (28) 
    - grainmerge (28) 
    - and (2) 
    - average (3) 
    - burn (4) 
    - darken (5) 
    - difference (6) 
    - difference128 (7) 
    - grainextract (7) 
    - divide (8) 
    - dodge (9) 
    - exclusion (10) 
    - extremity (32) 
    - freeze (31) 
    - glow (27) 
    - hardlight (11) 
    - hardmix (25) 
    - heat (30) 
    - lighten (12) 
    - linearlight (26) 
    - multiply (13) 
    - multiply128 (29) 
    - negation (14) 
    - normal (0) 
    - or (15) 
    - overlay (16) 
    - phoenix (17) 
    - pinlight (18) 
    - reflect (19) 
    - screen (20) 
    - softlight (21) 
    - subtract (22) 
    - vividlight (23) 
    - xor (24) 
    - softdifference (33) 
    - geometric (34) 
    - harmonic (35) 
    - bleach (36) 
    - stain (37) 
    - interpolate (38) 
    - hardoverlay (39) 

  * c0_opacity - set color component #0 opacity (from 0 to 1) (default 1)
  * c1_opacity - set color component #1 opacity (from 0 to 1) (default 1)
  * c2_opacity - set color component #2 opacity (from 0 to 1) (default 1)
  * c3_opacity - set color component #3 opacity (from 0 to 1) (default 1)
  * all_opacity - set opacity for all color components (from 0 to 1) (default 1)
  * eof_action - Action to take when encountering EOF from secondary input  (from 0 to 2) (default repeat)
    - repeat (0)  - Repeat the previous frame.
    - endall (1)  - End both streams.
    - pass (2)  - Pass through the main input.

  * repeatlast - extend last frame of secondary streams beyond EOF (default true)
  * ts_sync_mode - How strictly to sync streams based on secondary input timestamps (from 0 to 1) (default default)
    - default (0)  - Frame from secondary input with the nearest lower or equal timestamp to the primary input frame
    - nearest (1)  - Frame from secondary input with the absolute nearest timestamp to the primary input frame

  * c0_expr - set color component #0 expression
  * c1_expr - set color component #1 expression
  * c2_expr - set color component #2 expression
  * c3_expr - set color component #3 expression
  * all_expr - set expression for all color components

# `blend_vulkan`

```elixir
@spec blend_vulkan(FFix.Stream.t(), FFix.Stream.t(),
  c0_mode: integer() | String.t() | atom(),
  c1_mode: integer() | String.t() | atom(),
  c2_mode: integer() | String.t() | atom(),
  c3_mode: integer() | String.t() | atom(),
  all_mode: integer() | String.t() | atom(),
  c0_opacity: float(),
  c1_opacity: float(),
  c2_opacity: float(),
  c3_opacity: float(),
  all_opacity: float()
) :: FFix.Stream.t()
```

Blend two video frames in Vulkan

## Options

  * c0_mode - set component #0 blend mode (from 0 to 39) (default normal)
    - normal (0) 
    - multiply (13) 

  * c1_mode - set component #1 blend mode (from 0 to 39) (default normal)
    - normal (0) 
    - multiply (13) 

  * c2_mode - set component #2 blend mode (from 0 to 39) (default normal)
    - normal (0) 
    - multiply (13) 

  * c3_mode - set component #3 blend mode (from 0 to 39) (default normal)
    - normal (0) 
    - multiply (13) 

  * all_mode - set blend mode for all components (from -1 to 39) (default -1)
    - normal (0) 
    - multiply (13) 

  * c0_opacity - set color component #0 opacity (from 0 to 1) (default 1)
  * c1_opacity - set color component #1 opacity (from 0 to 1) (default 1)
  * c2_opacity - set color component #2 opacity (from 0 to 1) (default 1)
  * c3_opacity - set color component #3 opacity (from 0 to 1) (default 1)
  * all_opacity - set opacity for all color components (from 0 to 1) (default 1)

# `blockdetect`

```elixir
@spec blockdetect(FFix.Stream.t(),
  planes: integer(),
  period_min: integer(),
  period_max: integer()
) ::
  FFix.Stream.t()
```

Blockdetect filter.

## Options

  * planes - set planes to filter (from 0 to 15) (default 1)
  * period_min - Minimum period to search for (from 2 to 32) (default 3)
  * period_max - Maximum period to search for (from 2 to 64) (default 24)

# `blurdetect`

```elixir
@spec blurdetect(FFix.Stream.t(),
  high: float(),
  low: float(),
  planes: integer(),
  radius: integer(),
  block_pct: integer(),
  block_width: integer(),
  block_height: integer()
) :: FFix.Stream.t()
```

Blurdetect filter.

## Options

  * high - set high threshold (from 0 to 1) (default 0.117647)
  * low - set low threshold (from 0 to 1) (default 0.0588235)
  * planes - set planes to filter (from 0 to 15) (default 1)
  * radius - search radius for maxima detection (from 1 to 100) (default 50)
  * block_pct - block pooling threshold when calculating blurriness (from 1 to 100) (default 80)
  * block_width - block size for block-based abbreviation of blurriness (from -1 to INT_MAX) (default -1)
  * block_height - block size for block-based abbreviation of blurriness (from -1 to INT_MAX) (default -1)

# `boxblur`

```elixir
@spec boxblur(FFix.Stream.t(),
  cr: String.t(),
  enable: String.t(),
  cp: integer(),
  luma_radius: String.t(),
  lr: String.t(),
  chroma_radius: String.t(),
  lp: integer(),
  alpha_radius: String.t(),
  ar: String.t(),
  luma_power: integer(),
  chroma_power: integer(),
  alpha_power: integer(),
  ap: integer()
) :: FFix.Stream.t()
```

Blur the input.

## Options

  * cr - Radius of the chroma blurring box
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * cp - How many times should the boxblur be applied to chroma (from -1 to INT_MAX) (default -1)
  * luma_radius - Radius of the luma blurring box (default "2")
  * lr - Radius of the luma blurring box (default "2")
  * chroma_radius - Radius of the chroma blurring box
  * lp - How many times should the boxblur be applied to luma (from 0 to INT_MAX) (default 2)
  * alpha_radius - Radius of the alpha blurring box
  * ar - Radius of the alpha blurring box
  * luma_power - How many times should the boxblur be applied to luma (from 0 to INT_MAX) (default 2)
  * chroma_power - How many times should the boxblur be applied to chroma (from -1 to INT_MAX) (default -1)
  * alpha_power - How many times should the boxblur be applied to alpha (from -1 to INT_MAX) (default -1)
  * ap - How many times should the boxblur be applied to alpha (from -1 to INT_MAX) (default -1)

# `boxblur_opencl`

```elixir
@spec boxblur_opencl(FFix.Stream.t(),
  cr: String.t(),
  cp: integer(),
  luma_radius: String.t(),
  lr: String.t(),
  chroma_radius: String.t(),
  lp: integer(),
  alpha_radius: String.t(),
  ar: String.t(),
  luma_power: integer(),
  chroma_power: integer(),
  alpha_power: integer(),
  ap: integer()
) :: FFix.Stream.t()
```

Apply boxblur filter to input video

## Options

  * cr - Radius of the chroma blurring box
  * cp - How many times should the boxblur be applied to chroma (from -1 to INT_MAX) (default -1)
  * luma_radius - Radius of the luma blurring box (default "2")
  * lr - Radius of the luma blurring box (default "2")
  * chroma_radius - Radius of the chroma blurring box
  * lp - How many times should the boxblur be applied to luma (from 0 to INT_MAX) (default 2)
  * alpha_radius - Radius of the alpha blurring box
  * ar - Radius of the alpha blurring box
  * luma_power - How many times should the boxblur be applied to luma (from 0 to INT_MAX) (default 2)
  * chroma_power - How many times should the boxblur be applied to chroma (from -1 to INT_MAX) (default -1)
  * alpha_power - How many times should the boxblur be applied to alpha (from -1 to INT_MAX) (default -1)
  * ap - How many times should the boxblur be applied to alpha (from -1 to INT_MAX) (default -1)

# `bwdif`

```elixir
@spec bwdif(FFix.Stream.t(),
  mode: integer() | String.t() | atom(),
  enable: String.t(),
  parity: integer() | String.t() | atom(),
  deint: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Deinterlace the input image.

## Options

  * mode - specify the interlacing mode (from 0 to 1) (default send_field)
    - send_frame (0)  - send one frame for each frame
    - send_field (1)  - send one frame for each field

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * parity - specify the assumed picture field parity (from -1 to 1) (default auto)
    - tff (0)  - assume top field first
    - bff (1)  - assume bottom field first
    - auto (-1)  - auto detect parity

  * deint - specify which frames to deinterlace (from 0 to 1) (default all)
    - all (0)  - deinterlace all frames
    - interlaced (1)  - only deinterlace frames marked as interlaced

# `bwdif_vulkan`

```elixir
@spec bwdif_vulkan(FFix.Stream.t(),
  mode: integer() | String.t() | atom(),
  enable: String.t(),
  parity: integer() | String.t() | atom(),
  deint: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Deinterlace Vulkan frames via bwdif

## Options

  * mode - specify the interlacing mode (from 0 to 3) (default send_frame)
    - send_frame (0)  - send one frame for each frame
    - send_field (1)  - send one frame for each field
    - send_frame_nospatial 2 - send one frame for each frame, but skip spatial interlacing check
    - send_field_nospatial 3 - send one frame for each field, but skip spatial interlacing check

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * parity - specify the assumed picture field parity (from -1 to 1) (default auto)
    - tff (0)  - assume top field first
    - bff (1)  - assume bottom field first
    - auto (-1)  - auto detect parity

  * deint - specify which frames to deinterlace (from 0 to 1) (default all)
    - all (0)  - deinterlace all frames
    - interlaced (1)  - only deinterlace frames marked as interlaced

# `cas`

```elixir
@spec cas(FFix.Stream.t(), enable: String.t(), planes: term(), strength: float()) ::
  FFix.Stream.t()
```

Contrast Adaptive Sharpen.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * planes - set what planes to filter (default 7)
  * strength - set the sharpening strength (from 0 to 1) (default 0)

# `ccrepack`

```elixir
@spec ccrepack(
  FFix.Stream.t(),
  []
) :: FFix.Stream.t()
```

Repack CEA-708 closed caption metadata

## Options

# `chromaber_vulkan`

```elixir
@spec chromaber_vulkan(FFix.Stream.t(), dist_x: float(), dist_y: float()) ::
  FFix.Stream.t()
```

Offset chroma of input video (chromatic aberration)

## Options

  * dist_x - Set horizontal distortion amount (from -10 to 10) (default 0)
  * dist_y - Set vertical distortion amount (from -10 to 10) (default 0)

# `chromahold`

```elixir
@spec chromahold(FFix.Stream.t(),
  enable: String.t(),
  color: term(),
  blend: float(),
  similarity: float(),
  yuv: boolean()
) :: FFix.Stream.t()
```

Turns a certain color range into gray.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * color - set the chromahold key color (default "black")
  * blend - set the chromahold blend value (from 0 to 1) (default 0)
  * similarity - set the chromahold similarity value (from 1e-05 to 1) (default 0.01)
  * yuv - color parameter is in yuv instead of rgb (default false)

# `chromakey`

```elixir
@spec chromakey(FFix.Stream.t(),
  enable: String.t(),
  color: term(),
  blend: float(),
  similarity: float(),
  yuv: boolean()
) :: FFix.Stream.t()
```

Turns a certain color into transparency. Operates on YUV colors.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * color - set the chromakey key color (default "black")
  * blend - set the chromakey key blend value (from 0 to 1) (default 0)
  * similarity - set the chromakey similarity value (from 1e-05 to 1) (default 0.01)
  * yuv - color parameter is in yuv instead of rgb (default false)

# `chromanr`

```elixir
@spec chromanr(FFix.Stream.t(),
  enable: String.t(),
  thres: float(),
  sizew: integer(),
  sizeh: integer(),
  stepw: integer(),
  steph: integer(),
  threy: float(),
  threu: float(),
  threv: float(),
  distance: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Reduce chrominance noise.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * thres - set y+u+v threshold (from 1 to 200) (default 30)
  * sizew - set horizontal patch size (from 1 to 100) (default 5)
  * sizeh - set vertical patch size (from 1 to 100) (default 5)
  * stepw - set horizontal step (from 1 to 50) (default 1)
  * steph - set vertical step (from 1 to 50) (default 1)
  * threy - set y threshold (from 1 to 200) (default 200)
  * threu - set u threshold (from 1 to 200) (default 200)
  * threv - set v threshold (from 1 to 200) (default 200)
  * distance - set distance type (from 0 to 1) (default manhattan)
    - manhattan (0) 
    - euclidean (1) 

# `chromashift`

```elixir
@spec chromashift(FFix.Stream.t(),
  cbv: integer(),
  enable: String.t(),
  edge: integer() | String.t() | atom(),
  cbh: integer(),
  crh: integer(),
  crv: integer()
) :: FFix.Stream.t()
```

Shift chroma.

## Options

  * cbv - shift chroma-blue vertically (from -255 to 255) (default 0)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * edge - set edge operation (from 0 to 1) (default smear)
    - smear (0) 
    - wrap (1) 

  * cbh - shift chroma-blue horizontally (from -255 to 255) (default 0)
  * crh - shift chroma-red horizontally (from -255 to 255) (default 0)
  * crv - shift chroma-red vertically (from -255 to 255) (default 0)

# `ciescope`

```elixir
@spec ciescope(FFix.Stream.t(),
  size: integer(),
  system: integer() | String.t() | atom(),
  intensity: float(),
  i: float(),
  s: integer(),
  fill: boolean(),
  cie: integer() | String.t() | atom(),
  gamuts: integer() | String.t() | atom() | [String.t() | atom()],
  contrast: float(),
  corrgamma: boolean(),
  showwhite: boolean(),
  gamma: float()
) :: FFix.Stream.t()
```

Video CIE scope.

## Options

  * size - set ciescope size (from 256 to 8192) (default 512)
  * system - set color system (from 0 to 9) (default hdtv)
    - ntsc (0)  - NTSC 1953 Y'I'O' (ITU-R BT.470 System M)
    - 470m (0)  - NTSC 1953 Y'I'O' (ITU-R BT.470 System M)
    - ebu (1)  - EBU Y'U'V' (PAL/SECAM) (ITU-R BT.470 System B, G)
    - 470bg (1)  - EBU Y'U'V' (PAL/SECAM) (ITU-R BT.470 System B, G)
    - smpte (2)  - SMPTE-C RGB
    - 240m (3)  - SMPTE-240M Y'PbPr
    - apple (4)  - Apple RGB
    - widergb (5)  - Adobe Wide Gamut RGB
    - cie1931 (6)  - CIE 1931 RGB
    - hdtv (7)  - ITU.BT-709 Y'CbCr
    - rec709 (7)  - ITU.BT-709 Y'CbCr
    - uhdtv (8)  - ITU-R.BT-2020
    - rec2020 (8)  - ITU-R.BT-2020
    - dcip3 (9)  - DCI-P3

  * intensity - set ciescope intensity (from 0 to 1) (default 0.001)
  * i - set ciescope intensity (from 0 to 1) (default 0.001)
  * s - set ciescope size (from 256 to 8192) (default 512)
  * fill - fill with CIE colors (default true)
  * cie - set cie system (from 0 to 2) (default xyy)
    - xyy (0)  - CIE 1931 xyY
    - ucs (1)  - CIE 1960 UCS
    - luv (2)  - CIE 1976 Luv

  * gamuts - set what gamuts to draw (default 0)
    - ntsc
    - 470m
    - ebu
    - 470bg
    - smpte
    - 240m
    - apple
    - widergb
    - cie1931
    - hdtv
    - rec709
    - uhdtv
    - rec2020
    - dcip3

  * contrast - (from 0 to 1) (default 0.75)
  * corrgamma - (default true)
  * showwhite - (default false)
  * gamma - (from 0.1 to 6) (default 2.6)

# `codecview`

```elixir
@spec codecview(FFix.Stream.t(),
  block: boolean(),
  enable: String.t(),
  qp: boolean(),
  mv: integer() | String.t() | atom() | [String.t() | atom()],
  mv_type: integer() | String.t() | atom() | [String.t() | atom()],
  mvt: integer() | String.t() | atom() | [String.t() | atom()],
  frame_type: integer() | String.t() | atom() | [String.t() | atom()],
  ft: integer() | String.t() | atom() | [String.t() | atom()]
) :: FFix.Stream.t()
```

Visualize information about some codecs.

## Options

  * block - set block partitioning structure to visualize (default false)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * qp - (default false)
  * mv - set motion vectors to visualize (default 0)
    - pf - forward predicted MVs of P-frames
    - bf - forward predicted MVs of B-frames
    - bb - backward predicted MVs of B-frames

  * mv_type - set motion vectors type (default 0)
    - fp - forward predicted MVs
    - bp - backward predicted MVs

  * mvt - set motion vectors type (default 0)
    - fp - forward predicted MVs
    - bp - backward predicted MVs

  * frame_type - set frame types to visualize motion vectors of (default 0)
    - if - I-frames
    - pf - P-frames
    - bf - B-frames

  * ft - set frame types to visualize motion vectors of (default 0)
    - if - I-frames
    - pf - P-frames
    - bf - B-frames

# `colorbalance`

```elixir
@spec colorbalance(FFix.Stream.t(),
  bm: float(),
  rm: float(),
  enable: String.t(),
  rs: float(),
  gs: float(),
  bs: float(),
  gm: float(),
  rh: float(),
  gh: float(),
  bh: float(),
  pl: boolean()
) :: FFix.Stream.t()
```

Adjust the color balance.

## Options

  * bm - set blue midtones (from -1 to 1) (default 0)
  * rm - set red midtones (from -1 to 1) (default 0)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * rs - set red shadows (from -1 to 1) (default 0)
  * gs - set green shadows (from -1 to 1) (default 0)
  * bs - set blue shadows (from -1 to 1) (default 0)
  * gm - set green midtones (from -1 to 1) (default 0)
  * rh - set red highlights (from -1 to 1) (default 0)
  * gh - set green highlights (from -1 to 1) (default 0)
  * bh - set blue highlights (from -1 to 1) (default 0)
  * pl - preserve lightness (default false)

# `colorchannelmixer`

```elixir
@spec colorchannelmixer(FFix.Stream.t(),
  pa: float(),
  enable: String.t(),
  bb: float(),
  gr: float(),
  pc: integer() | String.t() | atom(),
  br: float(),
  aa: float(),
  ar: float(),
  bg: float(),
  ag: float(),
  rr: float(),
  rg: float(),
  rb: float(),
  ra: float(),
  gg: float(),
  gb: float(),
  ga: float(),
  ba: float(),
  ab: float()
) :: FFix.Stream.t()
```

Adjust colors by mixing color channels.

## Options

  * pa - set the preserve color amount (from 0 to 1) (default 0)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * bb - set the blue gain for the blue channel (from -2 to 2) (default 1)
  * gr - set the red gain for the green channel (from -2 to 2) (default 0)
  * pc - set the preserve color mode (from 0 to 6) (default none)
    - none (0)  - disabled
    - lum (1)  - luminance
    - max (2)  - max
    - avg (3)  - average
    - sum (4)  - sum
    - nrm (5)  - norm
    - pwr (6)  - power

  * br - set the red gain for the blue channel (from -2 to 2) (default 0)
  * aa - set the alpha gain for the alpha channel (from -2 to 2) (default 1)
  * ar - set the red gain for the alpha channel (from -2 to 2) (default 0)
  * bg - set the green gain for the blue channel (from -2 to 2) (default 0)
  * ag - set the green gain for the alpha channel (from -2 to 2) (default 0)
  * rr - set the red gain for the red channel (from -2 to 2) (default 1)
  * rg - set the green gain for the red channel (from -2 to 2) (default 0)
  * rb - set the blue gain for the red channel (from -2 to 2) (default 0)
  * ra - set the alpha gain for the red channel (from -2 to 2) (default 0)
  * gg - set the green gain for the green channel (from -2 to 2) (default 1)
  * gb - set the blue gain for the green channel (from -2 to 2) (default 0)
  * ga - set the alpha gain for the green channel (from -2 to 2) (default 0)
  * ba - set the alpha gain for the blue channel (from -2 to 2) (default 0)
  * ab - set the blue gain for the alpha channel (from -2 to 2) (default 0)

# `colorcontrast`

```elixir
@spec colorcontrast(FFix.Stream.t(),
  enable: String.t(),
  gm: float(),
  pl: float(),
  rc: float(),
  by: float(),
  rcw: float(),
  gmw: float(),
  byw: float()
) :: FFix.Stream.t()
```

Adjust color contrast between RGB components.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * gm - set the green-magenta contrast (from -1 to 1) (default 0)
  * pl - set the amount of preserving lightness (from 0 to 1) (default 0)
  * rc - set the red-cyan contrast (from -1 to 1) (default 0)
  * by - set the blue-yellow contrast (from -1 to 1) (default 0)
  * rcw - set the red-cyan weight (from 0 to 1) (default 0)
  * gmw - set the green-magenta weight (from 0 to 1) (default 0)
  * byw - set the blue-yellow weight (from 0 to 1) (default 0)

# `colorcorrect`

```elixir
@spec colorcorrect(FFix.Stream.t(),
  enable: String.t(),
  analyze: integer() | String.t() | atom(),
  saturation: float(),
  rh: float(),
  bh: float(),
  rl: float(),
  bl: float()
) :: FFix.Stream.t()
```

Adjust color white balance selectively for blacks and whites.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * analyze - set the analyze mode (from 0 to 3) (default manual)
    - manual (0)  - manually set options
    - average (1)  - use average pixels
    - minmax (2)  - use minmax pixels
    - median (3)  - use median pixels

  * saturation - set the amount of saturation (from -3 to 3) (default 1)
  * rh - set the red highlight spot (from -1 to 1) (default 0)
  * bh - set the blue highlight spot (from -1 to 1) (default 0)
  * rl - set the red shadow spot (from -1 to 1) (default 0)
  * bl - set the blue shadow spot (from -1 to 1) (default 0)

# `colorhold`

```elixir
@spec colorhold(FFix.Stream.t(),
  enable: String.t(),
  color: term(),
  blend: float(),
  similarity: float()
) ::
  FFix.Stream.t()
```

Turns a certain color range into gray. Operates on RGB colors.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * color - set the colorhold key color (default "black")
  * blend - set the colorhold blend value (from 0 to 1) (default 0)
  * similarity - set the colorhold similarity value (from 1e-05 to 1) (default 0.01)

# `colorize`

```elixir
@spec colorize(FFix.Stream.t(),
  enable: String.t(),
  mix: float(),
  hue: float(),
  saturation: float(),
  lightness: float()
) :: FFix.Stream.t()
```

Overlay a solid color on the video stream.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * mix - set the mix of source lightness (from 0 to 1) (default 1)
  * hue - set the hue (from 0 to 360) (default 0)
  * saturation - set the saturation (from 0 to 1) (default 0.5)
  * lightness - set the lightness (from 0 to 1) (default 0.5)

# `colorkey`

```elixir
@spec colorkey(FFix.Stream.t(),
  enable: String.t(),
  color: term(),
  blend: float(),
  similarity: float()
) ::
  FFix.Stream.t()
```

Turns a certain color into transparency. Operates on RGB colors.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * color - set the colorkey key color (default "black")
  * blend - set the colorkey key blend value (from 0 to 1) (default 0)
  * similarity - set the colorkey similarity value (from 1e-05 to 1) (default 0.01)

# `colorkey_opencl`

```elixir
@spec colorkey_opencl(FFix.Stream.t(),
  color: term(),
  blend: float(),
  similarity: float()
) ::
  FFix.Stream.t()
```

Turns a certain color into transparency. Operates on RGB colors.

## Options

  * color - set the colorkey key color (default "black")
  * blend - set the colorkey key blend value (from 0 to 1) (default 0)
  * similarity - set the colorkey similarity value (from 0.01 to 1) (default 0.01)

# `colorlevels`

```elixir
@spec colorlevels(FFix.Stream.t(),
  enable: String.t(),
  rimin: float(),
  gimin: float(),
  bimin: float(),
  aimin: float(),
  rimax: float(),
  gimax: float(),
  bimax: float(),
  aimax: float(),
  romin: float(),
  gomin: float(),
  bomin: float(),
  aomin: float(),
  romax: float(),
  gomax: float(),
  bomax: float(),
  aomax: float(),
  preserve: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Adjust the color levels.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * rimin - set input red black point (from -1 to 1) (default 0)
  * gimin - set input green black point (from -1 to 1) (default 0)
  * bimin - set input blue black point (from -1 to 1) (default 0)
  * aimin - set input alpha black point (from -1 to 1) (default 0)
  * rimax - set input red white point (from -1 to 1) (default 1)
  * gimax - set input green white point (from -1 to 1) (default 1)
  * bimax - set input blue white point (from -1 to 1) (default 1)
  * aimax - set input alpha white point (from -1 to 1) (default 1)
  * romin - set output red black point (from 0 to 1) (default 0)
  * gomin - set output green black point (from 0 to 1) (default 0)
  * bomin - set output blue black point (from 0 to 1) (default 0)
  * aomin - set output alpha black point (from 0 to 1) (default 0)
  * romax - set output red white point (from 0 to 1) (default 1)
  * gomax - set output green white point (from 0 to 1) (default 1)
  * bomax - set output blue white point (from 0 to 1) (default 1)
  * aomax - set output alpha white point (from 0 to 1) (default 1)
  * preserve - set preserve color mode (from 0 to 6) (default none)
    - none (0)  - disabled
    - lum (1)  - luminance
    - max (2)  - max
    - avg (3)  - average
    - sum (4)  - sum
    - nrm (5)  - norm
    - pwr (6)  - power

# `colormap`

```elixir
@spec colormap(FFix.Stream.t(), FFix.Stream.t(), FFix.Stream.t(),
  type: integer() | String.t() | atom(),
  kernel: integer() | String.t() | atom(),
  enable: String.t(),
  patch_size: term(),
  nb_patches: integer()
) :: FFix.Stream.t()
```

Apply custom Color Maps to video stream.

## Options

  * type - set the target type used (from 0 to 1) (default absolute)
    - relative (0)  - the target colors are relative
    - absolute (1)  - the target colors are absolute

  * kernel - set the kernel used for measuring color difference (from 0 to 1) (default euclidean)
    - euclidean (0)  - square root of sum of squared differences
    - weuclidean (1)  - weighted square root of sum of squared differences

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * patch_size - set patch size (default "64x64")
  * nb_patches - set number of patches (from 0 to 64) (default 0)

# `colormatrix`

```elixir
@spec colormatrix(FFix.Stream.t(),
  enable: String.t(),
  src: integer() | String.t() | atom(),
  dst: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Convert color matrix.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * src - set source color matrix (from -1 to 4) (default -1)
    - bt709 (0)  - set BT.709 colorspace
    - fcc (1)  - set FCC colorspace   
    - bt601 (2)  - set BT.601 colorspace
    - bt470 (2)  - set BT.470 colorspace
    - bt470bg (2)  - set BT.470 colorspace
    - smpte170m (2)  - set SMTPE-170M colorspace
    - smpte240m (3)  - set SMPTE-240M colorspace
    - bt2020 (4)  - set BT.2020 colorspace

  * dst - set destination color matrix (from -1 to 4) (default -1)
    - bt709 (0)  - set BT.709 colorspace
    - fcc (1)  - set FCC colorspace   
    - bt601 (2)  - set BT.601 colorspace
    - bt470 (2)  - set BT.470 colorspace
    - bt470bg (2)  - set BT.470 colorspace
    - smpte170m (2)  - set SMTPE-170M colorspace
    - smpte240m (3)  - set SMPTE-240M colorspace
    - bt2020 (4)  - set BT.2020 colorspace

# `colorspace`

```elixir
@spec colorspace(FFix.Stream.t(),
  all: integer() | String.t() | atom(),
  format: integer() | String.t() | atom(),
  range: integer() | String.t() | atom(),
  enable: String.t(),
  space: integer() | String.t() | atom(),
  dither: integer() | String.t() | atom(),
  primaries: integer() | String.t() | atom(),
  trc: integer() | String.t() | atom(),
  fast: boolean(),
  wpadapt: integer() | String.t() | atom(),
  iall: integer() | String.t() | atom(),
  ispace: integer() | String.t() | atom(),
  irange: integer() | String.t() | atom(),
  iprimaries: integer() | String.t() | atom(),
  itrc: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Convert between colorspaces.

## Options

  * all - Set all color properties together (from 0 to 8) (default 0)
    - bt470m (1) 
    - bt470bg (2) 
    - bt601-6-525 (3) 
    - bt601-6-625 (4) 
    - bt709 (5) 
    - smpte170m (6) 
    - smpte240m (7) 
    - bt2020 (8) 

  * format - Output pixel format (from -1 to 161) (default -1)
    - yuv420p (0) 
    - yuv420p10 (62) 
    - yuv420p12 (123) 
    - yuv422p (4) 
    - yuv422p10 (64) 
    - yuv422p12 (127) 
    - yuv444p (5) 
    - yuv444p10 (68) 
    - yuv444p12 (131) 

  * range - Output color range (from 0 to 2) (default 0)
    - tv (1) 
    - mpeg (1) 
    - pc (2) 
    - jpeg (2) 

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * space - Output colorspace (from 0 to 17) (default 2)
    - bt709 (1) 
    - fcc (4) 
    - bt470bg (5) 
    - smpte170m (6) 
    - smpte240m (7) 
    - ycgco (8) 
    - gbr (0) 
    - bt2020nc (9) 
    - bt2020ncl (9) 

  * dither - Dithering mode (from 0 to 1) (default none)
    - none (0) 
    - fsb (1) 

  * primaries - Output color primaries (from 0 to 22) (default 2)
    - bt709 (1) 
    - bt470m (4) 
    - bt470bg (5) 
    - smpte170m (6) 
    - smpte240m (7) 
    - smpte428 (10) 
    - film (8) 
    - smpte431 (11) 
    - smpte432 (12) 
    - bt2020 (9) 
    - jedec-p22 (22) 
    - ebu3213 (22) 

  * trc - Output transfer characteristics (from 0 to 18) (default 2)
    - bt709 (1) 
    - bt470m (4) 
    - gamma22 (4) 
    - bt470bg (5) 
    - gamma28 (5) 
    - smpte170m (6) 
    - smpte240m (7) 
    - linear (8) 
    - srgb (13) 
    - iec61966-2-1 (13) 
    - xvycc (11) 
    - iec61966-2-4 (11) 
    - bt2020-10 (14) 
    - bt2020-12 (15) 

  * fast - Ignore primary chromaticity and gamma correction (default false)
  * wpadapt - Whitepoint adaptation method (from 0 to 2) (default bradford)
    - bradford (0) 
    - vonkries (1) 
    - identity (2) 

  * iall - Set all input color properties together (from 0 to 8) (default 0)
    - bt470m (1) 
    - bt470bg (2) 
    - bt601-6-525 (3) 
    - bt601-6-625 (4) 
    - bt709 (5) 
    - smpte170m (6) 
    - smpte240m (7) 
    - bt2020 (8) 

  * ispace - Input colorspace (from 0 to 22) (default 2)
    - bt709 (1) 
    - fcc (4) 
    - bt470bg (5) 
    - smpte170m (6) 
    - smpte240m (7) 
    - ycgco (8) 
    - gbr (0) 
    - bt2020nc (9) 
    - bt2020ncl (9) 

  * irange - Input color range (from 0 to 2) (default 0)
    - tv (1) 
    - mpeg (1) 
    - pc (2) 
    - jpeg (2) 

  * iprimaries - Input color primaries (from 0 to 22) (default 2)
    - bt709 (1) 
    - bt470m (4) 
    - bt470bg (5) 
    - smpte170m (6) 
    - smpte240m (7) 
    - smpte428 (10) 
    - film (8) 
    - smpte431 (11) 
    - smpte432 (12) 
    - bt2020 (9) 
    - jedec-p22 (22) 
    - ebu3213 (22) 

  * itrc - Input transfer characteristics (from 0 to 18) (default 2)
    - bt709 (1) 
    - bt470m (4) 
    - gamma22 (4) 
    - bt470bg (5) 
    - gamma28 (5) 
    - smpte170m (6) 
    - smpte240m (7) 
    - linear (8) 
    - srgb (13) 
    - iec61966-2-1 (13) 
    - xvycc (11) 
    - iec61966-2-4 (11) 
    - bt2020-10 (14) 
    - bt2020-12 (15) 

# `colortemperature`

```elixir
@spec colortemperature(FFix.Stream.t(),
  enable: String.t(),
  mix: float(),
  pl: float(),
  temperature: float()
) :: FFix.Stream.t()
```

Adjust color temperature of video.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * mix - set the mix with filtered output (from 0 to 1) (default 1)
  * pl - set the amount of preserving lightness (from 0 to 1) (default 0)
  * temperature - set the temperature in Kelvin (from 1000 to 40000) (default 6500)

# `convolution`

```elixir
@spec convolution(FFix.Stream.t(),
  enable: String.t(),
  &quot;0m&quot;: String.t(),
  &quot;1m&quot;: String.t(),
  &quot;2m&quot;: String.t(),
  &quot;3m&quot;: String.t(),
  &quot;0rdiv&quot;: float(),
  &quot;1rdiv&quot;: float(),
  &quot;2rdiv&quot;: float(),
  &quot;3rdiv&quot;: float(),
  &quot;0bias&quot;: float(),
  &quot;1bias&quot;: float(),
  &quot;2bias&quot;: float(),
  &quot;3bias&quot;: float(),
  &quot;0mode&quot;: integer() | String.t() | atom(),
  &quot;1mode&quot;: integer() | String.t() | atom(),
  &quot;2mode&quot;: integer() | String.t() | atom(),
  &quot;3mode&quot;: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Apply convolution filter.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * 0m - set matrix for 1st plane (default "0 0 0 0 1 0 0 0 0")
  * 1m - set matrix for 2nd plane (default "0 0 0 0 1 0 0 0 0")
  * 2m - set matrix for 3rd plane (default "0 0 0 0 1 0 0 0 0")
  * 3m - set matrix for 4th plane (default "0 0 0 0 1 0 0 0 0")
  * 0rdiv - set rdiv for 1st plane (from 0 to INT_MAX) (default 0)
  * 1rdiv - set rdiv for 2nd plane (from 0 to INT_MAX) (default 0)
  * 2rdiv - set rdiv for 3rd plane (from 0 to INT_MAX) (default 0)
  * 3rdiv - set rdiv for 4th plane (from 0 to INT_MAX) (default 0)
  * 0bias - set bias for 1st plane (from 0 to INT_MAX) (default 0)
  * 1bias - set bias for 2nd plane (from 0 to INT_MAX) (default 0)
  * 2bias - set bias for 3rd plane (from 0 to INT_MAX) (default 0)
  * 3bias - set bias for 4th plane (from 0 to INT_MAX) (default 0)
  * 0mode - set matrix mode for 1st plane (from 0 to 2) (default square)
    - square (0)  - square matrix
    - row (1)  - single row matrix
    - column (2)  - single column matrix

  * 1mode - set matrix mode for 2nd plane (from 0 to 2) (default square)
    - square (0)  - square matrix
    - row (1)  - single row matrix
    - column (2)  - single column matrix

  * 2mode - set matrix mode for 3rd plane (from 0 to 2) (default square)
    - square (0)  - square matrix
    - row (1)  - single row matrix
    - column (2)  - single column matrix

  * 3mode - set matrix mode for 4th plane (from 0 to 2) (default square)
    - square (0)  - square matrix
    - row (1)  - single row matrix
    - column (2)  - single column matrix

# `convolution_opencl`

```elixir
@spec convolution_opencl(FFix.Stream.t(),
  &quot;0m&quot;: String.t(),
  &quot;1m&quot;: String.t(),
  &quot;2m&quot;: String.t(),
  &quot;3m&quot;: String.t(),
  &quot;0rdiv&quot;: float(),
  &quot;1rdiv&quot;: float(),
  &quot;2rdiv&quot;: float(),
  &quot;3rdiv&quot;: float(),
  &quot;0bias&quot;: float(),
  &quot;1bias&quot;: float(),
  &quot;2bias&quot;: float(),
  &quot;3bias&quot;: float()
) :: FFix.Stream.t()
```

Apply convolution mask to input video

## Options

  * 0m - set matrix for 2nd plane (default "0 0 0 0 1 0 0 0 0")
  * 1m - set matrix for 2nd plane (default "0 0 0 0 1 0 0 0 0")
  * 2m - set matrix for 3rd plane (default "0 0 0 0 1 0 0 0 0")
  * 3m - set matrix for 4th plane (default "0 0 0 0 1 0 0 0 0")
  * 0rdiv - set rdiv for 1nd plane (from 0 to INT_MAX) (default 1)
  * 1rdiv - set rdiv for 2nd plane (from 0 to INT_MAX) (default 1)
  * 2rdiv - set rdiv for 3rd plane (from 0 to INT_MAX) (default 1)
  * 3rdiv - set rdiv for 4th plane (from 0 to INT_MAX) (default 1)
  * 0bias - set bias for 1st plane (from 0 to INT_MAX) (default 0)
  * 1bias - set bias for 2nd plane (from 0 to INT_MAX) (default 0)
  * 2bias - set bias for 3rd plane (from 0 to INT_MAX) (default 0)
  * 3bias - set bias for 4th plane (from 0 to INT_MAX) (default 0)

# `convolve`

```elixir
@spec convolve(FFix.Stream.t(), FFix.Stream.t(),
  enable: String.t(),
  shortest: boolean(),
  noise: float(),
  planes: integer(),
  eof_action: integer() | String.t() | atom(),
  repeatlast: boolean(),
  ts_sync_mode: integer() | String.t() | atom(),
  impulse: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Convolve first video stream with second video stream.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * shortest - force termination when the shortest input terminates (default false)
  * noise - set noise (from 0 to 1) (default 1e-07)
  * planes - set planes to convolve (from 0 to 15) (default 7)
  * eof_action - Action to take when encountering EOF from secondary input  (from 0 to 2) (default repeat)
    - repeat (0)  - Repeat the previous frame.
    - endall (1)  - End both streams.
    - pass (2)  - Pass through the main input.

  * repeatlast - extend last frame of secondary streams beyond EOF (default true)
  * ts_sync_mode - How strictly to sync streams based on secondary input timestamps (from 0 to 1) (default default)
    - default (0)  - Frame from secondary input with the nearest lower or equal timestamp to the primary input frame
    - nearest (1)  - Frame from secondary input with the absolute nearest timestamp to the primary input frame

  * impulse - when to process impulses (from 0 to 1) (default all)
    - first (0)  - process only first impulse, ignore rest
    - all (1)  - process all impulses

# `copy`

```elixir
@spec copy(
  FFix.Stream.t(),
  []
) :: FFix.Stream.t()
```

Copy the input video unchanged to the output.

## Options

# `corr`

```elixir
@spec corr(FFix.Stream.t(), FFix.Stream.t(),
  enable: String.t(),
  shortest: boolean(),
  eof_action: integer() | String.t() | atom(),
  repeatlast: boolean(),
  ts_sync_mode: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Calculate the correlation between two video streams.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * shortest - force termination when the shortest input terminates (default false)
  * eof_action - Action to take when encountering EOF from secondary input  (from 0 to 2) (default repeat)
    - repeat (0)  - Repeat the previous frame.
    - endall (1)  - End both streams.
    - pass (2)  - Pass through the main input.

  * repeatlast - extend last frame of secondary streams beyond EOF (default true)
  * ts_sync_mode - How strictly to sync streams based on secondary input timestamps (from 0 to 1) (default default)
    - default (0)  - Frame from secondary input with the nearest lower or equal timestamp to the primary input frame
    - nearest (1)  - Frame from secondary input with the absolute nearest timestamp to the primary input frame

# `cover_rect`

```elixir
@spec cover_rect(FFix.Stream.t(),
  mode: integer() | String.t() | atom(),
  cover: String.t()
) ::
  FFix.Stream.t()
```

Find and cover a user specified object.

## Options

  * mode - set removal mode (from 0 to 1) (default blur)
    - cover (0)  - cover area with bitmap
    - blur (1)  - blur area

  * cover - cover bitmap filename

# `crop`

```elixir
@spec crop(FFix.Stream.t(),
  x: String.t(),
  y: String.t(),
  h: String.t(),
  w: String.t(),
  exact: boolean(),
  out_w: String.t(),
  out_h: String.t(),
  keep_aspect: boolean()
) :: FFix.Stream.t()
```

Crop the input video.

## Options

  * x - set the x crop area expression (default "(in_w-out_w)/2")
  * y - set the y crop area expression (default "(in_h-out_h)/2")
  * h - set the height crop area expression (default "ih")
  * w - set the width crop area expression (default "iw")
  * exact - do exact cropping (default false)
  * out_w - set the width crop area expression (default "iw")
  * out_h - set the height crop area expression (default "ih")
  * keep_aspect - keep aspect ratio (default false)

# `cropdetect`

```elixir
@spec cropdetect(FFix.Stream.t(),
  high: float(),
  low: float(),
  reset: integer(),
  skip: integer(),
  round: integer(),
  mode: integer() | String.t() | atom(),
  enable: String.t(),
  limit: float(),
  reset_count: integer(),
  max_outliers: integer(),
  mv_threshold: integer()
) :: FFix.Stream.t()
```

Auto-detect crop size.

## Options

  * high - Set high threshold for edge detection (from 0 to 1) (default 0.0980392)
  * low - Set low threshold for edge detection (from 0 to 1) (default 0.0588235)
  * reset - Recalculate the crop area after this many frames (from 0 to INT_MAX) (default 0)
  * skip - Number of initial frames to skip (from 0 to INT_MAX) (default 2)
  * round - Value by which the width/height should be divisible (from 0 to INT_MAX) (default 16)
  * mode - set mode (from 0 to 1) (default black)
    - black (0)  - detect black pixels surrounding the video
    - mvedges (1)  - detect motion and edged surrounding the video

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * limit - Threshold below which the pixel is considered black (from 0 to 65535) (default 0.0941176)
  * reset_count - Recalculate the crop area after this many frames (from 0 to INT_MAX) (default 0)
  * max_outliers - Threshold count of outliers (from 0 to INT_MAX) (default 0)
  * mv_threshold - motion vector threshold when estimating video window size (from 0 to 100) (default 8)

# `cue`

```elixir
@spec cue(FFix.Stream.t(), buffer: term(), cue: integer(), preroll: term()) ::
  FFix.Stream.t()
```

Delay filtering to match a cue.

## Options

  * buffer - buffer duration in seconds (default 0)
  * cue - cue unix timestamp in microseconds (from 0 to I64_MAX) (default 0)
  * preroll - preroll duration in seconds (default 0)

# `curves`

```elixir
@spec curves(FFix.Stream.t(),
  all: String.t(),
  master: String.t(),
  m: String.t(),
  b: String.t(),
  enable: String.t(),
  blue: String.t(),
  green: String.t(),
  red: String.t(),
  r: String.t(),
  preset: integer() | String.t() | atom(),
  g: String.t(),
  interp: integer() | String.t() | atom(),
  psfile: String.t(),
  plot: String.t()
) :: FFix.Stream.t()
```

Adjust components curves.

## Options

  * all - set points coordinates for all components
  * master - set master points coordinates
  * m - set master points coordinates
  * b - set blue points coordinates
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * blue - set blue points coordinates
  * green - set green points coordinates
  * red - set red points coordinates
  * r - set red points coordinates
  * preset - select a color curves preset (from 0 to 10) (default none)
    - none (0) 
    - color_negative (1) 
    - cross_process (2) 
    - darker (3) 
    - increase_contrast 4
    - lighter (5) 
    - linear_contrast 6
    - medium_contrast 7
    - negative (8) 
    - strong_contrast 9
    - vintage (10) 

  * g - set green points coordinates
  * interp - specify the kind of interpolation (from 0 to 1) (default natural)
    - natural (0)  - natural cubic spline
    - pchip (1)  - monotonically cubic interpolation

  * psfile - set Photoshop curves file name
  * plot - save Gnuplot script of the curves in specified file

# `datascope`

```elixir
@spec datascope(FFix.Stream.t(),
  size: term(),
  x: integer(),
  y: integer(),
  mode: integer() | String.t() | atom(),
  format: integer() | String.t() | atom(),
  s: term(),
  components: integer(),
  opacity: float(),
  axis: boolean()
) :: FFix.Stream.t()
```

Video data analysis.

## Options

  * size - set output size (default "hd720")
  * x - set x offset (from 0 to INT_MAX) (default 0)
  * y - set y offset (from 0 to INT_MAX) (default 0)
  * mode - set scope mode (from 0 to 2) (default mono)
    - mono (0) 
    - color (1) 
    - color2 (2) 

  * format - set display number format (from 0 to 1) (default hex)
    - hex (0) 
    - dec (1) 

  * s - set output size (default "hd720")
  * components - set components to display (from 1 to 15) (default 15)
  * opacity - set background opacity (from 0 to 1) (default 0.75)
  * axis - draw column/row numbers (default false)

# `dblur`

```elixir
@spec dblur(FFix.Stream.t(),
  enable: String.t(),
  planes: integer(),
  angle: float(),
  radius: float()
) ::
  FFix.Stream.t()
```

Apply Directional Blur filter.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * planes - set planes to filter (from 0 to 15) (default 15)
  * angle - set angle (from 0 to 360) (default 45)
  * radius - set radius (from 0 to 8192) (default 5)

# `dctdnoiz`

```elixir
@spec dctdnoiz(FFix.Stream.t(),
  expr: String.t(),
  s: float(),
  enable: String.t(),
  n: integer(),
  overlap: integer(),
  e: String.t(),
  sigma: float()
) :: FFix.Stream.t()
```

Denoise frames using 2D DCT.

## Options

  * expr - set coefficient factor expression
  * s - set noise sigma constant (from 0 to 999) (default 0)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * n - set the block size, expressed in bits (from 3 to 4) (default 3)
  * overlap - set number of block overlapping pixels (from -1 to 15) (default -1)
  * e - set coefficient factor expression
  * sigma - set noise sigma constant (from 0 to 999) (default 0)

# `deband`

```elixir
@spec deband(FFix.Stream.t(),
  c: boolean(),
  range: integer(),
  b: boolean(),
  enable: String.t(),
  r: integer(),
  d: float(),
  direction: float(),
  &quot;1thr&quot;: float(),
  &quot;2thr&quot;: float(),
  &quot;3thr&quot;: float(),
  &quot;4thr&quot;: float(),
  blur: boolean(),
  coupling: boolean()
) :: FFix.Stream.t()
```

Debands video.

## Options

  * c - set plane coupling (default false)
  * range - set range (from INT_MIN to INT_MAX) (default 16)
  * b - set blur (default true)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * r - set range (from INT_MIN to INT_MAX) (default 16)
  * d - set direction (from -6.28319 to 6.28319) (default 6.28319)
  * direction - set direction (from -6.28319 to 6.28319) (default 6.28319)
  * 1thr - set 1st plane threshold (from 3e-05 to 0.5) (default 0.02)
  * 2thr - set 2nd plane threshold (from 3e-05 to 0.5) (default 0.02)
  * 3thr - set 3rd plane threshold (from 3e-05 to 0.5) (default 0.02)
  * 4thr - set 4th plane threshold (from 3e-05 to 0.5) (default 0.02)
  * blur - set blur (default true)
  * coupling - set plane coupling (default false)

# `deblock`

```elixir
@spec deblock(FFix.Stream.t(),
  block: integer(),
  filter: integer() | String.t() | atom(),
  enable: String.t(),
  planes: integer(),
  alpha: float(),
  gamma: float(),
  delta: float(),
  beta: float()
) :: FFix.Stream.t()
```

Deblock video.

## Options

  * block - set size of block (from 4 to 512) (default 8)
  * filter - set type of filter (from 0 to 1) (default strong)
    - weak (0) 
    - strong (1) 

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * planes - set planes to filter (from 0 to 15) (default 15)
  * alpha - set 1st detection threshold (from 0 to 1) (default 0.098)
  * gamma - set 3rd detection threshold (from 0 to 1) (default 0.05)
  * delta - set 4th detection threshold (from 0 to 1) (default 0.05)
  * beta - set 2nd detection threshold (from 0 to 1) (default 0.05)

# `deconvolve`

```elixir
@spec deconvolve(FFix.Stream.t(), FFix.Stream.t(),
  enable: String.t(),
  shortest: boolean(),
  noise: float(),
  planes: integer(),
  eof_action: integer() | String.t() | atom(),
  repeatlast: boolean(),
  ts_sync_mode: integer() | String.t() | atom(),
  impulse: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Deconvolve first video stream with second video stream.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * shortest - force termination when the shortest input terminates (default false)
  * noise - set noise (from 0 to 1) (default 1e-07)
  * planes - set planes to deconvolve (from 0 to 15) (default 7)
  * eof_action - Action to take when encountering EOF from secondary input  (from 0 to 2) (default repeat)
    - repeat (0)  - Repeat the previous frame.
    - endall (1)  - End both streams.
    - pass (2)  - Pass through the main input.

  * repeatlast - extend last frame of secondary streams beyond EOF (default true)
  * ts_sync_mode - How strictly to sync streams based on secondary input timestamps (from 0 to 1) (default default)
    - default (0)  - Frame from secondary input with the nearest lower or equal timestamp to the primary input frame
    - nearest (1)  - Frame from secondary input with the absolute nearest timestamp to the primary input frame

  * impulse - when to process impulses (from 0 to 1) (default all)
    - first (0)  - process only first impulse, ignore rest
    - all (1)  - process all impulses

# `dedot`

```elixir
@spec dedot(FFix.Stream.t(),
  tl: float(),
  lt: float(),
  m: integer() | String.t() | atom() | [String.t() | atom()],
  enable: String.t(),
  tc: float(),
  ct: float()
) :: FFix.Stream.t()
```

Reduce cross-luminance and cross-color.

## Options

  * tl - set tolerance for temporal luma (from 0 to 1) (default 0.079)
  * lt - set spatial luma threshold (from 0 to 1) (default 0.079)
  * m - set filtering mode (default dotcrawl+rainbows)
    - dotcrawl
    - rainbows

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * tc - set tolerance for chroma temporal variation (from 0 to 1) (default 0.058)
  * ct - set temporal chroma threshold (from 0 to 1) (default 0.019)

# `deflate`

```elixir
@spec deflate(FFix.Stream.t(),
  enable: String.t(),
  threshold0: integer(),
  threshold1: integer(),
  threshold2: integer(),
  threshold3: integer()
) :: FFix.Stream.t()
```

Apply deflate effect.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * threshold0 - set threshold for 1st plane (from 0 to 65535) (default 65535)
  * threshold1 - set threshold for 2nd plane (from 0 to 65535) (default 65535)
  * threshold2 - set threshold for 3rd plane (from 0 to 65535) (default 65535)
  * threshold3 - set threshold for 4th plane (from 0 to 65535) (default 65535)

# `deflicker`

```elixir
@spec deflicker(FFix.Stream.t(),
  size: integer(),
  mode: integer() | String.t() | atom(),
  m: integer() | String.t() | atom(),
  s: integer(),
  bypass: boolean()
) :: FFix.Stream.t()
```

Remove temporal frame luminance variations.

## Options

  * size - set how many frames to use (from 2 to 129) (default 5)
  * mode - set how to smooth luminance (from 0 to 6) (default am)
    - am (0)  - arithmetic mean
    - gm (1)  - geometric mean
    - hm (2)  - harmonic mean
    - qm (3)  - quadratic mean
    - cm (4)  - cubic mean
    - pm (5)  - power mean
    - median (6)  - median

  * m - set how to smooth luminance (from 0 to 6) (default am)
    - am (0)  - arithmetic mean
    - gm (1)  - geometric mean
    - hm (2)  - harmonic mean
    - qm (3)  - quadratic mean
    - cm (4)  - cubic mean
    - pm (5)  - power mean
    - median (6)  - median

  * s - set how many frames to use (from 2 to 129) (default 5)
  * bypass - leave frames unchanged (default false)

# `deinterlace_qsv`

```elixir
@spec deinterlace_qsv(
  FFix.Stream.t(),
  [{:mode, integer() | String.t() | atom()}]
) :: FFix.Stream.t()
```

Quick Sync Video "deinterlacing"

## Options

  * mode - set deinterlace mode (from 1 to 2) (default advanced)
    - bob (1)  - bob algorithm
    - advanced (2)  - Motion adaptive algorithm

# `deinterlace_vaapi`

```elixir
@spec deinterlace_vaapi(FFix.Stream.t(),
  auto: integer(),
  mode: integer() | String.t() | atom(),
  rate: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Deinterlacing of VAAPI surfaces

## Options

  * auto - Only deinterlace fields, passing frames through unchanged (from 0 to 1) (default 0)
  * mode - Deinterlacing mode (from 0 to 4) (default default)
    - default (0)  - Use the highest-numbered (and therefore possibly most advanced) deinterlacing algorithm
    - bob (1)  - Use the bob deinterlacing algorithm
    - weave (2)  - Use the weave deinterlacing algorithm
    - motion_adaptive 3 - Use the motion adaptive deinterlacing algorithm
    - motion_compensated 4 - Use the motion compensated deinterlacing algorithm

  * rate - Generate output at frame rate or field rate (from 1 to 2) (default frame)
    - frame (1)  - Output at frame rate (one frame of output for each field-pair)
    - field (2)  - Output at field rate (one frame of output for each field)

# `dejudder`

```elixir
@spec dejudder(
  FFix.Stream.t(),
  [{:cycle, integer()}]
) :: FFix.Stream.t()
```

Remove judder produced by pullup.

## Options

  * cycle - set the length of the cycle to use for dejuddering (from 2 to 240) (default 4)

# `delogo`

```elixir
@spec delogo(FFix.Stream.t(),
  x: String.t(),
  y: String.t(),
  enable: String.t(),
  h: String.t(),
  w: String.t(),
  show: boolean()
) :: FFix.Stream.t()
```

Remove logo from input video.

## Options

  * x - set logo x position (default "-1")
  * y - set logo y position (default "-1")
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * h - set logo height (default "-1")
  * w - set logo width (default "-1")
  * show - show delogo area (default false)

# `denoise_vaapi`

```elixir
@spec denoise_vaapi(
  FFix.Stream.t(),
  [{:denoise, integer()}]
) :: FFix.Stream.t()
```

VAAPI VPP for de-noise

## Options

  * denoise - denoise level (from 0 to 64) (default 0)

# `deshake`

```elixir
@spec deshake(FFix.Stream.t(),
  x: integer(),
  y: integer(),
  filename: String.t(),
  search: integer() | String.t() | atom(),
  h: integer(),
  w: integer(),
  edge: integer() | String.t() | atom(),
  blocksize: integer(),
  contrast: integer(),
  rx: integer(),
  ry: integer(),
  opencl: boolean()
) :: FFix.Stream.t()
```

Stabilize shaky video.

## Options

  * x - set x for the rectangular search area (from -1 to INT_MAX) (default -1)
  * y - set y for the rectangular search area (from -1 to INT_MAX) (default -1)
  * filename - set motion search detailed log file name
  * search - set search strategy (from 0 to 1) (default exhaustive)
    - exhaustive (0)  - exhaustive search
    - less (1)  - less exhaustive search

  * h - set height for the rectangular search area (from -1 to INT_MAX) (default -1)
  * w - set width for the rectangular search area (from -1 to INT_MAX) (default -1)
  * edge - set edge mode (from 0 to 3) (default mirror)
    - blank (0)  - fill zeroes at blank locations
    - original (1)  - original image at blank locations
    - clamp (2)  - extruded edge value at blank locations
    - mirror (3)  - mirrored edge at blank locations

  * blocksize - set motion search blocksize (from 4 to 128) (default 8)
  * contrast - set contrast threshold for blocks (from 1 to 255) (default 125)
  * rx - set x for the rectangular search area (from 0 to 64) (default 16)
  * ry - set y for the rectangular search area (from 0 to 64) (default 16)
  * opencl - ignored (default false)

# `deshake_opencl`

```elixir
@spec deshake_opencl(FFix.Stream.t(),
  debug: boolean(),
  tripod: boolean(),
  adaptive_crop: boolean(),
  refine_features: boolean(),
  smooth_strength: float(),
  smooth_window_multiplier: float()
) :: FFix.Stream.t()
```

Feature-point based video stabilization filter

## Options

  * debug - turn on additional debugging information (default false)
  * tripod - simulates a tripod by preventing any camera movement whatsoever from the original frame (default false)
  * adaptive_crop - attempt to subtly crop borders to reduce mirrored content (default true)
  * refine_features - refine feature point locations at a sub-pixel level (default true)
  * smooth_strength - smoothing strength (0 attempts to adaptively determine optimal strength) (from 0 to 1) (default 0)
  * smooth_window_multiplier - multiplier for number of frames to buffer for motion data (from 0.1 to 10) (default 2)

# `despill`

```elixir
@spec despill(FFix.Stream.t(),
  type: integer() | String.t() | atom(),
  expand: float(),
  enable: String.t(),
  blue: float(),
  green: float(),
  red: float(),
  mix: float(),
  alpha: boolean(),
  brightness: float()
) :: FFix.Stream.t()
```

Despill video.

## Options

  * type - set the screen type (from 0 to 1) (default green)
    - green (0)  - greenscreen
    - blue (1)  - bluescreen

  * expand - set the spillmap expand (from 0 to 1) (default 0)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * blue - set blue scale (from -100 to 100) (default 0)
  * green - set green scale (from -100 to 100) (default -1)
  * red - set red scale (from -100 to 100) (default 0)
  * mix - set the spillmap mix (from 0 to 1) (default 0.5)
  * alpha - change alpha component (default false)
  * brightness - set brightness (from -10 to 10) (default 0)

# `detelecine`

```elixir
@spec detelecine(FFix.Stream.t(),
  pattern: String.t(),
  start_frame: integer(),
  first_field: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Apply an inverse telecine pattern.

## Options

  * pattern - pattern that describe for how many fields a frame is to be displayed (default "23")
  * start_frame - position of first frame with respect to the pattern if stream is cut (from 0 to 13) (default 0)
  * first_field - select first field (from 0 to 1) (default top)
    - top (0)  - select top field first
    - t (0)  - select top field first
    - bottom (1)  - select bottom field first
    - b (1)  - select bottom field first

# `dilation`

```elixir
@spec dilation(FFix.Stream.t(),
  enable: String.t(),
  threshold0: integer(),
  threshold1: integer(),
  threshold2: integer(),
  threshold3: integer(),
  coordinates: integer()
) :: FFix.Stream.t()
```

Apply dilation effect.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * threshold0 - set threshold for 1st plane (from 0 to 65535) (default 65535)
  * threshold1 - set threshold for 2nd plane (from 0 to 65535) (default 65535)
  * threshold2 - set threshold for 3rd plane (from 0 to 65535) (default 65535)
  * threshold3 - set threshold for 4th plane (from 0 to 65535) (default 65535)
  * coordinates - set coordinates (from 0 to 255) (default 255)

# `dilation_opencl`

```elixir
@spec dilation_opencl(FFix.Stream.t(),
  threshold0: float(),
  threshold1: float(),
  threshold2: float(),
  threshold3: float(),
  coordinates: integer()
) :: FFix.Stream.t()
```

Apply dilation effect

## Options

  * threshold0 - set threshold for 1st plane (from 0 to 65535) (default 65535)
  * threshold1 - set threshold for 2nd plane (from 0 to 65535) (default 65535)
  * threshold2 - set threshold for 3rd plane (from 0 to 65535) (default 65535)
  * threshold3 - set threshold for 4th plane (from 0 to 65535) (default 65535)
  * coordinates - set coordinates (from 0 to 255) (default 255)

# `displace`

```elixir
@spec displace(FFix.Stream.t(), FFix.Stream.t(), FFix.Stream.t(),
  enable: String.t(),
  edge: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Displace pixels.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * edge - set edge mode (from 0 to 3) (default smear)
    - blank (0) 
    - smear (1) 
    - wrap (2) 
    - mirror (3) 

# `doubleweave`

```elixir
@spec doubleweave(
  FFix.Stream.t(),
  [{:first_field, integer() | String.t() | atom()}]
) :: FFix.Stream.t()
```

Weave input video fields into double number of frames.

## Options

  * first_field - set first field (from 0 to 1) (default top)
    - top (0)  - set top field first
    - t (0)  - set top field first
    - bottom (1)  - set bottom field first
    - b (1)  - set bottom field first

# `drawbox`

```elixir
@spec drawbox(FFix.Stream.t(),
  x: String.t(),
  y: String.t(),
  c: String.t(),
  replace: boolean(),
  enable: String.t(),
  h: String.t(),
  width: String.t(),
  w: String.t(),
  color: String.t(),
  t: String.t(),
  height: String.t(),
  thickness: String.t(),
  box_source: String.t()
) :: FFix.Stream.t()
```

Draw a colored box on the input video.

## Options

  * x - set horizontal position of the left box edge (default "0")
  * y - set vertical position of the top box edge (default "0")
  * c - set color of the box (default "black")
  * replace - replace color & alpha (default false)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * h - set height of the box (default "0")
  * width - set width of the box (default "0")
  * w - set width of the box (default "0")
  * color - set color of the box (default "black")
  * t - set the box thickness (default "3")
  * height - set height of the box (default "0")
  * thickness - set the box thickness (default "3")
  * box_source - use datas from bounding box in side data

# `drawbox_vaapi`

```elixir
@spec drawbox_vaapi(FFix.Stream.t(),
  x: String.t(),
  y: String.t(),
  c: term(),
  replace: boolean(),
  h: String.t(),
  width: String.t(),
  w: String.t(),
  color: term(),
  t: String.t(),
  height: String.t(),
  thickness: String.t()
) :: FFix.Stream.t()
```

Draw a colored box on the input video.

## Options

  * x - set horizontal position of the left box edge (default "0")
  * y - set vertical position of the top box edge (default "0")
  * c - set color of the box (default "black")
  * replace - replace color (default false)
  * h - set height of the box (default "0")
  * width - set width of the box (default "0")
  * w - set width of the box (default "0")
  * color - set color of the box (default "black")
  * t - set the box thickness (default "3")
  * height - set height of the box (default "0")
  * thickness - set the box thickness (default "3")

# `drawgraph`

```elixir
@spec drawgraph(FFix.Stream.t(),
  max: float(),
  min: float(),
  size: term(),
  mode: integer() | String.t() | atom(),
  s: term(),
  r: term(),
  slide: integer() | String.t() | atom(),
  rate: term(),
  m1: String.t(),
  fg1: String.t(),
  m2: String.t(),
  fg2: String.t(),
  m3: String.t(),
  fg3: String.t(),
  m4: String.t(),
  fg4: String.t(),
  bg: term()
) :: FFix.Stream.t()
```

Draw a graph using input video metadata.

## Options

  * max - set maximal value (from INT_MIN to INT_MAX) (default 1)
  * min - set minimal value (from INT_MIN to INT_MAX) (default -1)
  * size - set graph size (default "900x256")
  * mode - set graph mode (from 0 to 2) (default line)
    - bar (0)  - draw bars
    - dot (1)  - draw dots
    - line (2)  - draw lines

  * s - set graph size (default "900x256")
  * r - set video rate (default "25")
  * slide - set slide mode (from 0 to 4) (default frame)
    - frame (0)  - draw new frames
    - replace (1)  - replace old columns with new
    - scroll (2)  - scroll from right to left
    - rscroll (3)  - scroll from left to right
    - picture (4)  - display graph in single frame

  * rate - set video rate (default "25")
  * m1 - set 1st metadata key (default "")
  * fg1 - set 1st foreground color expression (default "0xffff0000")
  * m2 - set 2nd metadata key (default "")
  * fg2 - set 2nd foreground color expression (default "0xff00ff00")
  * m3 - set 3rd metadata key (default "")
  * fg3 - set 3rd foreground color expression (default "0xffff00ff")
  * m4 - set 4th metadata key (default "")
  * fg4 - set 4th foreground color expression (default "0xffffff00")
  * bg - set background color (default "white")

# `drawgrid`

```elixir
@spec drawgrid(FFix.Stream.t(),
  x: String.t(),
  y: String.t(),
  c: String.t(),
  replace: boolean(),
  enable: String.t(),
  h: String.t(),
  width: String.t(),
  w: String.t(),
  color: String.t(),
  t: String.t(),
  height: String.t(),
  thickness: String.t()
) :: FFix.Stream.t()
```

Draw a colored grid on the input video.

## Options

  * x - set horizontal offset (default "0")
  * y - set vertical offset (default "0")
  * c - set color of the grid (default "black")
  * replace - replace color & alpha (default false)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * h - set height of grid cell (default "0")
  * width - set width of grid cell (default "0")
  * w - set width of grid cell (default "0")
  * color - set color of the grid (default "black")
  * t - set grid line thickness (default "1")
  * height - set height of grid cell (default "0")
  * thickness - set grid line thickness (default "1")

# `drawtext`

```elixir
@spec drawtext(FFix.Stream.t(),
  expansion: integer() | String.t() | atom(),
  enable: String.t(),
  textfile: String.t(),
  fontfile: String.t(),
  shadowy: integer(),
  fontcolor: term(),
  fix_bounds: boolean(),
  alpha: String.t(),
  boxborderw: String.t(),
  shadowx: integer(),
  borderw: integer(),
  y_align: integer() | String.t() | atom(),
  font: String.t(),
  text_align: integer() | String.t() | atom() | [String.t() | atom()],
  shadowcolor: term(),
  boxcolor: term(),
  start_number: integer(),
  r: term(),
  box: boolean(),
  text: String.t(),
  boxh: integer(),
  boxw: integer(),
  timecode_rate: term(),
  bordercolor: term(),
  ft_load_flags: integer() | String.t() | atom() | [String.t() | atom()],
  tc24hmax: boolean(),
  timecode: String.t(),
  line_spacing: integer(),
  fontsize: String.t(),
  text_shaping: boolean(),
  rate: term(),
  fontcolor_expr: String.t(),
  x: String.t(),
  tabsize: integer(),
  reload: integer(),
  y: String.t(),
  text_source: String.t(),
  basetime: integer()
) :: FFix.Stream.t()
```

Draw text on top of video frames using libfreetype library.

## Options

  * expansion - set the expansion mode (from 0 to 2) (default normal)
    - none (0)  - set no expansion
    - normal (1)  - set normal expansion
    - strftime (2)  - set strftime expansion (deprecated)

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * textfile - set text file
  * fontfile - set font file
  * shadowy - set shadow y offset (from INT_MIN to INT_MAX) (default 0)
  * fontcolor - set foreground color (default "black")
  * fix_bounds - check and fix text coords to avoid clipping (default false)
  * alpha - apply alpha while rendering (default "1")
  * boxborderw - set box borders width (default "0")
  * shadowx - set shadow x offset (from INT_MIN to INT_MAX) (default 0)
  * borderw - set border width (from INT_MIN to INT_MAX) (default 0)
  * y_align - set the y alignment (from 0 to 2) (default text)
    - text (0)  - y is referred to the top of the first text line
    - baseline (1)  - y is referred to the baseline of the first line
    - font (2)  - y is referred to the font defined line metrics

  * font - Font name (default "Sans")
  * text_align - set text alignment (default 0)
    - left
    - L
    - right
    - R
    - center
    - C
    - top
    - T
    - bottom
    - B
    - middle
    - M

  * shadowcolor - set shadow color (default "black")
  * boxcolor - set box color (default "white")
  * start_number - start frame number for n/frame_num variable (from 0 to INT_MAX) (default 0)
  * r - set rate (timecode only) (from 0 to INT_MAX) (default 0/1)
  * box - set box (default false)
  * text - set text
  * boxh - set box height (from 0 to INT_MAX) (default 0)
  * boxw - set box width (from 0 to INT_MAX) (default 0)
  * timecode_rate - set rate (timecode only) (from 0 to INT_MAX) (default 0/1)
  * bordercolor - set border color (default "black")
  * ft_load_flags - set font loading flags for libfreetype (default 0)
    - default
    - no_scale
    - no_hinting
    - render
    - no_bitmap
    - vertical_layout
    - force_autohint
    - crop_bitmap
    - pedantic
    - ignore_global_advance_width
    - no_recurse
    - ignore_transform
    - monochrome
    - linear_design
    - no_autohint

  * tc24hmax - set 24 hours max (timecode only) (default false)
  * timecode - set initial timecode
  * line_spacing - set line spacing in pixels (from INT_MIN to INT_MAX) (default 0)
  * fontsize - set font size
  * text_shaping - attempt to shape text before drawing (default true)
  * rate - set rate (timecode only) (from 0 to INT_MAX) (default 0/1)
  * fontcolor_expr - set foreground color expression (default "")
  * x - set x expression (default "0")
  * tabsize - set tab size (from 0 to INT_MAX) (default 4)
  * reload - reload text file at specified frame interval (from 0 to INT_MAX) (default 0)
  * y - set y expression (default "0")
  * text_source - the source of text
  * basetime - set base time (from I64_MIN to I64_MAX) (default I64_MIN)

# `edgedetect`

```elixir
@spec edgedetect(FFix.Stream.t(),
  high: float(),
  low: float(),
  mode: integer() | String.t() | atom(),
  enable: String.t(),
  planes: integer() | String.t() | atom() | [String.t() | atom()]
) :: FFix.Stream.t()
```

Detect and draw edge.

## Options

  * high - set high threshold (from 0 to 1) (default 0.196078)
  * low - set low threshold (from 0 to 1) (default 0.0784314)
  * mode - set mode (from 0 to 2) (default wires)
    - wires (0)  - white/gray wires on black
    - colormix (1)  - mix colors
    - canny (2)  - detect edges on planes

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * planes - set planes to filter (default y+u+v+r+g+b)
    - y - filter luma plane
    - u - filter u plane
    - v - filter v plane
    - r - filter red plane
    - g - filter green plane
    - b - filter blue plane

# `elbg`

```elixir
@spec elbg(FFix.Stream.t(),
  s: integer(),
  seed: integer(),
  l: integer(),
  n: integer(),
  codebook_length: integer(),
  nb_steps: integer(),
  pal8: boolean(),
  use_alpha: boolean()
) :: FFix.Stream.t()
```

Apply posterize effect, using the ELBG algorithm.

## Options

  * s - set the random seed (from -1 to UINT32_MAX) (default -1)
  * seed - set the random seed (from -1 to UINT32_MAX) (default -1)
  * l - set codebook length (from 1 to INT_MAX) (default 256)
  * n - set max number of steps used to compute the mapping (from 1 to INT_MAX) (default 1)
  * codebook_length - set codebook length (from 1 to INT_MAX) (default 256)
  * nb_steps - set max number of steps used to compute the mapping (from 1 to INT_MAX) (default 1)
  * pal8 - set the pal8 output (default false)
  * use_alpha - use alpha channel for mapping (default false)

# `entropy`

```elixir
@spec entropy(FFix.Stream.t(),
  mode: integer() | String.t() | atom(),
  enable: String.t()
) ::
  FFix.Stream.t()
```

Measure video frames entropy.

## Options

  * mode - set kind of histogram entropy measurement (from 0 to 1) (default normal)
    - normal (0) 
    - diff (1) 

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero

# `epx`

```elixir
@spec epx(
  FFix.Stream.t(),
  [{:n, integer()}]
) :: FFix.Stream.t()
```

Scale the input using EPX algorithm.

## Options

  * n - set scale factor (from 2 to 3) (default 3)

# `eq`

```elixir
@spec eq(FFix.Stream.t(),
  eval: integer() | String.t() | atom(),
  enable: String.t(),
  saturation: String.t(),
  contrast: String.t(),
  gamma: String.t(),
  brightness: String.t(),
  gamma_r: String.t(),
  gamma_g: String.t(),
  gamma_b: String.t(),
  gamma_weight: String.t()
) :: FFix.Stream.t()
```

Adjust brightness, contrast, gamma, and saturation.

## Options

  * eval - specify when to evaluate expressions (from 0 to 1) (default init)
    - init (0)  - eval expressions once during initialization
    - frame (1)  - eval expressions per-frame

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * saturation - set the saturation adjustment (default "1.0")
  * contrast - set the contrast adjustment, negative values give a negative image (default "1.0")
  * gamma - set the initial gamma value (default "1.0")
  * brightness - set the brightness adjustment (default "0.0")
  * gamma_r - gamma value for red (default "1.0")
  * gamma_g - gamma value for green (default "1.0")
  * gamma_b - gamma value for blue (default "1.0")
  * gamma_weight - set the gamma weight which reduces the effect of gamma on bright areas (default "1.0")

# `erosion`

```elixir
@spec erosion(FFix.Stream.t(),
  enable: String.t(),
  threshold0: integer(),
  threshold1: integer(),
  threshold2: integer(),
  threshold3: integer(),
  coordinates: integer()
) :: FFix.Stream.t()
```

Apply erosion effect.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * threshold0 - set threshold for 1st plane (from 0 to 65535) (default 65535)
  * threshold1 - set threshold for 2nd plane (from 0 to 65535) (default 65535)
  * threshold2 - set threshold for 3rd plane (from 0 to 65535) (default 65535)
  * threshold3 - set threshold for 4th plane (from 0 to 65535) (default 65535)
  * coordinates - set coordinates (from 0 to 255) (default 255)

# `erosion_opencl`

```elixir
@spec erosion_opencl(FFix.Stream.t(),
  threshold0: float(),
  threshold1: float(),
  threshold2: float(),
  threshold3: float(),
  coordinates: integer()
) :: FFix.Stream.t()
```

Apply erosion effect

## Options

  * threshold0 - set threshold for 1st plane (from 0 to 65535) (default 65535)
  * threshold1 - set threshold for 2nd plane (from 0 to 65535) (default 65535)
  * threshold2 - set threshold for 3rd plane (from 0 to 65535) (default 65535)
  * threshold3 - set threshold for 4th plane (from 0 to 65535) (default 65535)
  * coordinates - set coordinates (from 0 to 255) (default 255)

# `estdif`

```elixir
@spec estdif(FFix.Stream.t(),
  mode: integer() | String.t() | atom(),
  enable: String.t(),
  parity: integer() | String.t() | atom(),
  deint: integer() | String.t() | atom(),
  interp: integer() | String.t() | atom(),
  rslope: integer(),
  redge: integer(),
  ecost: integer(),
  mcost: integer(),
  dcost: integer()
) :: FFix.Stream.t()
```

Apply Edge Slope Tracing deinterlace.

## Options

  * mode - specify the mode (from 0 to 1) (default field)
    - frame (0)  - send one frame for each frame
    - field (1)  - send one frame for each field

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * parity - specify the assumed picture field parity (from -1 to 1) (default auto)
    - tff (0)  - assume top field first
    - bff (1)  - assume bottom field first
    - auto (-1)  - auto detect parity

  * deint - specify which frames to deinterlace (from 0 to 1) (default all)
    - all (0)  - deinterlace all frames
    - interlaced (1)  - only deinterlace frames marked as interlaced

  * interp - specify the type of interpolation (from 0 to 2) (default 4p)
    - 2p (0)  - two-point interpolation
    - 4p (1)  - four-point interpolation
    - 6p (2)  - six-point interpolation

  * rslope - specify the search radius for edge slope tracing (from 1 to 15) (default 1)
  * redge - specify the search radius for best edge matching (from 0 to 15) (default 2)
  * ecost - specify the edge cost for edge matching (from 0 to 50) (default 2)
  * mcost - specify the middle cost for edge matching (from 0 to 50) (default 1)
  * dcost - specify the distance cost for edge matching (from 0 to 50) (default 1)

# `exposure`

```elixir
@spec exposure(FFix.Stream.t(), enable: String.t(), black: float(), exposure: float()) ::
  FFix.Stream.t()
```

Adjust exposure of the video stream.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * black - set the black level correction (from -1 to 1) (default 0)
  * exposure - set the exposure correction (from -3 to 3) (default 0)

# `fade`

```elixir
@spec fade(FFix.Stream.t(),
  type: integer() | String.t() | atom(),
  st: term(),
  c: term(),
  s: integer(),
  enable: String.t(),
  d: term(),
  n: integer(),
  color: term(),
  t: integer() | String.t() | atom(),
  duration: term(),
  alpha: boolean(),
  start_frame: integer(),
  start_time: term(),
  nb_frames: integer()
) :: FFix.Stream.t()
```

Fade in/out input video.

## Options

  * type - set the fade direction (from 0 to 1) (default in)
    - in (0)  - fade-in
    - out (1)  - fade-out

  * st - Number of seconds of the beginning of the effect. (default 0)
  * c - set color (default "black")
  * s - Number of the first frame to which to apply the effect. (from 0 to INT_MAX) (default 0)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * d - Duration of the effect in seconds. (default 0)
  * n - Number of frames to which the effect should be applied. (from 1 to INT_MAX) (default 25)
  * color - set color (default "black")
  * t - set the fade direction (from 0 to 1) (default in)
    - in (0)  - fade-in
    - out (1)  - fade-out

  * duration - Duration of the effect in seconds. (default 0)
  * alpha - fade alpha if it is available on the input (default false)
  * start_frame - Number of the first frame to which to apply the effect. (from 0 to INT_MAX) (default 0)
  * start_time - Number of seconds of the beginning of the effect. (default 0)
  * nb_frames - Number of frames to which the effect should be applied. (from 1 to INT_MAX) (default 25)

# `feedback`

```elixir
@spec feedback(FFix.Stream.t(), FFix.Stream.t(),
  x: integer(),
  y: integer(),
  enable: String.t(),
  h: integer(),
  w: integer()
) :: {FFix.Stream.t(), FFix.Stream.t()}
```

Apply feedback video filter.

## Options

  * x - set top left crop position (from 0 to INT_MAX) (default 0)
  * y - set top left crop position (from 0 to INT_MAX) (default 0)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * h - set crop size (from 0 to INT_MAX) (default 0)
  * w - set crop size (from 0 to INT_MAX) (default 0)

# `fftdnoiz`

```elixir
@spec fftdnoiz(FFix.Stream.t(),
  block: integer(),
  next: integer(),
  prev: integer(),
  enable: String.t(),
  amount: float(),
  overlap: float(),
  planes: integer(),
  sigma: float(),
  window: integer() | String.t() | atom(),
  method: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Denoise frames using 3D FFT.

## Options

  * block - set block size (from 8 to 256) (default 32)
  * next - set number of next frames for temporal denoising (from 0 to 1) (default 0)
  * prev - set number of previous frames for temporal denoising (from 0 to 1) (default 0)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * amount - set amount of denoising (from 0.01 to 1) (default 1)
  * overlap - set block overlap (from 0.2 to 0.8) (default 0.5)
  * planes - set planes to filter (from 0 to 15) (default 7)
  * sigma - set denoise strength (from 0 to 100) (default 1)
  * window - set window function (from 0 to 20) (default hann)
    - rect (0)  - Rectangular
    - bartlett (4)  - Bartlett
    - hann (1)  - Hann
    - hanning (1)  - Hanning
    - hamming (2)  - Hamming
    - blackman (3)  - Blackman
    - welch (5)  - Welch
    - flattop (6)  - Flat-top
    - bharris (7)  - Blackman-Harris
    - bnuttall (8)  - Blackman-Nuttall
    - bhann (11)  - Bartlett-Hann
    - sine (9)  - Sine
    - nuttall (10)  - Nuttall
    - lanczos (12)  - Lanczos
    - gauss (13)  - Gauss
    - tukey (14)  - Tukey
    - dolph (15)  - Dolph-Chebyshev
    - cauchy (16)  - Cauchy
    - parzen (17)  - Parzen
    - poisson (18)  - Poisson
    - bohman (19)  - Bohman
    - kaiser (20)  - Kaiser

  * method - set method of denoising (from 0 to 1) (default wiener)
    - wiener (0)  - wiener method
    - hard (1)  - hard thresholding

# `fftfilt`

```elixir
@spec fftfilt(FFix.Stream.t(),
  eval: integer() | String.t() | atom(),
  enable: String.t(),
  dc_Y: integer(),
  dc_U: integer(),
  dc_V: integer(),
  weight_Y: String.t(),
  weight_U: String.t(),
  weight_V: String.t()
) :: FFix.Stream.t()
```

Apply arbitrary expressions to pixels in frequency domain.

## Options

  * eval - specify when to evaluate expressions (from 0 to 1) (default init)
    - init (0)  - eval expressions once during initialization
    - frame (1)  - eval expressions per-frame

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * dc_Y - adjust gain in Y plane (from 0 to 1000) (default 0)
  * dc_U - adjust gain in U plane (from 0 to 1000) (default 0)
  * dc_V - adjust gain in V plane (from 0 to 1000) (default 0)
  * weight_Y - set luminance expression in Y plane (default "1")
  * weight_U - set chrominance expression in U plane
  * weight_V - set chrominance expression in V plane

# `field`

```elixir
@spec field(
  FFix.Stream.t(),
  [{:type, integer() | String.t() | atom()}]
) :: FFix.Stream.t()
```

Extract a field from the input video.

## Options

  * type - set field type (top or bottom) (from 0 to 1) (default top)
    - top (0)  - select top field
    - bottom (1)  - select bottom field

# `fieldhint`

```elixir
@spec fieldhint(FFix.Stream.t(),
  mode: integer() | String.t() | atom(),
  hint: String.t()
) ::
  FFix.Stream.t()
```

Field matching using hints.

## Options

  * mode - set hint mode (from 0 to 2) (default absolute)
    - absolute (0) 
    - relative (1) 
    - pattern (2) 

  * hint - set hint file

# `fieldorder`

```elixir
@spec fieldorder(FFix.Stream.t(),
  enable: String.t(),
  order: integer() | String.t() | atom()
) ::
  FFix.Stream.t()
```

Set the field order.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * order - output field order (from 0 to 1) (default tff)
    - bff (0)  - bottom field first
    - tff (1)  - top field first

# `fillborders`

```elixir
@spec fillborders(FFix.Stream.t(),
  mode: integer() | String.t() | atom(),
  enable: String.t(),
  left: integer(),
  right: integer(),
  color: term(),
  top: integer(),
  bottom: integer()
) :: FFix.Stream.t()
```

Fill borders of the input video.

## Options

  * mode - set the fill borders mode (from 0 to 6) (default smear)
    - smear (0) 
    - mirror (1) 
    - fixed (2) 
    - reflect (3) 
    - wrap (4) 
    - fade (5) 
    - margins (6) 

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * left - set the left fill border (from 0 to INT_MAX) (default 0)
  * right - set the right fill border (from 0 to INT_MAX) (default 0)
  * color - set the color for the fixed/fade mode (default "black")
  * top - set the top fill border (from 0 to INT_MAX) (default 0)
  * bottom - set the bottom fill border (from 0 to INT_MAX) (default 0)

# `find_rect`

```elixir
@spec find_rect(FFix.Stream.t(),
  discard: boolean(),
  threshold: float(),
  object: String.t(),
  mipmaps: integer(),
  xmin: integer(),
  ymin: integer(),
  xmax: integer(),
  ymax: integer()
) :: FFix.Stream.t()
```

Find a user specified object.

## Options

  * discard - (default false)
  * threshold - set threshold (from 0 to 1) (default 0.5)
  * object - object bitmap filename
  * mipmaps - set mipmaps (from 1 to 5) (default 3)
  * xmin - (from 0 to INT_MAX) (default 0)
  * ymin - (from 0 to INT_MAX) (default 0)
  * xmax - (from 0 to INT_MAX) (default 0)
  * ymax - (from 0 to INT_MAX) (default 0)

# `flip_vulkan`

```elixir
@spec flip_vulkan(
  FFix.Stream.t(),
  []
) :: FFix.Stream.t()
```

Flip both horizontally and vertically

## Options

# `floodfill`

```elixir
@spec floodfill(FFix.Stream.t(),
  x: integer(),
  y: integer(),
  enable: String.t(),
  s1: integer(),
  s2: integer(),
  s3: integer(),
  s0: integer(),
  d0: integer(),
  d1: integer(),
  d2: integer(),
  d3: integer()
) :: FFix.Stream.t()
```

Fill area with same color with another color.

## Options

  * x - set pixel x coordinate (from 0 to 65535) (default 0)
  * y - set pixel y coordinate (from 0 to 65535) (default 0)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * s1 - set source #1 component value (from -1 to 65535) (default 0)
  * s2 - set source #2 component value (from -1 to 65535) (default 0)
  * s3 - set source #3 component value (from -1 to 65535) (default 0)
  * s0 - set source #0 component value (from -1 to 65535) (default 0)
  * d0 - set destination #0 component value (from 0 to 65535) (default 0)
  * d1 - set destination #1 component value (from 0 to 65535) (default 0)
  * d2 - set destination #2 component value (from 0 to 65535) (default 0)
  * d3 - set destination #3 component value (from 0 to 65535) (default 0)

# `format`

```elixir
@spec format(FFix.Stream.t(),
  pix_fmts: String.t(),
  color_spaces: String.t(),
  color_ranges: String.t()
) ::
  FFix.Stream.t()
```

Convert the input video to one of the specified pixel formats.

## Options

  * pix_fmts - A '|'-separated list of pixel formats
  * color_spaces - A '|'-separated list of color spaces
  * color_ranges - A '|'-separated list of color ranges

# `fps`

```elixir
@spec fps(FFix.Stream.t(),
  round: integer() | String.t() | atom(),
  fps: String.t(),
  eof_action: integer() | String.t() | atom(),
  start_time: float()
) :: FFix.Stream.t()
```

Force constant framerate.

## Options

  * round - set rounding method for timestamps (from 0 to 5) (default near)
    - zero (0)  - round towards 0
    - inf (1)  - round away from 0
    - down (2)  - round towards -infty
    - up (3)  - round towards +infty
    - near (5)  - round to nearest

  * fps - A string describing desired output framerate (default "25")
  * eof_action - action performed for last frame (from 0 to 1) (default round)
    - round (0)  - round similar to other frames
    - pass (1)  - pass through last frame

  * start_time - Assume the first PTS should be this value. (from -DBL_MAX to DBL_MAX) (default DBL_MAX)

# `framepack`

```elixir
@spec framepack(FFix.Stream.t(), FFix.Stream.t(), [
  {:format, integer() | String.t() | atom()}
]) ::
  FFix.Stream.t()
```

Generate a frame packed stereoscopic video.

## Options

  * format - Frame pack output format (from 0 to INT_MAX) (default sbs)
    - sbs (1)  - Views are packed next to each other
    - tab (2)  - Views are packed on top of each other
    - frameseq (3)  - Views are one after the other
    - lines (6)  - Views are interleaved by lines
    - columns (7)  - Views are interleaved by columns

# `framerate`

```elixir
@spec framerate(FFix.Stream.t(),
  flags: integer() | String.t() | atom() | [String.t() | atom()],
  fps: term(),
  interp_start: integer(),
  interp_end: integer(),
  scene: float()
) :: FFix.Stream.t()
```

Upsamples or downsamples progressive source between specified frame rates.

## Options

  * flags - set flags (default scene_change_detect+scd)
    - scene_change_detect - enable scene change detection
    - scd - enable scene change detection

  * fps - required output frames per second rate (default "50")
  * interp_start - point to start linear interpolation (from 0 to 255) (default 15)
  * interp_end - point to end linear interpolation (from 0 to 255) (default 240)
  * scene - scene change level (from 0 to 100) (default 8.2)

# `framestep`

```elixir
@spec framestep(FFix.Stream.t(), enable: String.t(), step: integer()) ::
  FFix.Stream.t()
```

Select one frame every N frames.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * step - set frame step (from 1 to INT_MAX) (default 1)

# `freezedetect`

```elixir
@spec freezedetect(FFix.Stream.t(),
  d: term(),
  n: float(),
  noise: float(),
  duration: term()
) ::
  FFix.Stream.t()
```

Detects frozen video input.

## Options

  * d - set minimum duration in seconds (default 2)
  * n - set noise tolerance (from 0 to 1) (default 0.001)
  * noise - set noise tolerance (from 0 to 1) (default 0.001)
  * duration - set minimum duration in seconds (default 2)

# `freezeframes`

```elixir
@spec freezeframes(FFix.Stream.t(), FFix.Stream.t(),
  first: integer(),
  last: integer(),
  replace: integer()
) :: FFix.Stream.t()
```

Freeze video frames.

## Options

  * first - set first frame to freeze (from 0 to I64_MAX) (default 0)
  * last - set last frame to freeze (from 0 to I64_MAX) (default 0)
  * replace - set frame to replace (from 0 to I64_MAX) (default 0)

# `frei0r`

```elixir
@spec frei0r(FFix.Stream.t(),
  enable: String.t(),
  filter_name: String.t(),
  filter_params: String.t()
) ::
  FFix.Stream.t()
```

Apply a frei0r effect.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * filter_name - 
  * filter_params - 

# `fspp`

```elixir
@spec fspp(FFix.Stream.t(),
  enable: String.t(),
  qp: integer(),
  strength: integer(),
  quality: integer(),
  use_bframe_qp: boolean()
) :: FFix.Stream.t()
```

Apply Fast Simple Post-processing filter.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * qp - force a constant quantizer parameter (from 0 to 64) (default 0)
  * strength - set filter strength (from -15 to 32) (default 0)
  * quality - set quality (from 4 to 5) (default 4)
  * use_bframe_qp - use B-frames' QP (default false)

# `fsync`

```elixir
@spec fsync(FFix.Stream.t(), file: String.t(), f: String.t()) :: FFix.Stream.t()
```

Synchronize video frames from external source.

## Options

  * file - set the file name to use for frame sync (default "")
  * f - set the file name to use for frame sync (default "")

# `gblur`

```elixir
@spec gblur(FFix.Stream.t(),
  enable: String.t(),
  planes: integer(),
  sigma: float(),
  steps: integer(),
  sigmaV: float()
) :: FFix.Stream.t()
```

Apply Gaussian Blur filter.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * planes - set planes to filter (from 0 to 15) (default 15)
  * sigma - set sigma (from 0 to 1024) (default 0.5)
  * steps - set number of steps (from 1 to 6) (default 1)
  * sigmaV - set vertical sigma (from -1 to 1024) (default -1)

# `gblur_vulkan`

```elixir
@spec gblur_vulkan(FFix.Stream.t(),
  size: integer(),
  planes: integer(),
  sigma: float(),
  sigmaV: float(),
  sizeV: integer()
) :: FFix.Stream.t()
```

Gaussian Blur in Vulkan

## Options

  * size - Set kernel size (from 1 to 127) (default 19)
  * planes - Set planes to filter (from 0 to 15) (default 15)
  * sigma - Set sigma (from 0.01 to 1024) (default 0.5)
  * sigmaV - Set vertical sigma (from 0 to 1024) (default 0)
  * sizeV - Set vertical kernel size (from 0 to 127) (default 0)

# `geq`

```elixir
@spec geq(FFix.Stream.t(),
  cr: String.t(),
  i: integer() | String.t() | atom(),
  a: String.t(),
  b: String.t(),
  enable: String.t(),
  r: String.t(),
  interpolation: integer() | String.t() | atom(),
  g: String.t(),
  lum_expr: String.t(),
  lum: String.t(),
  cb_expr: String.t(),
  cb: String.t(),
  cr_expr: String.t(),
  alpha_expr: String.t(),
  red_expr: String.t(),
  green_expr: String.t(),
  blue_expr: String.t()
) :: FFix.Stream.t()
```

Apply generic equation to each pixel.

## Options

  * cr - set chroma red expression
  * i - set interpolation method (from 0 to 1) (default bilinear)
    - nearest (0)  - nearest interpolation
    - n (0)  - nearest interpolation
    - bilinear (1)  - bilinear interpolation
    - b (1)  - bilinear interpolation

  * a - set alpha expression
  * b - set blue expression
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * r - set red expression
  * interpolation - set interpolation method (from 0 to 1) (default bilinear)
    - nearest (0)  - nearest interpolation
    - n (0)  - nearest interpolation
    - bilinear (1)  - bilinear interpolation
    - b (1)  - bilinear interpolation

  * g - set green expression
  * lum_expr - set luminance expression
  * lum - set luminance expression
  * cb_expr - set chroma blue expression
  * cb - set chroma blue expression
  * cr_expr - set chroma red expression
  * alpha_expr - set alpha expression
  * red_expr - set red expression
  * green_expr - set green expression
  * blue_expr - set blue expression

# `gradfun`

```elixir
@spec gradfun(FFix.Stream.t(),
  enable: String.t(),
  strength: float(),
  radius: integer()
) ::
  FFix.Stream.t()
```

Debands video quickly using gradients.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * strength - The maximum amount by which the filter will change any one pixel. (from 0.51 to 64) (default 1.2)
  * radius - The neighborhood to fit the gradient to. (from 4 to 32) (default 16)

# `graphmonitor`

```elixir
@spec graphmonitor(FFix.Stream.t(),
  flags: integer() | String.t() | atom() | [String.t() | atom()],
  size: term(),
  mode: integer() | String.t() | atom() | [String.t() | atom()],
  m: integer() | String.t() | atom() | [String.t() | atom()],
  f: integer() | String.t() | atom() | [String.t() | atom()],
  s: term(),
  r: term(),
  o: float(),
  rate: term(),
  opacity: float()
) :: FFix.Stream.t()
```

Show various filtergraph stats.

## Options

  * flags - set flags (default all+queue)
    - none
    - all
    - queue
    - frame_count_in
    - frame_count_out
    - frame_count_delta
    - pts
    - pts_delta
    - time
    - time_delta
    - timebase
    - format
    - size
    - rate
    - eof
    - sample_count_in
    - sample_count_out
    - sample_count_delta
    - disabled

  * size - set monitor size (default "hd720")
  * mode - set mode (default 0)
    - full
    - compact
    - nozero
    - noeof
    - nodisabled

  * m - set mode (default 0)
    - full
    - compact
    - nozero
    - noeof
    - nodisabled

  * f - set flags (default all+queue)
    - none
    - all
    - queue
    - frame_count_in
    - frame_count_out
    - frame_count_delta
    - pts
    - pts_delta
    - time
    - time_delta
    - timebase
    - format
    - size
    - rate
    - eof
    - sample_count_in
    - sample_count_out
    - sample_count_delta
    - disabled

  * s - set monitor size (default "hd720")
  * r - set video rate (default "25")
  * o - set video opacity (from 0 to 1) (default 0.9)
  * rate - set video rate (default "25")
  * opacity - set video opacity (from 0 to 1) (default 0.9)

# `grayworld`

```elixir
@spec grayworld(
  FFix.Stream.t(),
  [{:enable, String.t()}]
) :: FFix.Stream.t()
```

Adjust white balance using LAB gray world algorithm

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero

# `greyedge`

```elixir
@spec greyedge(FFix.Stream.t(),
  enable: String.t(),
  sigma: float(),
  difford: integer(),
  minknorm: integer()
) :: FFix.Stream.t()
```

Estimates scene illumination by grey edge assumption.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * sigma - set sigma (from 0 to 1024) (default 1)
  * difford - set differentiation order (from 0 to 2) (default 1)
  * minknorm - set Minkowski norm (from 0 to 20) (default 1)

# `haldclut`

```elixir
@spec haldclut(FFix.Stream.t(), FFix.Stream.t(),
  enable: String.t(),
  shortest: boolean(),
  interp: integer() | String.t() | atom(),
  eof_action: integer() | String.t() | atom(),
  repeatlast: boolean(),
  ts_sync_mode: integer() | String.t() | atom(),
  clut: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Adjust colors using a Hald CLUT.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * shortest - force termination when the shortest input terminates (default false)
  * interp - select interpolation mode (from 0 to 4) (default tetrahedral)
    - nearest (0)  - use values from the nearest defined points
    - trilinear (1)  - interpolate values using the 8 points defining a cube
    - tetrahedral (2)  - interpolate values using a tetrahedron
    - pyramid (3)  - interpolate values using a pyramid
    - prism (4)  - interpolate values using a prism

  * eof_action - Action to take when encountering EOF from secondary input  (from 0 to 2) (default repeat)
    - repeat (0)  - Repeat the previous frame.
    - endall (1)  - End both streams.
    - pass (2)  - Pass through the main input.

  * repeatlast - extend last frame of secondary streams beyond EOF (default true)
  * ts_sync_mode - How strictly to sync streams based on secondary input timestamps (from 0 to 1) (default default)
    - default (0)  - Frame from secondary input with the nearest lower or equal timestamp to the primary input frame
    - nearest (1)  - Frame from secondary input with the absolute nearest timestamp to the primary input frame

  * clut - when to process CLUT (from 0 to 1) (default all)
    - first (0)  - process only first CLUT, ignore rest
    - all (1)  - process all CLUTs

# `hflip`

```elixir
@spec hflip(
  FFix.Stream.t(),
  [{:enable, String.t()}]
) :: FFix.Stream.t()
```

Horizontally flip the input video.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero

# `hflip_vulkan`

```elixir
@spec hflip_vulkan(
  FFix.Stream.t(),
  []
) :: FFix.Stream.t()
```

Horizontally flip the input video in Vulkan

## Options

# `histeq`

```elixir
@spec histeq(FFix.Stream.t(),
  intensity: float(),
  enable: String.t(),
  strength: float(),
  antibanding: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Apply global color histogram equalization.

## Options

  * intensity - set the intensity (from 0 to 1) (default 0.21)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * strength - set the strength (from 0 to 1) (default 0.2)
  * antibanding - set the antibanding level (from 0 to 2) (default none)
    - none (0)  - apply no antibanding
    - weak (1)  - apply weak antibanding
    - strong (2)  - apply strong antibanding

# `histogram`

```elixir
@spec histogram(FFix.Stream.t(),
  c: integer(),
  m: integer() | String.t() | atom(),
  f: float(),
  b: float(),
  d: integer() | String.t() | atom(),
  l: integer() | String.t() | atom(),
  components: integer(),
  bgopacity: float(),
  display_mode: integer() | String.t() | atom(),
  levels_mode: integer() | String.t() | atom(),
  level_height: integer(),
  scale_height: integer(),
  fgopacity: float(),
  colors_mode: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Compute and draw a histogram.

## Options

  * c - set color components to display (from 1 to 15) (default 7)
  * m - set levels mode (from 0 to 1) (default linear)
    - linear (0) 
    - logarithmic (1) 

  * f - set foreground opacity (from 0 to 1) (default 0.7)
  * b - set background opacity (from 0 to 1) (default 0.5)
  * d - set display mode (from 0 to 2) (default stack)
    - overlay (0) 
    - parade (1) 
    - stack (2) 

  * l - set colors mode (from 0 to 9) (default whiteonblack)
    - whiteonblack (0) 
    - blackonwhite (1) 
    - whiteongray (2) 
    - blackongray (3) 
    - coloronblack (4) 
    - coloronwhite (5) 
    - colorongray (6) 
    - blackoncolor (7) 
    - whiteoncolor (8) 
    - grayoncolor (9) 

  * components - set color components to display (from 1 to 15) (default 7)
  * bgopacity - set background opacity (from 0 to 1) (default 0.5)
  * display_mode - set display mode (from 0 to 2) (default stack)
    - overlay (0) 
    - parade (1) 
    - stack (2) 

  * levels_mode - set levels mode (from 0 to 1) (default linear)
    - linear (0) 
    - logarithmic (1) 

  * level_height - set level height (from 50 to 2048) (default 200)
  * scale_height - set scale height (from 0 to 40) (default 12)
  * fgopacity - set foreground opacity (from 0 to 1) (default 0.7)
  * colors_mode - set colors mode (from 0 to 9) (default whiteonblack)
    - whiteonblack (0) 
    - blackonwhite (1) 
    - whiteongray (2) 
    - blackongray (3) 
    - coloronblack (4) 
    - coloronwhite (5) 
    - colorongray (6) 
    - blackoncolor (7) 
    - whiteoncolor (8) 
    - grayoncolor (9) 

# `hqdn3d`

```elixir
@spec hqdn3d(FFix.Stream.t(),
  enable: String.t(),
  luma_spatial: float(),
  chroma_spatial: float(),
  luma_tmp: float(),
  chroma_tmp: float()
) :: FFix.Stream.t()
```

Apply a High Quality 3D Denoiser.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * luma_spatial - spatial luma strength (from 0 to DBL_MAX) (default 0)
  * chroma_spatial - spatial chroma strength (from 0 to DBL_MAX) (default 0)
  * luma_tmp - temporal luma strength (from 0 to DBL_MAX) (default 0)
  * chroma_tmp - temporal chroma strength (from 0 to DBL_MAX) (default 0)

# `hqx`

```elixir
@spec hqx(
  FFix.Stream.t(),
  [{:n, integer()}]
) :: FFix.Stream.t()
```

Scale the input by 2, 3 or 4 using the hq*x magnification algorithm.

## Options

  * n - set scale factor (from 2 to 4) (default 3)

# `hsvhold`

```elixir
@spec hsvhold(FFix.Stream.t(),
  enable: String.t(),
  val: float(),
  hue: float(),
  blend: float(),
  similarity: float(),
  sat: float()
) :: FFix.Stream.t()
```

Turns a certain HSV range into gray.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * val - set the value value (from -1 to 1) (default 0)
  * hue - set the hue value (from -360 to 360) (default 0)
  * blend - set the hsvhold blend value (from 0 to 1) (default 0)
  * similarity - set the hsvhold similarity value (from 1e-05 to 1) (default 0.01)
  * sat - set the saturation value (from -1 to 1) (default 0)

# `hsvkey`

```elixir
@spec hsvkey(FFix.Stream.t(),
  enable: String.t(),
  val: float(),
  hue: float(),
  blend: float(),
  similarity: float(),
  sat: float()
) :: FFix.Stream.t()
```

Turns a certain HSV range into transparency. Operates on YUV colors.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * val - set the value value (from -1 to 1) (default 0)
  * hue - set the hue value (from -360 to 360) (default 0)
  * blend - set the hsvkey blend value (from 0 to 1) (default 0)
  * similarity - set the hsvkey similarity value (from 1e-05 to 1) (default 0.01)
  * sat - set the saturation value (from -1 to 1) (default 0)

# `hue`

```elixir
@spec hue(FFix.Stream.t(),
  b: String.t(),
  s: String.t(),
  enable: String.t(),
  h: String.t(),
  H: String.t()
) :: FFix.Stream.t()
```

Adjust the hue and saturation of the input video.

## Options

  * b - set the brightness expression (default "0")
  * s - set the saturation expression (default "1")
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * h - set the hue angle degrees expression
  * H - set the hue angle radians expression

# `huesaturation`

```elixir
@spec huesaturation(FFix.Stream.t(),
  intensity: float(),
  enable: String.t(),
  colors: integer() | String.t() | atom() | [String.t() | atom()],
  hue: float(),
  saturation: float(),
  strength: float(),
  rw: float(),
  gw: float(),
  bw: float(),
  lightness: boolean()
) :: FFix.Stream.t()
```

Apply hue-saturation-intensity adjustments.

## Options

  * intensity - set the intensity shift (from -1 to 1) (default 0)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * colors - set colors range (default r+y+g+c+b+m+a)
    - r - set reds
    - y - set yellows
    - g - set greens
    - c - set cyans
    - b - set blues
    - m - set magentas
    - a - set all colors

  * hue - set the hue shift (from -180 to 180) (default 0)
  * saturation - set the saturation shift (from -1 to 1) (default 0)
  * strength - set the filtering strength (from 0 to 100) (default 1)
  * rw - set the red weight (from 0 to 1) (default 0.333)
  * gw - set the green weight (from 0 to 1) (default 0.334)
  * bw - set the blue weight (from 0 to 1) (default 0.333)
  * lightness - set the preserve lightness (default false)

# `hwdownload`

```elixir
@spec hwdownload(
  FFix.Stream.t(),
  []
) :: FFix.Stream.t()
```

Download a hardware frame to a normal frame

## Options

# `hwmap`

```elixir
@spec hwmap(FFix.Stream.t(),
  reverse: integer(),
  mode: integer() | String.t() | atom() | [String.t() | atom()],
  derive_device: String.t()
) :: FFix.Stream.t()
```

Map hardware frames

## Options

  * reverse - Map in reverse (create and allocate in the sink) (from 0 to 1) (default 0)
  * mode - Frame mapping mode (default read+write)
    - read - Mapping should be readable
    - write - Mapping should be writeable
    - overwrite - Mapping will always overwrite the entire frame
    - direct - Mapping should not involve any copying

  * derive_device - Derive a new device of this type

# `hwupload`

```elixir
@spec hwupload(
  FFix.Stream.t(),
  [{:derive_device, String.t()}]
) :: FFix.Stream.t()
```

Upload a normal frame to a hardware frame

## Options

  * derive_device - Derive a new device of this type

# `hwupload_cuda`

```elixir
@spec hwupload_cuda(
  FFix.Stream.t(),
  [{:device, integer()}]
) :: FFix.Stream.t()
```

Upload a system memory frame to a CUDA device.

## Options

  * device - Number of the device to use (from 0 to INT_MAX) (default 0)

# `hysteresis`

```elixir
@spec hysteresis(FFix.Stream.t(), FFix.Stream.t(),
  enable: String.t(),
  threshold: integer(),
  shortest: boolean(),
  planes: integer(),
  eof_action: integer() | String.t() | atom(),
  repeatlast: boolean(),
  ts_sync_mode: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Grow first stream into second stream by connecting components.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * threshold - set threshold (from 0 to 65535) (default 0)
  * shortest - force termination when the shortest input terminates (default false)
  * planes - set planes (from 0 to 15) (default 15)
  * eof_action - Action to take when encountering EOF from secondary input  (from 0 to 2) (default repeat)
    - repeat (0)  - Repeat the previous frame.
    - endall (1)  - End both streams.
    - pass (2)  - Pass through the main input.

  * repeatlast - extend last frame of secondary streams beyond EOF (default true)
  * ts_sync_mode - How strictly to sync streams based on secondary input timestamps (from 0 to 1) (default default)
    - default (0)  - Frame from secondary input with the nearest lower or equal timestamp to the primary input frame
    - nearest (1)  - Frame from secondary input with the absolute nearest timestamp to the primary input frame

# `iccdetect`

```elixir
@spec iccdetect(
  FFix.Stream.t(),
  [{:force, boolean()}]
) :: FFix.Stream.t()
```

Detect and parse ICC profiles.

## Options

  * force - overwrite existing tags (default true)

# `iccgen`

```elixir
@spec iccgen(FFix.Stream.t(),
  force: boolean(),
  color_primaries: integer() | String.t() | atom(),
  color_trc: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Generate and attach ICC profiles.

## Options

  * force - overwrite existing ICC profile (default false)
  * color_primaries - select color primaries (from 0 to 22) (default auto)
    - auto (0)  - infer based on frame
    - bt709 (1) 
    - bt470m (4) 
    - bt470bg (5) 
    - smpte170m (6) 
    - smpte240m (7) 
    - film (8) 
    - bt2020 (9) 
    - smpte428 (10) 
    - smpte431 (11) 
    - smpte432 (12) 
    - jedec-p22 (22) 
    - ebu3213 (22) 

  * color_trc - select color transfer (from 0 to 18) (default auto)
    - auto (0)  - infer based on frame
    - bt709 (1) 
    - bt470m (4) 
    - bt470bg (5) 
    - smpte170m (6) 
    - smpte240m (7) 
    - linear (8) 
    - iec61966-2-4 (11) 
    - bt1361e (12) 
    - iec61966-2-1 (13) 
    - bt2020-10 (14) 
    - bt2020-12 (15) 
    - smpte2084 (16) 
    - arib-std-b67 (18) 

# `identity`

```elixir
@spec identity(FFix.Stream.t(), FFix.Stream.t(),
  enable: String.t(),
  shortest: boolean(),
  eof_action: integer() | String.t() | atom(),
  repeatlast: boolean(),
  ts_sync_mode: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Calculate the Identity between two video streams.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * shortest - force termination when the shortest input terminates (default false)
  * eof_action - Action to take when encountering EOF from secondary input  (from 0 to 2) (default repeat)
    - repeat (0)  - Repeat the previous frame.
    - endall (1)  - End both streams.
    - pass (2)  - Pass through the main input.

  * repeatlast - extend last frame of secondary streams beyond EOF (default true)
  * ts_sync_mode - How strictly to sync streams based on secondary input timestamps (from 0 to 1) (default default)
    - default (0)  - Frame from secondary input with the nearest lower or equal timestamp to the primary input frame
    - nearest (1)  - Frame from secondary input with the absolute nearest timestamp to the primary input frame

# `idet`

```elixir
@spec idet(FFix.Stream.t(),
  intl_thres: float(),
  prog_thres: float(),
  rep_thres: float(),
  half_life: float(),
  analyze_interlaced_flag: integer()
) :: FFix.Stream.t()
```

Interlace detect Filter.

## Options

  * intl_thres - set interlacing threshold (from -1 to FLT_MAX) (default 1.04)
  * prog_thres - set progressive threshold (from -1 to FLT_MAX) (default 1.5)
  * rep_thres - set repeat threshold (from -1 to FLT_MAX) (default 3)
  * half_life - half life of cumulative statistics (from -1 to INT_MAX) (default 0)
  * analyze_interlaced_flag - set number of frames to use to determine if the interlace flag is accurate (from 0 to INT_MAX) (default 0)

# `il`

```elixir
@spec il(FFix.Stream.t(),
  c: integer() | String.t() | atom(),
  a: integer() | String.t() | atom(),
  enable: String.t(),
  l: integer() | String.t() | atom(),
  ls: boolean(),
  cs: boolean(),
  as: boolean(),
  luma_mode: integer() | String.t() | atom(),
  chroma_mode: integer() | String.t() | atom(),
  alpha_mode: integer() | String.t() | atom(),
  luma_swap: boolean(),
  chroma_swap: boolean(),
  alpha_swap: boolean()
) :: FFix.Stream.t()
```

Deinterleave or interleave fields.

## Options

  * c - select chroma mode (from 0 to 2) (default none)
    - none (0) 
    - interleave (1) 
    - i (1) 
    - deinterleave (2) 
    - d (2) 

  * a - select alpha mode (from 0 to 2) (default none)
    - none (0) 
    - interleave (1) 
    - i (1) 
    - deinterleave (2) 
    - d (2) 

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * l - select luma mode (from 0 to 2) (default none)
    - none (0) 
    - interleave (1) 
    - i (1) 
    - deinterleave (2) 
    - d (2) 

  * ls - swap luma fields (default false)
  * cs - swap chroma fields (default false)
  * as - swap alpha fields (default false)
  * luma_mode - select luma mode (from 0 to 2) (default none)
    - none (0) 
    - interleave (1) 
    - i (1) 
    - deinterleave (2) 
    - d (2) 

  * chroma_mode - select chroma mode (from 0 to 2) (default none)
    - none (0) 
    - interleave (1) 
    - i (1) 
    - deinterleave (2) 
    - d (2) 

  * alpha_mode - select alpha mode (from 0 to 2) (default none)
    - none (0) 
    - interleave (1) 
    - i (1) 
    - deinterleave (2) 
    - d (2) 

  * luma_swap - swap luma fields (default false)
  * chroma_swap - swap chroma fields (default false)
  * alpha_swap - swap alpha fields (default false)

# `inflate`

```elixir
@spec inflate(FFix.Stream.t(),
  enable: String.t(),
  threshold0: integer(),
  threshold1: integer(),
  threshold2: integer(),
  threshold3: integer()
) :: FFix.Stream.t()
```

Apply inflate effect.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * threshold0 - set threshold for 1st plane (from 0 to 65535) (default 65535)
  * threshold1 - set threshold for 2nd plane (from 0 to 65535) (default 65535)
  * threshold2 - set threshold for 3rd plane (from 0 to 65535) (default 65535)
  * threshold3 - set threshold for 4th plane (from 0 to 65535) (default 65535)

# `interlace`

```elixir
@spec interlace(FFix.Stream.t(),
  scan: integer() | String.t() | atom(),
  lowpass: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Convert progressive video into interlaced.

## Options

  * scan - scanning mode (from 0 to 1) (default tff)
    - tff (0)  - top field first
    - bff (1)  - bottom field first

  * lowpass - set vertical low-pass filter (from 0 to 2) (default linear)
    - off (0)  - disable vertical low-pass filter
    - linear (1)  - linear vertical low-pass filter
    - complex (2)  - complex vertical low-pass filter

# `kerndeint`

```elixir
@spec kerndeint(FFix.Stream.t(),
  map: boolean(),
  order: boolean(),
  thresh: integer(),
  sharp: boolean(),
  twoway: boolean()
) :: FFix.Stream.t()
```

Apply kernel deinterlacing to the input.

## Options

  * map - set the map (default false)
  * order - set the order (default false)
  * thresh - set the threshold (from 0 to 255) (default 10)
  * sharp - set sharpening (default false)
  * twoway - set twoway (default false)

# `kirsch`

```elixir
@spec kirsch(FFix.Stream.t(),
  enable: String.t(),
  scale: float(),
  planes: integer(),
  delta: float()
) ::
  FFix.Stream.t()
```

Apply kirsch operator.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * scale - set scale (from 0 to 65535) (default 1)
  * planes - set planes to filter (from 0 to 15) (default 15)
  * delta - set delta (from -65535 to 65535) (default 0)

# `lagfun`

```elixir
@spec lagfun(FFix.Stream.t(), enable: String.t(), planes: term(), decay: float()) ::
  FFix.Stream.t()
```

Slowly update darker pixels.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * planes - set what planes to filter (default F)
  * decay - set decay (from 0 to 1) (default 0.95)

# `latency`

```elixir
@spec latency(
  FFix.Stream.t(),
  [{:enable, String.t()}]
) :: FFix.Stream.t()
```

Report video filtering latency.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero

# `lenscorrection`

```elixir
@spec lenscorrection(FFix.Stream.t(),
  fc: term(),
  i: integer() | String.t() | atom(),
  enable: String.t(),
  cx: float(),
  cy: float(),
  k1: float(),
  k2: float()
) :: FFix.Stream.t()
```

Rectify the image by correcting for lens distortion.

## Options

  * fc - set the color of the unmapped pixels (default "black@0")
  * i - set interpolation type (from 0 to 64) (default nearest)
    - nearest (0)  - nearest neighbour
    - bilinear (1)  - bilinear

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * cx - set relative center x (from 0 to 1) (default 0.5)
  * cy - set relative center y (from 0 to 1) (default 0.5)
  * k1 - set quadratic distortion factor (from -1 to 1) (default 0)
  * k2 - set double quadratic distortion factor (from -1 to 1) (default 0)

# `libvmaf`

```elixir
@spec libvmaf(FFix.Stream.t(), FFix.Stream.t(),
  pool: String.t(),
  feature: String.t(),
  shortest: boolean(),
  eof_action: integer() | String.t() | atom(),
  repeatlast: boolean(),
  ts_sync_mode: integer() | String.t() | atom(),
  model: String.t(),
  log_path: String.t(),
  log_fmt: String.t(),
  n_threads: integer(),
  n_subsample: integer()
) :: FFix.Stream.t()
```

Calculate the VMAF between two video streams.

## Options

  * pool - Set the pool method to be used for computing vmaf.
  * feature - Set the feature to be used for computing vmaf.
  * shortest - force termination when the shortest input terminates (default false)
  * eof_action - Action to take when encountering EOF from secondary input  (from 0 to 2) (default repeat)
    - repeat (0)  - Repeat the previous frame.
    - endall (1)  - End both streams.
    - pass (2)  - Pass through the main input.

  * repeatlast - extend last frame of secondary streams beyond EOF (default true)
  * ts_sync_mode - How strictly to sync streams based on secondary input timestamps (from 0 to 1) (default default)
    - default (0)  - Frame from secondary input with the nearest lower or equal timestamp to the primary input frame
    - nearest (1)  - Frame from secondary input with the absolute nearest timestamp to the primary input frame

  * model - Set the model to be used for computing vmaf. (default "version=vmaf_v0.6.1")
  * log_path - Set the file path to be used to write log.
  * log_fmt - Set the format of the log (csv, json, xml, or sub). (default "xml")
  * n_threads - Set number of threads to be used when computing vmaf. (from 0 to UINT32_MAX) (default 0)
  * n_subsample - Set interval for frame subsampling used when computing vmaf. (from 1 to UINT32_MAX) (default 1)

# `limiter`

```elixir
@spec limiter(FFix.Stream.t(),
  max: integer(),
  min: integer(),
  enable: String.t(),
  planes: integer()
) ::
  FFix.Stream.t()
```

Limit pixels components to the specified range.

## Options

  * max - set max value (from 0 to 65535) (default 65535)
  * min - set min value (from 0 to 65535) (default 0)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * planes - set planes (from 0 to 15) (default 15)

# `loop`

```elixir
@spec loop(FFix.Stream.t(),
  size: integer(),
  start: integer(),
  time: term(),
  loop: integer()
) ::
  FFix.Stream.t()
```

Loop video frames.

## Options

  * size - max number of frames to loop (from 0 to 32767) (default 0)
  * start - set the loop start frame (from -1 to I64_MAX) (default 0)
  * time - set the loop start time (default INT64_MAX)
  * loop - number of loops (from -1 to INT_MAX) (default 0)

# `lumakey`

```elixir
@spec lumakey(FFix.Stream.t(),
  enable: String.t(),
  threshold: float(),
  tolerance: float(),
  softness: float()
) :: FFix.Stream.t()
```

Turns a certain luma into transparency.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * threshold - set the threshold value (from 0 to 1) (default 0)
  * tolerance - set the tolerance value (from 0 to 1) (default 0.01)
  * softness - set the softness value (from 0 to 1) (default 0)

# `lut1d`

```elixir
@spec lut1d(FFix.Stream.t(),
  file: String.t(),
  enable: String.t(),
  interp: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Adjust colors using a 1D LUT.

## Options

  * file - set 1D LUT file name
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * interp - select interpolation mode (from 0 to 4) (default linear)
    - nearest (0)  - use values from the nearest defined points
    - linear (1)  - use values from the linear interpolation
    - cosine (3)  - use values from the cosine interpolation
    - cubic (2)  - use values from the cubic interpolation
    - spline (4)  - use values from the spline interpolation

# `lut2`

```elixir
@spec lut2(FFix.Stream.t(), FFix.Stream.t(),
  enable: String.t(),
  d: integer(),
  shortest: boolean(),
  c1: String.t(),
  c2: String.t(),
  c0: String.t(),
  c3: String.t(),
  eof_action: integer() | String.t() | atom(),
  repeatlast: boolean(),
  ts_sync_mode: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Compute and apply a lookup table from two video inputs.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * d - set output depth (from 0 to 16) (default 0)
  * shortest - force termination when the shortest input terminates (default false)
  * c1 - set component #1 expression (default "x")
  * c2 - set component #2 expression (default "x")
  * c0 - set component #0 expression (default "x")
  * c3 - set component #3 expression (default "x")
  * eof_action - Action to take when encountering EOF from secondary input  (from 0 to 2) (default repeat)
    - repeat (0)  - Repeat the previous frame.
    - endall (1)  - End both streams.
    - pass (2)  - Pass through the main input.

  * repeatlast - extend last frame of secondary streams beyond EOF (default true)
  * ts_sync_mode - How strictly to sync streams based on secondary input timestamps (from 0 to 1) (default default)
    - default (0)  - Frame from secondary input with the nearest lower or equal timestamp to the primary input frame
    - nearest (1)  - Frame from secondary input with the absolute nearest timestamp to the primary input frame

# `lut3d`

```elixir
@spec lut3d(FFix.Stream.t(),
  file: String.t(),
  enable: String.t(),
  interp: integer() | String.t() | atom(),
  clut: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Adjust colors using a 3D LUT.

## Options

  * file - set 3D LUT file name
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * interp - select interpolation mode (from 0 to 4) (default tetrahedral)
    - nearest (0)  - use values from the nearest defined points
    - trilinear (1)  - interpolate values using the 8 points defining a cube
    - tetrahedral (2)  - interpolate values using a tetrahedron
    - pyramid (3)  - interpolate values using a pyramid
    - prism (4)  - interpolate values using a prism

  * clut - when to process CLUT (from 0 to 1) (default all)
    - first (0)  - process only first CLUT, ignore rest
    - all (1)  - process all CLUTs

# `lut`

```elixir
@spec lut(FFix.Stream.t(),
  y: String.t(),
  v: String.t(),
  a: String.t(),
  b: String.t(),
  enable: String.t(),
  r: String.t(),
  c1: String.t(),
  c2: String.t(),
  g: String.t(),
  c0: String.t(),
  c3: String.t(),
  u: String.t()
) :: FFix.Stream.t()
```

Compute and apply a lookup table to the RGB/YUV input video.

## Options

  * y - set Y expression (default "clipval")
  * v - set V expression (default "clipval")
  * a - set A expression (default "clipval")
  * b - set B expression (default "clipval")
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * r - set R expression (default "clipval")
  * c1 - set component #1 expression (default "clipval")
  * c2 - set component #2 expression (default "clipval")
  * g - set G expression (default "clipval")
  * c0 - set component #0 expression (default "clipval")
  * c3 - set component #3 expression (default "clipval")
  * u - set U expression (default "clipval")

# `lutrgb`

```elixir
@spec lutrgb(FFix.Stream.t(),
  y: String.t(),
  v: String.t(),
  a: String.t(),
  b: String.t(),
  enable: String.t(),
  r: String.t(),
  c1: String.t(),
  c2: String.t(),
  g: String.t(),
  c0: String.t(),
  c3: String.t(),
  u: String.t()
) :: FFix.Stream.t()
```

Compute and apply a lookup table to the RGB input video.

## Options

  * y - set Y expression (default "clipval")
  * v - set V expression (default "clipval")
  * a - set A expression (default "clipval")
  * b - set B expression (default "clipval")
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * r - set R expression (default "clipval")
  * c1 - set component #1 expression (default "clipval")
  * c2 - set component #2 expression (default "clipval")
  * g - set G expression (default "clipval")
  * c0 - set component #0 expression (default "clipval")
  * c3 - set component #3 expression (default "clipval")
  * u - set U expression (default "clipval")

# `lutyuv`

```elixir
@spec lutyuv(FFix.Stream.t(),
  y: String.t(),
  v: String.t(),
  a: String.t(),
  b: String.t(),
  enable: String.t(),
  r: String.t(),
  c1: String.t(),
  c2: String.t(),
  g: String.t(),
  c0: String.t(),
  c3: String.t(),
  u: String.t()
) :: FFix.Stream.t()
```

Compute and apply a lookup table to the YUV input video.

## Options

  * y - set Y expression (default "clipval")
  * v - set V expression (default "clipval")
  * a - set A expression (default "clipval")
  * b - set B expression (default "clipval")
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * r - set R expression (default "clipval")
  * c1 - set component #1 expression (default "clipval")
  * c2 - set component #2 expression (default "clipval")
  * g - set G expression (default "clipval")
  * c0 - set component #0 expression (default "clipval")
  * c3 - set component #3 expression (default "clipval")
  * u - set U expression (default "clipval")

# `maskedclamp`

```elixir
@spec maskedclamp(FFix.Stream.t(), FFix.Stream.t(), FFix.Stream.t(),
  enable: String.t(),
  planes: integer(),
  undershoot: integer(),
  overshoot: integer()
) :: FFix.Stream.t()
```

Clamp first stream with second stream and third stream.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * planes - set planes (from 0 to 15) (default 15)
  * undershoot - set undershoot (from 0 to 65535) (default 0)
  * overshoot - set overshoot (from 0 to 65535) (default 0)

# `maskedmax`

```elixir
@spec maskedmax(FFix.Stream.t(), FFix.Stream.t(), FFix.Stream.t(),
  enable: String.t(),
  planes: integer()
) :: FFix.Stream.t()
```

Apply filtering with maximum difference of two streams.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * planes - set planes (from 0 to 15) (default 15)

# `maskedmerge`

```elixir
@spec maskedmerge(FFix.Stream.t(), FFix.Stream.t(), FFix.Stream.t(),
  enable: String.t(),
  planes: integer()
) :: FFix.Stream.t()
```

Merge first stream with second stream using third stream as mask.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * planes - set planes (from 0 to 15) (default 15)

# `maskedmin`

```elixir
@spec maskedmin(FFix.Stream.t(), FFix.Stream.t(), FFix.Stream.t(),
  enable: String.t(),
  planes: integer()
) :: FFix.Stream.t()
```

Apply filtering with minimum difference of two streams.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * planes - set planes (from 0 to 15) (default 15)

# `maskedthreshold`

```elixir
@spec maskedthreshold(FFix.Stream.t(), FFix.Stream.t(),
  mode: integer() | String.t() | atom(),
  enable: String.t(),
  threshold: integer(),
  planes: integer()
) :: FFix.Stream.t()
```

Pick pixels comparing absolute difference of two streams with threshold.

## Options

  * mode - set mode (from 0 to 1) (default abs)
    - abs (0) 
    - diff (1) 

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * threshold - set threshold (from 0 to 65535) (default 1)
  * planes - set planes (from 0 to 15) (default 15)

# `maskfun`

```elixir
@spec maskfun(FFix.Stream.t(),
  high: integer(),
  low: integer(),
  sum: integer(),
  enable: String.t(),
  fill: integer(),
  planes: integer()
) :: FFix.Stream.t()
```

Create Mask.

## Options

  * high - set high threshold (from 0 to 65535) (default 10)
  * low - set low threshold (from 0 to 65535) (default 10)
  * sum - set sum value (from 0 to 65535) (default 10)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * fill - set fill value (from 0 to 65535) (default 0)
  * planes - set planes (from 0 to 15) (default 15)

# `mcdeint`

```elixir
@spec mcdeint(FFix.Stream.t(),
  mode: integer() | String.t() | atom(),
  qp: integer(),
  parity: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Apply motion compensating deinterlacing.

## Options

  * mode - set mode (from 0 to 3) (default fast)
    - fast (0) 
    - medium (1) 
    - slow (2) 
    - extra_slow (3) 

  * qp - set qp (from INT_MIN to INT_MAX) (default 1)
  * parity - set the assumed picture field parity (from -1 to 1) (default bff)
    - tff (0)  - assume top field first
    - bff (1)  - assume bottom field first

# `median`

```elixir
@spec median(FFix.Stream.t(),
  enable: String.t(),
  planes: integer(),
  radius: integer(),
  percentile: float(),
  radiusV: integer()
) :: FFix.Stream.t()
```

Apply Median filter.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * planes - set planes to filter (from 0 to 15) (default 15)
  * radius - set median radius (from 1 to 127) (default 1)
  * percentile - set median percentile (from 0 to 1) (default 0.5)
  * radiusV - set median vertical radius (from 0 to 127) (default 0)

# `mestimate`

```elixir
@spec mestimate(FFix.Stream.t(),
  method: integer() | String.t() | atom(),
  mb_size: integer(),
  search_param: integer()
) :: FFix.Stream.t()
```

Generate motion vectors.

## Options

  * method - motion estimation method (from 1 to 9) (default esa)
    - esa (1)  - exhaustive search
    - tss (2)  - three step search
    - tdls (3)  - two dimensional logarithmic search
    - ntss (4)  - new three step search
    - fss (5)  - four step search
    - ds (6)  - diamond search
    - hexbs (7)  - hexagon-based search
    - epzs (8)  - enhanced predictive zonal search
    - umh (9)  - uneven multi-hexagon search

  * mb_size - macroblock size (from 8 to INT_MAX) (default 16)
  * search_param - search parameter (from 4 to INT_MAX) (default 7)

# `metadata`

```elixir
@spec metadata(FFix.Stream.t(),
  function: integer() | String.t() | atom(),
  value: String.t(),
  file: String.t(),
  mode: integer() | String.t() | atom(),
  expr: String.t(),
  enable: String.t(),
  key: String.t(),
  direct: boolean()
) :: FFix.Stream.t()
```

Manipulate video frame metadata.

## Options

  * function - function for comparing values (from 0 to 6) (default same_str)
    - same_str (0) 
    - starts_with (1) 
    - less (2) 
    - equal (3) 
    - greater (4) 
    - expr (5) 
    - ends_with (6) 

  * value - set metadata value
  * file - set file where to print metadata information
  * mode - set a mode of operation (from 0 to 4) (default select)
    - select (0)  - select frame
    - add (1)  - add new metadata
    - modify (2)  - modify metadata
    - delete (3)  - delete metadata
    - print (4)  - print metadata

  * expr - set expression for expr function
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * key - set metadata key
  * direct - reduce buffering when printing to user-set file or pipe (default false)

# `midequalizer`

```elixir
@spec midequalizer(FFix.Stream.t(), FFix.Stream.t(),
  enable: String.t(),
  planes: integer()
) ::
  FFix.Stream.t()
```

Apply Midway Equalization.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * planes - set planes (from 0 to 15) (default 15)

# `minterpolate`

```elixir
@spec minterpolate(FFix.Stream.t(),
  me: integer() | String.t() | atom(),
  fps: term(),
  mi_mode: integer() | String.t() | atom(),
  mc_mode: integer() | String.t() | atom(),
  me_mode: integer() | String.t() | atom(),
  mb_size: integer(),
  search_param: integer(),
  vsbmc: integer(),
  scd: integer() | String.t() | atom(),
  scd_threshold: float()
) :: FFix.Stream.t()
```

Frame rate conversion using Motion Interpolation.

## Options

  * me - motion estimation method (from 1 to 9) (default epzs)
    - esa (1)  - exhaustive search
    - tss (2)  - three step search
    - tdls (3)  - two dimensional logarithmic search
    - ntss (4)  - new three step search
    - fss (5)  - four step search
    - ds (6)  - diamond search
    - hexbs (7)  - hexagon-based search
    - epzs (8)  - enhanced predictive zonal search
    - umh (9)  - uneven multi-hexagon search

  * fps - output's frame rate (default "60")
  * mi_mode - motion interpolation mode (from 0 to 2) (default mci)
    - dup (0)  - duplicate frames
    - blend (1)  - blend frames
    - mci (2)  - motion compensated interpolation

  * mc_mode - motion compensation mode (from 0 to 1) (default obmc)
    - obmc (0)  - overlapped block motion compensation
    - aobmc (1)  - adaptive overlapped block motion compensation

  * me_mode - motion estimation mode (from 0 to 1) (default bilat)
    - bidir (0)  - bidirectional motion estimation
    - bilat (1)  - bilateral motion estimation

  * mb_size - macroblock size (from 4 to 16) (default 16)
  * search_param - search parameter (from 4 to INT_MAX) (default 32)
  * vsbmc - variable-size block motion compensation (from 0 to 1) (default 0)
  * scd - scene change detection method (from 0 to 1) (default fdiff)
    - none (0)  - disable detection
    - fdiff (1)  - frame difference

  * scd_threshold - scene change threshold (from 0 to 100) (default 10)

# `monochrome`

```elixir
@spec monochrome(FFix.Stream.t(),
  cr: float(),
  high: float(),
  size: float(),
  enable: String.t(),
  cb: float()
) :: FFix.Stream.t()
```

Convert video to gray using custom color filter.

## Options

  * cr - set the chroma red spot (from -1 to 1) (default 0)
  * high - set the highlights strength (from 0 to 1) (default 0)
  * size - set the color filter size (from 0.1 to 10) (default 1)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * cb - set the chroma blue spot (from -1 to 1) (default 0)

# `morpho`

```elixir
@spec morpho(FFix.Stream.t(), FFix.Stream.t(),
  mode: integer() | String.t() | atom(),
  enable: String.t(),
  shortest: boolean(),
  planes: integer(),
  eof_action: integer() | String.t() | atom(),
  repeatlast: boolean(),
  ts_sync_mode: integer() | String.t() | atom(),
  structure: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Apply Morphological filter.

## Options

  * mode - set morphological transform (from 0 to 6) (default erode)
    - erode (0) 
    - dilate (1) 
    - open (2) 
    - close (3) 
    - gradient (4) 
    - tophat (5) 
    - blackhat (6) 

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * shortest - force termination when the shortest input terminates (default false)
  * planes - set planes to filter (from 0 to 15) (default 7)
  * eof_action - Action to take when encountering EOF from secondary input  (from 0 to 2) (default repeat)
    - repeat (0)  - Repeat the previous frame.
    - endall (1)  - End both streams.
    - pass (2)  - Pass through the main input.

  * repeatlast - extend last frame of secondary streams beyond EOF (default true)
  * ts_sync_mode - How strictly to sync streams based on secondary input timestamps (from 0 to 1) (default default)
    - default (0)  - Frame from secondary input with the nearest lower or equal timestamp to the primary input frame
    - nearest (1)  - Frame from secondary input with the absolute nearest timestamp to the primary input frame

  * structure - when to process structures (from 0 to 1) (default all)
    - first (0)  - process only first structure, ignore rest
    - all (1)  - process all structure

# `mpdecimate`

```elixir
@spec mpdecimate(FFix.Stream.t(),
  max: integer(),
  keep: integer(),
  lo: integer(),
  hi: integer(),
  frac: float()
) :: FFix.Stream.t()
```

Remove near-duplicate frames.

## Options

  * max - set the maximum number of consecutive dropped frames (positive), or the minimum interval between dropped frames (negative) (from INT_MIN to INT_MAX) (default 0)
  * keep - set the number of similar consecutive frames to be kept before starting to drop similar frames (from 0 to INT_MAX) (default 0)
  * lo - set low dropping threshold (from INT_MIN to INT_MAX) (default 320)
  * hi - set high dropping threshold (from INT_MIN to INT_MAX) (default 768)
  * frac - set fraction dropping threshold (from 0 to 1) (default 0.33)

# `msad`

```elixir
@spec msad(FFix.Stream.t(), FFix.Stream.t(),
  enable: String.t(),
  shortest: boolean(),
  eof_action: integer() | String.t() | atom(),
  repeatlast: boolean(),
  ts_sync_mode: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Calculate the MSAD between two video streams.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * shortest - force termination when the shortest input terminates (default false)
  * eof_action - Action to take when encountering EOF from secondary input  (from 0 to 2) (default repeat)
    - repeat (0)  - Repeat the previous frame.
    - endall (1)  - End both streams.
    - pass (2)  - Pass through the main input.

  * repeatlast - extend last frame of secondary streams beyond EOF (default true)
  * ts_sync_mode - How strictly to sync streams based on secondary input timestamps (from 0 to 1) (default default)
    - default (0)  - Frame from secondary input with the nearest lower or equal timestamp to the primary input frame
    - nearest (1)  - Frame from secondary input with the absolute nearest timestamp to the primary input frame

# `multiply`

```elixir
@spec multiply(FFix.Stream.t(), FFix.Stream.t(),
  offset: float(),
  enable: String.t(),
  scale: float(),
  planes: term()
) :: FFix.Stream.t()
```

Multiply first video stream with second video stream.

## Options

  * offset - set offset (from -1 to 1) (default 0.5)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * scale - set scale (from 0 to 9) (default 1)
  * planes - set planes (default F)

# `negate`

```elixir
@spec negate(FFix.Stream.t(),
  enable: String.t(),
  components: integer() | String.t() | atom() | [String.t() | atom()],
  negate_alpha: boolean()
) :: FFix.Stream.t()
```

Negate input video.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * components - set components to negate (default y+u+v+r+g+b)
    - y - set luma component
    - u - set u component
    - v - set v component
    - r - set red component
    - g - set green component
    - b - set blue component
    - a - set alpha component

  * negate_alpha - (default false)

# `nlmeans`

```elixir
@spec nlmeans(FFix.Stream.t(),
  p: integer(),
  s: float(),
  enable: String.t(),
  r: integer(),
  pc: integer(),
  rc: integer()
) :: FFix.Stream.t()
```

Non-local means denoiser.

## Options

  * p - patch size (from 0 to 99) (default 7)
  * s - denoising strength (from 1 to 30) (default 1)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * r - research window (from 0 to 99) (default 15)
  * pc - patch size for chroma planes (from 0 to 99) (default 0)
  * rc - research window for chroma planes (from 0 to 99) (default 0)

# `nlmeans_opencl`

```elixir
@spec nlmeans_opencl(FFix.Stream.t(),
  p: integer(),
  s: float(),
  r: integer(),
  pc: integer(),
  rc: integer()
) :: FFix.Stream.t()
```

Non-local means denoiser through OpenCL

## Options

  * p - patch size (from 0 to 99) (default 7)
  * s - denoising strength (from 1 to 30) (default 1)
  * r - research window (from 0 to 99) (default 15)
  * pc - patch size for chroma planes (from 0 to 99) (default 0)
  * rc - research window for chroma planes (from 0 to 99) (default 0)

# `nlmeans_vulkan`

```elixir
@spec nlmeans_vulkan(FFix.Stream.t(),
  p: integer(),
  s: float(),
  r: integer(),
  t: integer(),
  s1: float(),
  s2: float(),
  s3: float(),
  s4: float(),
  p1: integer(),
  p2: integer(),
  p3: integer(),
  p4: integer()
) :: FFix.Stream.t()
```

Non-local means denoiser (Vulkan)

## Options

  * p - patch size for all components (from 0 to 99) (default 7)
  * s - denoising strength for all components (from 1 to 100) (default 1)
  * r - research window radius (from 0 to 99) (default 15)
  * t - parallelism (from 1 to 168) (default 36)
  * s1 - denoising strength for component 1 (from 1 to 100) (default 1)
  * s2 - denoising strength for component 2 (from 1 to 100) (default 1)
  * s3 - denoising strength for component 3 (from 1 to 100) (default 1)
  * s4 - denoising strength for component 4 (from 1 to 100) (default 1)
  * p1 - patch size for component 1 (from 0 to 99) (default 0)
  * p2 - patch size for component 2 (from 0 to 99) (default 0)
  * p3 - patch size for component 3 (from 0 to 99) (default 0)
  * p4 - patch size for component 4 (from 0 to 99) (default 0)

# `nnedi`

```elixir
@spec nnedi(FFix.Stream.t(),
  enable: String.t(),
  field: integer() | String.t() | atom(),
  deint: integer() | String.t() | atom(),
  weights: String.t(),
  planes: integer(),
  nsize: integer() | String.t() | atom(),
  nns: integer() | String.t() | atom(),
  qual: integer() | String.t() | atom(),
  etype: integer() | String.t() | atom(),
  pscrn: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Apply neural network edge directed interpolation intra-only deinterlacer.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * field - set mode of operation (from -2 to 3) (default a)
    - af (-2)  - use frame flags, both fields
    - a (-1)  - use frame flags, single field
    - t (0)  - use top field only
    - b (1)  - use bottom field only
    - tf (2)  - use both fields, top first
    - bf (3)  - use both fields, bottom first

  * deint - set which frames to deinterlace (from 0 to 1) (default all)
    - all (0)  - deinterlace all frames
    - interlaced (1)  - only deinterlace frames marked as interlaced

  * weights - set weights file (default "nnedi3_weights.bin")
  * planes - set which planes to process (from 0 to 15) (default 7)
  * nsize - set size of local neighborhood around each pixel, used by the predictor neural network (from 0 to 6) (default s32x4)
    - s8x6 (0) 
    - s16x6 (1) 
    - s32x6 (2) 
    - s48x6 (3) 
    - s8x4 (4) 
    - s16x4 (5) 
    - s32x4 (6) 

  * nns - set number of neurons in predictor neural network (from 0 to 4) (default n32)
    - n16 (0) 
    - n32 (1) 
    - n64 (2) 
    - n128 (3) 
    - n256 (4) 

  * qual - set quality (from 1 to 2) (default fast)
    - fast (1) 
    - slow (2) 

  * etype - set which set of weights to use in the predictor (from 0 to 1) (default a)
    - a (0)  - weights trained to minimize absolute error
    - abs (0)  - weights trained to minimize absolute error
    - s (1)  - weights trained to minimize squared error
    - mse (1)  - weights trained to minimize squared error

  * pscrn - set prescreening (from 0 to 4) (default new)
    - none (0) 
    - original (1) 
    - new (2) 
    - new2 (3) 
    - new3 (4) 

# `noformat`

```elixir
@spec noformat(FFix.Stream.t(),
  pix_fmts: String.t(),
  color_spaces: String.t(),
  color_ranges: String.t()
) :: FFix.Stream.t()
```

Force libavfilter not to use any of the specified pixel formats for the input to the next filter.

## Options

  * pix_fmts - A '|'-separated list of pixel formats
  * color_spaces - A '|'-separated list of color spaces
  * color_ranges - A '|'-separated list of color ranges

# `noise`

```elixir
@spec noise(FFix.Stream.t(),
  enable: String.t(),
  all_seed: integer(),
  all_strength: integer(),
  alls: integer(),
  all_flags: integer() | String.t() | atom() | [String.t() | atom()],
  allf: integer() | String.t() | atom() | [String.t() | atom()],
  c0_seed: integer(),
  c0_strength: integer(),
  c0s: integer(),
  c0_flags: integer() | String.t() | atom() | [String.t() | atom()],
  c0f: integer() | String.t() | atom() | [String.t() | atom()],
  c1_seed: integer(),
  c1_strength: integer(),
  c1s: integer(),
  c1_flags: integer() | String.t() | atom() | [String.t() | atom()],
  c1f: integer() | String.t() | atom() | [String.t() | atom()],
  c2_seed: integer(),
  c2_strength: integer(),
  c2s: integer(),
  c2_flags: integer() | String.t() | atom() | [String.t() | atom()],
  c2f: integer() | String.t() | atom() | [String.t() | atom()],
  c3_seed: integer(),
  c3_strength: integer(),
  c3s: integer(),
  c3_flags: integer() | String.t() | atom() | [String.t() | atom()],
  c3f: integer() | String.t() | atom() | [String.t() | atom()]
) :: FFix.Stream.t()
```

Add noise.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * all_seed - set component #0 noise seed (from -1 to INT_MAX) (default -1)
  * all_strength - set component #0 strength (from 0 to 100) (default 0)
  * alls - set component #0 strength (from 0 to 100) (default 0)
  * all_flags - set component #0 flags (default 0)
    - a - averaged noise
    - p - (semi)regular pattern
    - t - temporal noise
    - u - uniform noise

  * allf - set component #0 flags (default 0)
    - a - averaged noise
    - p - (semi)regular pattern
    - t - temporal noise
    - u - uniform noise

  * c0_seed - set component #0 noise seed (from -1 to INT_MAX) (default -1)
  * c0_strength - set component #0 strength (from 0 to 100) (default 0)
  * c0s - set component #0 strength (from 0 to 100) (default 0)
  * c0_flags - set component #0 flags (default 0)
    - a - averaged noise
    - p - (semi)regular pattern
    - t - temporal noise
    - u - uniform noise

  * c0f - set component #0 flags (default 0)
    - a - averaged noise
    - p - (semi)regular pattern
    - t - temporal noise
    - u - uniform noise

  * c1_seed - set component #1 noise seed (from -1 to INT_MAX) (default -1)
  * c1_strength - set component #1 strength (from 0 to 100) (default 0)
  * c1s - set component #1 strength (from 0 to 100) (default 0)
  * c1_flags - set component #1 flags (default 0)
    - a - averaged noise
    - p - (semi)regular pattern
    - t - temporal noise
    - u - uniform noise

  * c1f - set component #1 flags (default 0)
    - a - averaged noise
    - p - (semi)regular pattern
    - t - temporal noise
    - u - uniform noise

  * c2_seed - set component #2 noise seed (from -1 to INT_MAX) (default -1)
  * c2_strength - set component #2 strength (from 0 to 100) (default 0)
  * c2s - set component #2 strength (from 0 to 100) (default 0)
  * c2_flags - set component #2 flags (default 0)
    - a - averaged noise
    - p - (semi)regular pattern
    - t - temporal noise
    - u - uniform noise

  * c2f - set component #2 flags (default 0)
    - a - averaged noise
    - p - (semi)regular pattern
    - t - temporal noise
    - u - uniform noise

  * c3_seed - set component #3 noise seed (from -1 to INT_MAX) (default -1)
  * c3_strength - set component #3 strength (from 0 to 100) (default 0)
  * c3s - set component #3 strength (from 0 to 100) (default 0)
  * c3_flags - set component #3 flags (default 0)
    - a - averaged noise
    - p - (semi)regular pattern
    - t - temporal noise
    - u - uniform noise

  * c3f - set component #3 flags (default 0)
    - a - averaged noise
    - p - (semi)regular pattern
    - t - temporal noise
    - u - uniform noise

# `normalize`

```elixir
@spec normalize(FFix.Stream.t(),
  enable: String.t(),
  strength: float(),
  smoothing: integer(),
  blackpt: term(),
  whitept: term(),
  independence: float()
) :: FFix.Stream.t()
```

Normalize RGB video.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * strength - strength of filter, from no effect to full normalization (from 0 to 1) (default 1)
  * smoothing - amount of temporal smoothing of the input range, to reduce flicker (from 0 to 2.68435e+08) (default 0)
  * blackpt - output color to which darkest input color is mapped (default "black")
  * whitept - output color to which brightest input color is mapped (default "white")
  * independence - proportion of independent to linked channel normalization (from 0 to 1) (default 1)

# `null`

```elixir
@spec null(
  FFix.Stream.t(),
  []
) :: FFix.Stream.t()
```

Pass the source unchanged to the output.

## Options

# `ocr`

```elixir
@spec ocr(FFix.Stream.t(),
  language: String.t(),
  datapath: String.t(),
  whitelist: String.t(),
  blacklist: String.t()
) :: FFix.Stream.t()
```

Optical Character Recognition.

## Options

  * language - set language (default "eng")
  * datapath - set datapath
  * whitelist - set character whitelist (default "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.:;,-+_!?"'[]{}()<>|/\=*&%$#@!~ ")
  * blacklist - set character blacklist (default "")

# `oscilloscope`

```elixir
@spec oscilloscope(FFix.Stream.t(),
  x: float(),
  y: float(),
  st: boolean(),
  c: integer(),
  s: float(),
  enable: String.t(),
  sc: boolean(),
  o: float(),
  t: float(),
  g: boolean(),
  tx: float(),
  ty: float(),
  tw: float(),
  th: float()
) :: FFix.Stream.t()
```

2D Video Oscilloscope.

## Options

  * x - set scope x position (from 0 to 1) (default 0.5)
  * y - set scope y position (from 0 to 1) (default 0.5)
  * st - draw statistics (default true)
  * c - set components to trace (from 0 to 15) (default 7)
  * s - set scope size (from 0 to 1) (default 0.8)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * sc - draw scope (default true)
  * o - set trace opacity (from 0 to 1) (default 0.8)
  * t - set scope tilt (from 0 to 1) (default 0.5)
  * g - draw trace grid (default true)
  * tx - set trace x position (from 0 to 1) (default 0.5)
  * ty - set trace y position (from 0 to 1) (default 0.9)
  * tw - set trace width (from 0.1 to 1) (default 0.8)
  * th - set trace height (from 0.1 to 1) (default 0.3)

# `overlay`

```elixir
@spec overlay(FFix.Stream.t(), FFix.Stream.t(),
  x: String.t(),
  y: String.t(),
  eval: integer() | String.t() | atom(),
  format: integer() | String.t() | atom(),
  enable: String.t(),
  shortest: boolean(),
  alpha: integer() | String.t() | atom(),
  eof_action: integer() | String.t() | atom(),
  repeatlast: boolean(),
  ts_sync_mode: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Overlay a video source on top of the input.

## Options

  * x - set the x expression (default "0")
  * y - set the y expression (default "0")
  * eval - specify when to evaluate expressions (from 0 to 1) (default frame)
    - init (0)  - eval expressions once during initialization
    - frame (1)  - eval expressions per-frame

  * format - set output format (from 0 to 8) (default yuv420)
    - yuv420 (0) 
    - yuv420p10 (1) 
    - yuv422 (2) 
    - yuv422p10 (3) 
    - yuv444 (4) 
    - yuv444p10 (5) 
    - rgb (6) 
    - gbrp (7) 
    - auto (8) 

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * shortest - force termination when the shortest input terminates (default false)
  * alpha - alpha format (from 0 to 1) (default straight)
    - straight (0) 
    - premultiplied (1) 

  * eof_action - Action to take when encountering EOF from secondary input  (from 0 to 2) (default repeat)
    - repeat (0)  - Repeat the previous frame.
    - endall (1)  - End both streams.
    - pass (2)  - Pass through the main input.

  * repeatlast - extend last frame of secondary streams beyond EOF (default true)
  * ts_sync_mode - How strictly to sync streams based on secondary input timestamps (from 0 to 1) (default default)
    - default (0)  - Frame from secondary input with the nearest lower or equal timestamp to the primary input frame
    - nearest (1)  - Frame from secondary input with the absolute nearest timestamp to the primary input frame

# `overlay_opencl`

```elixir
@spec overlay_opencl(FFix.Stream.t(), FFix.Stream.t(), x: integer(), y: integer()) ::
  FFix.Stream.t()
```

Overlay one video on top of another

## Options

  * x - Overlay x position (from 0 to INT_MAX) (default 0)
  * y - Overlay y position (from 0 to INT_MAX) (default 0)

# `overlay_qsv`

```elixir
@spec overlay_qsv(FFix.Stream.t(), FFix.Stream.t(),
  x: String.t(),
  y: String.t(),
  h: String.t(),
  w: String.t(),
  shortest: boolean(),
  alpha: integer(),
  eof_action: integer() | String.t() | atom(),
  repeatlast: boolean(),
  ts_sync_mode: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Quick Sync Video overlay.

## Options

  * x - Overlay x position (default "0")
  * y - Overlay y position (default "0")
  * h - Overlay height (default "overlay_ih*w/overlay_iw")
  * w - Overlay width (default "overlay_iw")
  * shortest - force termination when the shortest input terminates (default false)
  * alpha - Overlay global alpha (from 0 to 255) (default 255)
  * eof_action - Action to take when encountering EOF from secondary input  (from 0 to 2) (default repeat)
    - repeat (0)  - Repeat the previous frame.
    - endall (1)  - End both streams.
    - pass (2)  - Pass through the main input.

  * repeatlast - extend last frame of secondary streams beyond EOF (default true)
  * ts_sync_mode - How strictly to sync streams based on secondary input timestamps (from 0 to 1) (default default)
    - default (0)  - Frame from secondary input with the nearest lower or equal timestamp to the primary input frame
    - nearest (1)  - Frame from secondary input with the absolute nearest timestamp to the primary input frame

# `overlay_vaapi`

```elixir
@spec overlay_vaapi(FFix.Stream.t(), FFix.Stream.t(),
  x: String.t(),
  y: String.t(),
  h: String.t(),
  w: String.t(),
  shortest: boolean(),
  alpha: float(),
  eof_action: integer() | String.t() | atom(),
  repeatlast: boolean(),
  ts_sync_mode: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Overlay one video on top of another

## Options

  * x - Overlay x position (default "0")
  * y - Overlay y position (default "0")
  * h - Overlay height (default "overlay_ih*w/overlay_iw")
  * w - Overlay width (default "overlay_iw")
  * shortest - force termination when the shortest input terminates (default false)
  * alpha - Overlay global alpha (from 0 to 1) (default 1)
  * eof_action - Action to take when encountering EOF from secondary input  (from 0 to 2) (default repeat)
    - repeat (0)  - Repeat the previous frame.
    - endall (1)  - End both streams.
    - pass (2)  - Pass through the main input.

  * repeatlast - extend last frame of secondary streams beyond EOF (default true)
  * ts_sync_mode - How strictly to sync streams based on secondary input timestamps (from 0 to 1) (default default)
    - default (0)  - Frame from secondary input with the nearest lower or equal timestamp to the primary input frame
    - nearest (1)  - Frame from secondary input with the absolute nearest timestamp to the primary input frame

# `overlay_vulkan`

```elixir
@spec overlay_vulkan(FFix.Stream.t(), FFix.Stream.t(), x: integer(), y: integer()) ::
  FFix.Stream.t()
```

Overlay a source on top of another

## Options

  * x - Set horizontal offset (from 0 to INT_MAX) (default 0)
  * y - Set vertical offset (from 0 to INT_MAX) (default 0)

# `owdenoise`

```elixir
@spec owdenoise(FFix.Stream.t(),
  depth: integer(),
  enable: String.t(),
  ls: float(),
  cs: float(),
  luma_strength: float(),
  chroma_strength: float()
) :: FFix.Stream.t()
```

Denoise using wavelets.

## Options

  * depth - set depth (from 8 to 16) (default 8)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * ls - set luma strength (from 0 to 1000) (default 1)
  * cs - set chroma strength (from 0 to 1000) (default 1)
  * luma_strength - set luma strength (from 0 to 1000) (default 1)
  * chroma_strength - set chroma strength (from 0 to 1000) (default 1)

# `pad`

```elixir
@spec pad(FFix.Stream.t(),
  x: String.t(),
  y: String.t(),
  eval: integer() | String.t() | atom(),
  h: String.t(),
  width: String.t(),
  w: String.t(),
  color: term(),
  height: String.t(),
  aspect: term()
) :: FFix.Stream.t()
```

Pad the input video.

## Options

  * x - set the x offset expression for the input image position (default "0")
  * y - set the y offset expression for the input image position (default "0")
  * eval - specify when to evaluate expressions (from 0 to 1) (default init)
    - init (0)  - eval expressions once during initialization
    - frame (1)  - eval expressions during initialization and per-frame

  * h - set the pad area height expression (default "ih")
  * width - set the pad area width expression (default "iw")
  * w - set the pad area width expression (default "iw")
  * color - set the color of the padded area border (default "black")
  * height - set the pad area height expression (default "ih")
  * aspect - pad to fit an aspect instead of a resolution (from 0 to DBL_MAX) (default 0/1)

# `pad_opencl`

```elixir
@spec pad_opencl(FFix.Stream.t(),
  x: String.t(),
  y: String.t(),
  h: String.t(),
  width: String.t(),
  w: String.t(),
  color: term(),
  height: String.t(),
  aspect: term()
) :: FFix.Stream.t()
```

Pad the input video.

## Options

  * x - set the x offset for the input image position (default "0")
  * y - set the y offset for the input image position (default "0")
  * h - set the pad area height (default "ih")
  * width - set the pad area width (default "iw")
  * w - set the pad area width (default "iw")
  * color - set the color of the padded area border (default "black")
  * height - set the pad area height (default "ih")
  * aspect - pad to fit an aspect instead of a resolution (from 0 to 32767) (default 0/1)

# `pad_vaapi`

```elixir
@spec pad_vaapi(FFix.Stream.t(),
  x: String.t(),
  y: String.t(),
  h: String.t(),
  width: String.t(),
  w: String.t(),
  color: term(),
  height: String.t(),
  aspect: term()
) :: FFix.Stream.t()
```

Pad the input video.

## Options

  * x - set the x offset for the input image position (default "0")
  * y - set the y offset for the input image position (default "0")
  * h - set the pad area height (default "ih")
  * width - set the pad area width (default "iw")
  * w - set the pad area width (default "iw")
  * color - set the color of the padded area border (default "black")
  * height - set the pad area height (default "ih")
  * aspect - pad to fit an aspect instead of a resolution (from 0 to 32767) (default 0/1)

# `palettegen`

```elixir
@spec palettegen(FFix.Stream.t(),
  max_colors: integer(),
  reserve_transparent: boolean(),
  transparency_color: term(),
  stats_mode: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Find the optimal palette for a given stream.

## Options

  * max_colors - set the maximum number of colors to use in the palette (from 2 to 256) (default 256)
  * reserve_transparent - reserve a palette entry for transparency (default true)
  * transparency_color - set a background color for transparency (default "lime")
  * stats_mode - set statistics mode (from 0 to 2) (default full)
    - full (0)  - compute full frame histograms
    - diff (1)  - compute histograms only for the part that differs from previous frame
    - single (2)  - compute new histogram for each frame

# `paletteuse`

```elixir
@spec paletteuse(FFix.Stream.t(), FFix.Stream.t(),
  new: boolean(),
  dither: integer() | String.t() | atom(),
  bayer_scale: integer(),
  diff_mode: integer() | String.t() | atom(),
  alpha_threshold: integer(),
  debug_kdtree: String.t()
) :: FFix.Stream.t()
```

Use a palette to downsample an input video stream.

## Options

  * new - take new palette for each output frame (default false)
  * dither - select dithering mode (from 0 to 8) (default sierra2_4a)
    - bayer (1)  - ordered 8x8 bayer dithering (deterministic)
    - heckbert (2)  - dithering as defined by Paul Heckbert in 1982 (simple error diffusion)
    - floyd_steinberg 3 - Floyd and Steingberg dithering (error diffusion)
    - sierra2 (4)  - Frankie Sierra dithering v2 (error diffusion)
    - sierra2_4a (5)  - Frankie Sierra dithering v2 "Lite" (error diffusion)
    - sierra3 (6)  - Frankie Sierra dithering v3 (error diffusion)
    - burkes (7)  - Burkes dithering (error diffusion)
    - atkinson (8)  - Atkinson dithering by Bill Atkinson at Apple Computer (error diffusion)

  * bayer_scale - set scale for bayer dithering (from 0 to 5) (default 2)
  * diff_mode - set frame difference mode (from 0 to 1) (default 0)
    - rectangle (1)  - process smallest different rectangle

  * alpha_threshold - set the alpha threshold for transparency (from 0 to 255) (default 128)
  * debug_kdtree - save Graphviz graph of the kdtree in specified file

# `perms`

```elixir
@spec perms(FFix.Stream.t(),
  mode: integer() | String.t() | atom(),
  enable: String.t(),
  seed: integer()
) ::
  FFix.Stream.t()
```

Set permissions for the output video frame.

## Options

  * mode - select permissions mode (from 0 to 4) (default none)
    - none (0)  - do nothing
    - ro (1)  - set all output frames read-only
    - rw (2)  - set all output frames writable
    - toggle (3)  - switch permissions
    - random (4)  - set permissions randomly

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * seed - set the seed for the random mode (from -1 to UINT32_MAX) (default -1)

# `perspective`

```elixir
@spec perspective(FFix.Stream.t(),
  eval: integer() | String.t() | atom(),
  enable: String.t(),
  interpolation: integer() | String.t() | atom(),
  x1: String.t(),
  x0: String.t(),
  x2: String.t(),
  x3: String.t(),
  y1: String.t(),
  y2: String.t(),
  y0: String.t(),
  y3: String.t(),
  sense: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Correct the perspective of video.

## Options

  * eval - specify when to evaluate expressions (from 0 to 1) (default init)
    - init (0)  - eval expressions once during initialization
    - frame (1)  - eval expressions per-frame

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * interpolation - set interpolation (from 0 to 1) (default linear)
    - linear (0) 
    - cubic (1) 

  * x1 - set top right x coordinate (default "W")
  * x0 - set top left x coordinate (default "0")
  * x2 - set bottom left x coordinate (default "0")
  * x3 - set bottom right x coordinate (default "W")
  * y1 - set top right y coordinate (default "0")
  * y2 - set bottom left y coordinate (default "H")
  * y0 - set top left y coordinate (default "0")
  * y3 - set bottom right y coordinate (default "H")
  * sense - specify the sense of the coordinates (from 0 to 1) (default source)
    - source (0)  - specify locations in source to send to corners in destination
    - destination (1)  - specify locations in destination to send corners of source

# `phase`

```elixir
@spec phase(FFix.Stream.t(),
  mode: integer() | String.t() | atom(),
  enable: String.t()
) ::
  FFix.Stream.t()
```

Phase shift fields.

## Options

  * mode - set phase mode (from 0 to 8) (default A)
    - p (0)  - progressive
    - t (1)  - top first
    - b (2)  - bottom first
    - T (3)  - top first analyze
    - B (4)  - bottom first analyze
    - u (5)  - analyze
    - U (6)  - full analyze
    - a (7)  - auto
    - A (8)  - auto analyze

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero

# `photosensitivity`

```elixir
@spec photosensitivity(FFix.Stream.t(),
  skip: integer(),
  f: integer(),
  threshold: float(),
  t: float(),
  frames: integer(),
  bypass: boolean()
) :: FFix.Stream.t()
```

Filter out photosensitive epilepsy seizure-inducing flashes.

## Options

  * skip - set pixels to skip when sampling frames (from 1 to 1024) (default 1)
  * f - set how many frames to use (from 2 to 240) (default 30)
  * threshold - set detection threshold factor (lower is stricter) (from 0.1 to FLT_MAX) (default 1)
  * t - set detection threshold factor (lower is stricter) (from 0.1 to FLT_MAX) (default 1)
  * frames - set how many frames to use (from 2 to 240) (default 30)
  * bypass - leave frames unchanged (default false)

# `pixdesctest`

```elixir
@spec pixdesctest(
  FFix.Stream.t(),
  []
) :: FFix.Stream.t()
```

Test pixel format definitions.

## Options

# `pixelize`

```elixir
@spec pixelize(FFix.Stream.t(),
  mode: integer() | String.t() | atom(),
  p: term(),
  m: integer() | String.t() | atom(),
  enable: String.t(),
  h: integer(),
  width: integer(),
  w: integer(),
  planes: term(),
  height: integer()
) :: FFix.Stream.t()
```

Pixelize video.

## Options

  * mode - set the pixelize mode (from 0 to 2) (default avg)
    - avg (0)  - average
    - min (1)  - minimum
    - max (2)  - maximum

  * p - set what planes to filter (default F)
  * m - set the pixelize mode (from 0 to 2) (default avg)
    - avg (0)  - average
    - min (1)  - minimum
    - max (2)  - maximum

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * h - set block height (from 1 to 1024) (default 16)
  * width - set block width (from 1 to 1024) (default 16)
  * w - set block width (from 1 to 1024) (default 16)
  * planes - set what planes to filter (default F)
  * height - set block height (from 1 to 1024) (default 16)

# `pixscope`

```elixir
@spec pixscope(FFix.Stream.t(),
  x: float(),
  y: float(),
  enable: String.t(),
  h: integer(),
  w: integer(),
  o: float(),
  wx: float(),
  wy: float()
) :: FFix.Stream.t()
```

Pixel data analysis.

## Options

  * x - set scope x offset (from 0 to 1) (default 0.5)
  * y - set scope y offset (from 0 to 1) (default 0.5)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * h - set scope height (from 1 to 80) (default 7)
  * w - set scope width (from 1 to 80) (default 7)
  * o - set window opacity (from 0 to 1) (default 0.5)
  * wx - set window x offset (from -1 to 1) (default -1)
  * wy - set window y offset (from -1 to 1) (default -1)

# `pp7`

```elixir
@spec pp7(FFix.Stream.t(),
  mode: integer() | String.t() | atom(),
  enable: String.t(),
  qp: integer()
) ::
  FFix.Stream.t()
```

Apply Postprocessing 7 filter.

## Options

  * mode - set thresholding mode (from 0 to 2) (default medium)
    - hard (0)  - hard thresholding
    - soft (1)  - soft thresholding
    - medium (2)  - medium thresholding

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * qp - force a constant quantizer parameter (from 0 to 64) (default 0)

# `pp`

```elixir
@spec pp(FFix.Stream.t(), enable: String.t(), subfilters: String.t()) ::
  FFix.Stream.t()
```

Filter video using libpostproc.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * subfilters - set postprocess subfilters (default "de")

# `prewitt`

```elixir
@spec prewitt(FFix.Stream.t(),
  enable: String.t(),
  scale: float(),
  planes: integer(),
  delta: float()
) ::
  FFix.Stream.t()
```

Apply prewitt operator.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * scale - set scale (from 0 to 65535) (default 1)
  * planes - set planes to filter (from 0 to 15) (default 15)
  * delta - set delta (from -65535 to 65535) (default 0)

# `prewitt_opencl`

```elixir
@spec prewitt_opencl(FFix.Stream.t(),
  scale: float(),
  planes: integer(),
  delta: float()
) ::
  FFix.Stream.t()
```

Apply prewitt operator

## Options

  * scale - set scale (from 0 to 65535) (default 1)
  * planes - set planes to filter (from 0 to 15) (default 15)
  * delta - set delta (from -65535 to 65535) (default 0)

# `procamp_vaapi`

```elixir
@spec procamp_vaapi(FFix.Stream.t(),
  c: float(),
  b: float(),
  s: float(),
  h: float(),
  hue: float(),
  contrast: float(),
  brightness: float(),
  saturatio: float()
) :: FFix.Stream.t()
```

ProcAmp (color balance) adjustments for hue, saturation, brightness, contrast

## Options

  * c - Output video contrast (from 0 to 10) (default 1)
  * b - Output video brightness (from -100 to 100) (default 0)
  * s - Output video saturation (from 0 to 10) (default 1)
  * h - Output video hue (from -180 to 180) (default 0)
  * hue - Output video hue (from -180 to 180) (default 0)
  * contrast - Output video contrast (from 0 to 10) (default 1)
  * brightness - Output video brightness (from -100 to 100) (default 0)
  * saturatio - Output video saturation (from 0 to 10) (default 1)

# `pseudocolor`

```elixir
@spec pseudocolor(FFix.Stream.t(),
  index: integer(),
  p: integer() | String.t() | atom(),
  i: integer(),
  enable: String.t(),
  c1: String.t(),
  c2: String.t(),
  opacity: float(),
  preset: integer() | String.t() | atom(),
  c0: String.t(),
  c3: String.t()
) :: FFix.Stream.t()
```

Make pseudocolored video frames.

## Options

  * index - set component as base (from 0 to 3) (default 0)
  * p - set preset (from -1 to 20) (default none)
    - none (-1) 
    - magma (0) 
    - inferno (1) 
    - plasma (2) 
    - viridis (3) 
    - turbo (4) 
    - cividis (5) 
    - range1 (6) 
    - range2 (7) 
    - shadows (8) 
    - highlights (9) 
    - solar (10) 
    - nominal (11) 
    - preferred (12) 
    - total (13) 
    - spectral (14) 
    - cool (15) 
    - heat (16) 
    - fiery (17) 
    - blues (18) 
    - green (19) 
    - helix (20) 

  * i - set component as base (from 0 to 3) (default 0)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * c1 - set component #1 expression (default "val")
  * c2 - set component #2 expression (default "val")
  * opacity - set pseudocolor opacity (from 0 to 1) (default 1)
  * preset - set preset (from -1 to 20) (default none)
    - none (-1) 
    - magma (0) 
    - inferno (1) 
    - plasma (2) 
    - viridis (3) 
    - turbo (4) 
    - cividis (5) 
    - range1 (6) 
    - range2 (7) 
    - shadows (8) 
    - highlights (9) 
    - solar (10) 
    - nominal (11) 
    - preferred (12) 
    - total (13) 
    - spectral (14) 
    - cool (15) 
    - heat (16) 
    - fiery (17) 
    - blues (18) 
    - green (19) 
    - helix (20) 

  * c0 - set component #0 expression (default "val")
  * c3 - set component #3 expression (default "val")

# `psnr`

```elixir
@spec psnr(FFix.Stream.t(), FFix.Stream.t(),
  f: String.t(),
  enable: String.t(),
  shortest: boolean(),
  eof_action: integer() | String.t() | atom(),
  repeatlast: boolean(),
  ts_sync_mode: integer() | String.t() | atom(),
  stats_file: String.t(),
  stats_version: integer(),
  output_max: boolean()
) :: FFix.Stream.t()
```

Calculate the PSNR between two video streams.

## Options

  * f - Set file where to store per-frame difference information
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * shortest - force termination when the shortest input terminates (default false)
  * eof_action - Action to take when encountering EOF from secondary input  (from 0 to 2) (default repeat)
    - repeat (0)  - Repeat the previous frame.
    - endall (1)  - End both streams.
    - pass (2)  - Pass through the main input.

  * repeatlast - extend last frame of secondary streams beyond EOF (default true)
  * ts_sync_mode - How strictly to sync streams based on secondary input timestamps (from 0 to 1) (default default)
    - default (0)  - Frame from secondary input with the nearest lower or equal timestamp to the primary input frame
    - nearest (1)  - Frame from secondary input with the absolute nearest timestamp to the primary input frame

  * stats_file - Set file where to store per-frame difference information
  * stats_version - Set the format version for the stats file. (from 1 to 2) (default 1)
  * output_max - Add raw stats (max values) to the output log. (default false)

# `pullup`

```elixir
@spec pullup(FFix.Stream.t(),
  jl: integer(),
  jr: integer(),
  jt: integer(),
  jb: integer(),
  sb: boolean(),
  mp: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Pullup from field sequence to frames.

## Options

  * jl - set left junk size (from 0 to INT_MAX) (default 1)
  * jr - set right junk size (from 0 to INT_MAX) (default 1)
  * jt - set top junk size (from 1 to INT_MAX) (default 4)
  * jb - set bottom junk size (from 1 to INT_MAX) (default 4)
  * sb - set strict breaks (default false)
  * mp - set metric plane (from 0 to 2) (default y)
    - y (0)  - luma
    - u (1)  - chroma blue
    - v (2)  - chroma red

# `qp`

```elixir
@spec qp(FFix.Stream.t(), enable: String.t(), qp: String.t()) :: FFix.Stream.t()
```

Change video quantization parameters.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * qp - set qp expression

# `qrencode`

```elixir
@spec qrencode(FFix.Stream.t(),
  x: String.t(),
  y: String.t(),
  level: integer() | String.t() | atom(),
  fc: term(),
  bc: term(),
  q: String.t(),
  text: String.t(),
  enable: String.t(),
  l: integer() | String.t() | atom(),
  cs: boolean(),
  textfile: String.t(),
  expansion: integer() | String.t() | atom(),
  qrcode_width: String.t(),
  padded_qrcode_width: String.t(),
  Q: String.t(),
  case_sensitive: boolean(),
  foreground_color: term(),
  background_color: term()
) :: FFix.Stream.t()
```

Draw a QR code on top of video frames.

## Options

  * x - set x expression (default "0")
  * y - set y expression (default "0")
  * level - error correction level, lowest is L (from 0 to 3) (default Q)
    - L (0) 
    - M (1) 
    - Q (2) 
    - H (3) 

  * fc - set QR foreground color (default "black")
  * bc - set QR background color (default "white")
  * q - set rendered QR code width expression (default "64")
  * text - set text to encode
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * l - error correction level, lowest is L (from 0 to 3) (default Q)
    - L (0) 
    - M (1) 
    - Q (2) 
    - H (3) 

  * cs - generate code which is case sensitive (default true)
  * textfile - set text file to encode
  * expansion - set the expansion mode (from 0 to 2) (default normal)
    - none (0)  - set no expansion
    - normal (1)  - set normal expansion

  * qrcode_width - set rendered QR code width expression (default "64")
  * padded_qrcode_width - set rendered padded QR code width expression (default "q")
  * Q - set rendered padded QR code width expression (default "q")
  * case_sensitive - generate code which is case sensitive (default true)
  * foreground_color - set QR foreground color (default "black")
  * background_color - set QR background color (default "white")

# `random`

```elixir
@spec random(FFix.Stream.t(), seed: integer(), frames: integer()) :: FFix.Stream.t()
```

Return random frames.

## Options

  * seed - set the seed (from -1 to UINT32_MAX) (default -1)
  * frames - set number of frames in cache (from 2 to 512) (default 30)

# `readeia608`

```elixir
@spec readeia608(FFix.Stream.t(),
  enable: String.t(),
  scan_min: integer(),
  scan_max: integer(),
  spw: float(),
  chp: boolean(),
  lp: boolean()
) :: FFix.Stream.t()
```

Read EIA-608 Closed Caption codes from input video and write them to frame metadata.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * scan_min - set from which line to scan for codes (from 0 to INT_MAX) (default 0)
  * scan_max - set to which line to scan for codes (from 0 to INT_MAX) (default 29)
  * spw - set ratio of width reserved for sync code detection (from 0.1 to 0.7) (default 0.27)
  * chp - check and apply parity bit (default false)
  * lp - lowpass line prior to processing (default true)

# `readvitc`

```elixir
@spec readvitc(FFix.Stream.t(), scan_max: integer(), thr_b: float(), thr_w: float()) ::
  FFix.Stream.t()
```

Read vertical interval timecode and write it to frame metadata.

## Options

  * scan_max - maximum line numbers to scan for VITC data (from -1 to INT_MAX) (default 45)
  * thr_b - black color threshold (from 0 to 1) (default 0.2)
  * thr_w - white color threshold (from 0 to 1) (default 0.6)

# `realtime`

```elixir
@spec realtime(FFix.Stream.t(), speed: float(), limit: term()) :: FFix.Stream.t()
```

Slow down filtering to match realtime.

## Options

  * speed - speed factor (from DBL_MIN to DBL_MAX) (default 1)
  * limit - sleep time limit (default 2)

# `remap`

```elixir
@spec remap(FFix.Stream.t(), FFix.Stream.t(), FFix.Stream.t(),
  format: integer() | String.t() | atom(),
  fill: term()
) :: FFix.Stream.t()
```

Remap pixels.

## Options

  * format - set output format (from 0 to 1) (default color)
    - color (0) 
    - gray (1) 

  * fill - set the color of the unmapped pixels (default "black")

# `remap_opencl`

```elixir
@spec remap_opencl(FFix.Stream.t(), FFix.Stream.t(), FFix.Stream.t(),
  fill: term(),
  interp: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Remap pixels using OpenCL.

## Options

  * fill - set the color of the unmapped pixels (default "black")
  * interp - set interpolation method (from 0 to 1) (default linear)
    - near (0) 
    - linear (1) 

# `removegrain`

```elixir
@spec removegrain(FFix.Stream.t(),
  enable: String.t(),
  m1: integer(),
  m2: integer(),
  m3: integer(),
  m0: integer()
) :: FFix.Stream.t()
```

Remove grain.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * m1 - set mode for 2nd plane (from 0 to 24) (default 0)
  * m2 - set mode for 3rd plane (from 0 to 24) (default 0)
  * m3 - set mode for 4th plane (from 0 to 24) (default 0)
  * m0 - set mode for 1st plane (from 0 to 24) (default 0)

# `removelogo`

```elixir
@spec removelogo(FFix.Stream.t(),
  filename: String.t(),
  f: String.t(),
  enable: String.t()
) ::
  FFix.Stream.t()
```

Remove a TV logo based on a mask image.

## Options

  * filename - set bitmap filename
  * f - set bitmap filename
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero

# `repeatfields`

```elixir
@spec repeatfields(
  FFix.Stream.t(),
  []
) :: FFix.Stream.t()
```

Hard repeat fields based on MPEG repeat field flag.

## Options

# `reverse`

```elixir
@spec reverse(
  FFix.Stream.t(),
  []
) :: FFix.Stream.t()
```

Reverse a clip.

## Options

# `rgbashift`

```elixir
@spec rgbashift(FFix.Stream.t(),
  ah: integer(),
  enable: String.t(),
  edge: integer() | String.t() | atom(),
  rh: integer(),
  gh: integer(),
  bh: integer(),
  rv: integer(),
  gv: integer(),
  bv: integer(),
  av: integer()
) :: FFix.Stream.t()
```

Shift RGBA.

## Options

  * ah - shift alpha horizontally (from -255 to 255) (default 0)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * edge - set edge operation (from 0 to 1) (default smear)
    - smear (0) 
    - wrap (1) 

  * rh - shift red horizontally (from -255 to 255) (default 0)
  * gh - shift green horizontally (from -255 to 255) (default 0)
  * bh - shift blue horizontally (from -255 to 255) (default 0)
  * rv - shift red vertically (from -255 to 255) (default 0)
  * gv - shift green vertically (from -255 to 255) (default 0)
  * bv - shift blue vertically (from -255 to 255) (default 0)
  * av - shift alpha vertically (from -255 to 255) (default 0)

# `roberts`

```elixir
@spec roberts(FFix.Stream.t(),
  enable: String.t(),
  scale: float(),
  planes: integer(),
  delta: float()
) ::
  FFix.Stream.t()
```

Apply roberts cross operator.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * scale - set scale (from 0 to 65535) (default 1)
  * planes - set planes to filter (from 0 to 15) (default 15)
  * delta - set delta (from -65535 to 65535) (default 0)

# `roberts_opencl`

```elixir
@spec roberts_opencl(FFix.Stream.t(),
  scale: float(),
  planes: integer(),
  delta: float()
) ::
  FFix.Stream.t()
```

Apply roberts operator

## Options

  * scale - set scale (from 0 to 65535) (default 1)
  * planes - set planes to filter (from 0 to 15) (default 15)
  * delta - set delta (from -65535 to 65535) (default 0)

# `rotate`

```elixir
@spec rotate(FFix.Stream.t(),
  c: String.t(),
  a: String.t(),
  enable: String.t(),
  angle: String.t(),
  fillcolor: String.t(),
  out_w: String.t(),
  out_h: String.t(),
  ow: String.t(),
  oh: String.t(),
  bilinear: boolean()
) :: FFix.Stream.t()
```

Rotate the input image.

## Options

  * c - set background fill color (default "black")
  * a - set angle (in radians) (default "0")
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * angle - set angle (in radians) (default "0")
  * fillcolor - set background fill color (default "black")
  * out_w - set output width expression (default "iw")
  * out_h - set output height expression (default "ih")
  * ow - set output width expression (default "iw")
  * oh - set output height expression (default "ih")
  * bilinear - use bilinear interpolation (default true)

# `sab`

```elixir
@spec sab(FFix.Stream.t(),
  cr: float(),
  enable: String.t(),
  ls: float(),
  cs: float(),
  luma_radius: float(),
  lr: float(),
  luma_pre_filter_radius: float(),
  lpfr: float(),
  luma_strength: float(),
  chroma_radius: float(),
  chroma_pre_filter_radius: float(),
  cpfr: float(),
  chroma_strength: float()
) :: FFix.Stream.t()
```

Apply shape adaptive blur.

## Options

  * cr - set chroma radius (from -0.9 to 4) (default -0.9)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * ls - set luma strength (from 0.1 to 100) (default 1)
  * cs - set chroma strength (from -0.9 to 100) (default -0.9)
  * luma_radius - set luma radius (from 0.1 to 4) (default 1)
  * lr - set luma radius (from 0.1 to 4) (default 1)
  * luma_pre_filter_radius - set luma pre-filter radius (from 0.1 to 2) (default 1)
  * lpfr - set luma pre-filter radius (from 0.1 to 2) (default 1)
  * luma_strength - set luma strength (from 0.1 to 100) (default 1)
  * chroma_radius - set chroma radius (from -0.9 to 4) (default -0.9)
  * chroma_pre_filter_radius - set chroma pre-filter radius (from -0.9 to 2) (default -0.9)
  * cpfr - set chroma pre-filter radius (from -0.9 to 2) (default -0.9)
  * chroma_strength - set chroma strength (from -0.9 to 100) (default -0.9)

# `scale2ref`

```elixir
@spec scale2ref(FFix.Stream.t(), FFix.Stream.t(),
  flags: String.t(),
  size: String.t(),
  eval: integer() | String.t() | atom(),
  s: String.t(),
  h: String.t(),
  width: String.t(),
  w: String.t(),
  in_range: integer() | String.t() | atom(),
  height: String.t(),
  force_original_aspect_ratio: integer() | String.t() | atom(),
  force_divisible_by: integer(),
  out_range: integer() | String.t() | atom(),
  out_color_matrix: integer() | String.t() | atom(),
  interl: boolean(),
  in_color_matrix: integer() | String.t() | atom(),
  in_chroma_loc: integer() | String.t() | atom(),
  out_chroma_loc: integer() | String.t() | atom(),
  in_v_chr_pos: integer(),
  in_h_chr_pos: integer(),
  out_v_chr_pos: integer(),
  out_h_chr_pos: integer(),
  param0: float(),
  param1: float()
) :: {FFix.Stream.t(), FFix.Stream.t()}
```

Scale the input video size and/or convert the image format to the given reference.

## Options

  * flags - Flags to pass to libswscale (default "")
  * size - set video size
  * eval - specify when to evaluate expressions (from 0 to 1) (default init)
    - init (0)  - eval expressions once during initialization
    - frame (1)  - eval expressions during initialization and per-frame

  * s - set video size
  * h - Output video height
  * width - Output video width
  * w - Output video width
  * in_range - set input color range (from 0 to 2) (default auto)
    - auto (0) 
    - unknown (0) 
    - full (2) 
    - limited (1) 
    - jpeg (2) 
    - mpeg (1) 
    - tv (1) 
    - pc (2) 

  * height - Output video height
  * force_original_aspect_ratio - decrease or increase w/h if necessary to keep the original AR (from 0 to 2) (default disable)
    - disable (0) 
    - decrease (1) 
    - increase (2) 

  * force_divisible_by - enforce that the output resolution is divisible by a defined integer when force_original_aspect_ratio is used (from 1 to 256) (default 1)
  * out_range - set output color range (from 0 to 2) (default auto)
    - auto (0) 
    - unknown (0) 
    - full (2) 
    - limited (1) 
    - jpeg (2) 
    - mpeg (1) 
    - tv (1) 
    - pc (2) 

  * out_color_matrix - set output YCbCr type (from 0 to 17) (default 2)
    - auto (-1) 
    - bt601 (5) 
    - bt470 (5) 
    - smpte170m (5) 
    - bt709 (1) 
    - fcc (4) 
    - smpte240m (7) 
    - bt2020 (9) 

  * interl - set interlacing (default false)
  * in_color_matrix - set input YCbCr type (from -1 to 17) (default auto)
    - auto (-1) 
    - bt601 (5) 
    - bt470 (5) 
    - smpte170m (5) 
    - bt709 (1) 
    - fcc (4) 
    - smpte240m (7) 
    - bt2020 (9) 

  * in_chroma_loc - set input chroma sample location (from 0 to 6) (default auto)
    - auto (0) 
    - unknown (0) 
    - left (1) 
    - center (2) 
    - topleft (3) 
    - top (4) 
    - bottomleft (5) 
    - bottom (6) 

  * out_chroma_loc - set output chroma sample location (from 0 to 6) (default auto)
    - auto (0) 
    - unknown (0) 
    - left (1) 
    - center (2) 
    - topleft (3) 
    - top (4) 
    - bottomleft (5) 
    - bottom (6) 

  * in_v_chr_pos - input vertical chroma position in luma grid/256 (from -513 to 512) (default -513)
  * in_h_chr_pos - input horizontal chroma position in luma grid/256 (from -513 to 512) (default -513)
  * out_v_chr_pos - output vertical chroma position in luma grid/256 (from -513 to 512) (default -513)
  * out_h_chr_pos - output horizontal chroma position in luma grid/256 (from -513 to 512) (default -513)
  * param0 - Scaler param 0 (from -DBL_MAX to DBL_MAX) (default DBL_MAX)
  * param1 - Scaler param 1 (from -DBL_MAX to DBL_MAX) (default DBL_MAX)

# `scale`

```elixir
@spec scale(FFix.Stream.t(),
  flags: String.t(),
  size: String.t(),
  eval: integer() | String.t() | atom(),
  s: String.t(),
  h: String.t(),
  width: String.t(),
  w: String.t(),
  in_range: integer() | String.t() | atom(),
  shortest: boolean(),
  height: String.t(),
  eof_action: integer() | String.t() | atom(),
  repeatlast: boolean(),
  ts_sync_mode: integer() | String.t() | atom(),
  force_original_aspect_ratio: integer() | String.t() | atom(),
  force_divisible_by: integer(),
  out_range: integer() | String.t() | atom(),
  out_color_matrix: integer() | String.t() | atom(),
  interl: boolean(),
  in_color_matrix: integer() | String.t() | atom(),
  in_chroma_loc: integer() | String.t() | atom(),
  out_chroma_loc: integer() | String.t() | atom(),
  in_v_chr_pos: integer(),
  in_h_chr_pos: integer(),
  out_v_chr_pos: integer(),
  out_h_chr_pos: integer(),
  param0: float(),
  param1: float()
) :: FFix.Stream.t()
```

Scale the input video size and/or convert the image format.

## Options

  * flags - Flags to pass to libswscale (default "")
  * size - set video size
  * eval - specify when to evaluate expressions (from 0 to 1) (default init)
    - init (0)  - eval expressions once during initialization
    - frame (1)  - eval expressions during initialization and per-frame

  * s - set video size
  * h - Output video height
  * width - Output video width
  * w - Output video width
  * in_range - set input color range (from 0 to 2) (default auto)
    - auto (0) 
    - unknown (0) 
    - full (2) 
    - limited (1) 
    - jpeg (2) 
    - mpeg (1) 
    - tv (1) 
    - pc (2) 

  * shortest - force termination when the shortest input terminates (default false)
  * height - Output video height
  * eof_action - Action to take when encountering EOF from secondary input  (from 0 to 2) (default repeat)
    - repeat (0)  - Repeat the previous frame.
    - endall (1)  - End both streams.
    - pass (2)  - Pass through the main input.

  * repeatlast - extend last frame of secondary streams beyond EOF (default true)
  * ts_sync_mode - How strictly to sync streams based on secondary input timestamps (from 0 to 1) (default default)
    - default (0)  - Frame from secondary input with the nearest lower or equal timestamp to the primary input frame
    - nearest (1)  - Frame from secondary input with the absolute nearest timestamp to the primary input frame

  * force_original_aspect_ratio - decrease or increase w/h if necessary to keep the original AR (from 0 to 2) (default disable)
    - disable (0) 
    - decrease (1) 
    - increase (2) 

  * force_divisible_by - enforce that the output resolution is divisible by a defined integer when force_original_aspect_ratio is used (from 1 to 256) (default 1)
  * out_range - set output color range (from 0 to 2) (default auto)
    - auto (0) 
    - unknown (0) 
    - full (2) 
    - limited (1) 
    - jpeg (2) 
    - mpeg (1) 
    - tv (1) 
    - pc (2) 

  * out_color_matrix - set output YCbCr type (from 0 to 17) (default 2)
    - auto (-1) 
    - bt601 (5) 
    - bt470 (5) 
    - smpte170m (5) 
    - bt709 (1) 
    - fcc (4) 
    - smpte240m (7) 
    - bt2020 (9) 

  * interl - set interlacing (default false)
  * in_color_matrix - set input YCbCr type (from -1 to 17) (default auto)
    - auto (-1) 
    - bt601 (5) 
    - bt470 (5) 
    - smpte170m (5) 
    - bt709 (1) 
    - fcc (4) 
    - smpte240m (7) 
    - bt2020 (9) 

  * in_chroma_loc - set input chroma sample location (from 0 to 6) (default auto)
    - auto (0) 
    - unknown (0) 
    - left (1) 
    - center (2) 
    - topleft (3) 
    - top (4) 
    - bottomleft (5) 
    - bottom (6) 

  * out_chroma_loc - set output chroma sample location (from 0 to 6) (default auto)
    - auto (0) 
    - unknown (0) 
    - left (1) 
    - center (2) 
    - topleft (3) 
    - top (4) 
    - bottomleft (5) 
    - bottom (6) 

  * in_v_chr_pos - input vertical chroma position in luma grid/256 (from -513 to 512) (default -513)
  * in_h_chr_pos - input horizontal chroma position in luma grid/256 (from -513 to 512) (default -513)
  * out_v_chr_pos - output vertical chroma position in luma grid/256 (from -513 to 512) (default -513)
  * out_h_chr_pos - output horizontal chroma position in luma grid/256 (from -513 to 512) (default -513)
  * param0 - Scaler param 0 (from -DBL_MAX to DBL_MAX) (default DBL_MAX)
  * param1 - Scaler param 1 (from -DBL_MAX to DBL_MAX) (default DBL_MAX)

# `scale_qsv`

```elixir
@spec scale_qsv(FFix.Stream.t(),
  mode: integer() | String.t() | atom(),
  format: String.t(),
  h: String.t(),
  w: String.t()
) :: FFix.Stream.t()
```

Quick Sync Video "scaling and format conversion"

## Options

  * mode - scaling & format conversion mode (mode compute(3), vd(4) and ve(5) are only available on some platforms) (from 0 to 5) (default 0)
    - low_power (1)  - low power mode
    - hq (2)  - high quality mode
    - compute (3)  - compute
    - vd (4)  - vd
    - ve (5)  - ve

  * format - Output pixel format (default "same")
  * h - Output video height(0=input video height, -1=keep input video aspect) (default "ih")
  * w - Output video width(0=input video width, -1=keep input video aspect) (default "iw")

# `scale_vaapi`

```elixir
@spec scale_vaapi(FFix.Stream.t(),
  mode: integer() | String.t() | atom(),
  format: String.t(),
  h: String.t(),
  w: String.t(),
  force_original_aspect_ratio: integer() | String.t() | atom(),
  force_divisible_by: integer(),
  out_range: integer() | String.t() | atom(),
  out_color_matrix: String.t(),
  out_color_primaries: String.t(),
  out_color_transfer: String.t(),
  out_chroma_location: String.t()
) :: FFix.Stream.t()
```

Scale to/from VAAPI surfaces.

## Options

  * mode - Scaling mode (from 0 to 768) (default hq)
    - default (0)  - Use the default (depend on the driver) scaling algorithm
    - fast (256)  - Use fast scaling algorithm
    - hq (512)  - Use high quality scaling algorithm
    - nl_anamorphic (768)  - Use nolinear anamorphic scaling algorithm

  * format - Output video format (software format of hardware frames)
  * h - Output video height (default "ih")
  * w - Output video width (default "iw")
  * force_original_aspect_ratio - decrease or increase w/h if necessary to keep the original AR (from 0 to 2) (default disable)
    - disable (0) 
    - decrease (1) 
    - increase (2) 

  * force_divisible_by - enforce that the output resolution is divisible by a defined integer when force_original_aspect_ratio is used (from 1 to 256) (default 1)
  * out_range - Output colour range (from 0 to 2) (default 0)
    - full (2)  - Full range
    - limited (1)  - Limited range
    - jpeg (2)  - Full range
    - mpeg (1)  - Limited range
    - tv (1)  - Limited range
    - pc (2)  - Full range

  * out_color_matrix - Output colour matrix coefficient set
  * out_color_primaries - Output colour primaries
  * out_color_transfer - Output colour transfer characteristics
  * out_chroma_location - Output chroma sample location

# `scale_vulkan`

```elixir
@spec scale_vulkan(FFix.Stream.t(),
  format: String.t(),
  h: String.t(),
  w: String.t(),
  out_range: integer() | String.t() | atom(),
  scaler: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Scale Vulkan frames

## Options

  * format - Output video format (software format of hardware frames)
  * h - Output video height (default "ih")
  * w - Output video width (default "iw")
  * out_range - Output colour range (from 0 to 2) (default 0) (from 0 to 2) (default 0)
    - full (2)  - Full range
    - limited (1)  - Limited range
    - jpeg (2)  - Full range
    - mpeg (1)  - Limited range
    - tv (1)  - Limited range
    - pc (2)  - Full range

  * scaler - Scaler function (from 0 to 2) (default bilinear)
    - bilinear (0)  - Bilinear interpolation (fastest)
    - nearest (1)  - Nearest (useful for pixel art)

# `scdet`

```elixir
@spec scdet(FFix.Stream.t(),
  s: boolean(),
  threshold: float(),
  t: float(),
  sc_pass: boolean()
) ::
  FFix.Stream.t()
```

Detect video scene change

## Options

  * s - Set the flag to pass scene change frames (default false)
  * threshold - set scene change detect threshold (from 0 to 100) (default 10)
  * t - set scene change detect threshold (from 0 to 100) (default 10)
  * sc_pass - Set the flag to pass scene change frames (default false)

# `scharr`

```elixir
@spec scharr(FFix.Stream.t(),
  enable: String.t(),
  scale: float(),
  planes: integer(),
  delta: float()
) ::
  FFix.Stream.t()
```

Apply scharr operator.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * scale - set scale (from 0 to 65535) (default 1)
  * planes - set planes to filter (from 0 to 15) (default 15)
  * delta - set delta (from -65535 to 65535) (default 0)

# `scroll`

```elixir
@spec scroll(FFix.Stream.t(),
  v: float(),
  enable: String.t(),
  h: float(),
  vertical: float(),
  horizontal: float(),
  hpos: float(),
  vpos: float()
) :: FFix.Stream.t()
```

Scroll input video.

## Options

  * v - set the vertical scrolling speed (from -1 to 1) (default 0)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * h - set the horizontal scrolling speed (from -1 to 1) (default 0)
  * vertical - set the vertical scrolling speed (from -1 to 1) (default 0)
  * horizontal - set the horizontal scrolling speed (from -1 to 1) (default 0)
  * hpos - set initial horizontal position (from 0 to 1) (default 0)
  * vpos - set initial vertical position (from 0 to 1) (default 0)

# `selectivecolor`

```elixir
@spec selectivecolor(FFix.Stream.t(),
  enable: String.t(),
  correction_method: integer() | String.t() | atom(),
  reds: String.t(),
  yellows: String.t(),
  greens: String.t(),
  cyans: String.t(),
  blues: String.t(),
  magentas: String.t(),
  whites: String.t(),
  neutrals: String.t(),
  blacks: String.t(),
  psfile: String.t()
) :: FFix.Stream.t()
```

Apply CMYK adjustments to specific color ranges.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * correction_method - select correction method (from 0 to 1) (default absolute)
    - absolute (0) 
    - relative (1) 

  * reds - adjust red regions
  * yellows - adjust yellow regions
  * greens - adjust green regions
  * cyans - adjust cyan regions
  * blues - adjust blue regions
  * magentas - adjust magenta regions
  * whites - adjust white regions
  * neutrals - adjust neutral regions
  * blacks - adjust black regions
  * psfile - set Photoshop selectivecolor file name

# `sendcmd`

```elixir
@spec sendcmd(FFix.Stream.t(),
  filename: String.t(),
  c: String.t(),
  f: String.t(),
  commands: String.t()
) ::
  FFix.Stream.t()
```

Send commands to filters.

## Options

  * filename - set commands file
  * c - set commands
  * f - set commands file
  * commands - set commands

# `separatefields`

```elixir
@spec separatefields(
  FFix.Stream.t(),
  []
) :: FFix.Stream.t()
```

Split input video frames into fields.

## Options

# `setdar`

```elixir
@spec setdar(FFix.Stream.t(),
  max: integer(),
  r: String.t(),
  ratio: String.t(),
  dar: String.t()
) ::
  FFix.Stream.t()
```

Set the frame display aspect ratio.

## Options

  * max - set max value for nominator or denominator in the ratio (from 1 to INT_MAX) (default 100)
  * r - set display aspect ratio (default "0")
  * ratio - set display aspect ratio (default "0")
  * dar - set display aspect ratio (default "0")

# `setfield`

```elixir
@spec setfield(
  FFix.Stream.t(),
  [{:mode, integer() | String.t() | atom()}]
) :: FFix.Stream.t()
```

Force field for the output video frame.

## Options

  * mode - select interlace mode (from -1 to 2) (default auto)
    - auto (-1)  - keep the same input field
    - bff (0)  - mark as bottom-field-first
    - tff (1)  - mark as top-field-first
    - prog (2)  - mark as progressive

# `setparams`

```elixir
@spec setparams(FFix.Stream.t(),
  range: integer() | String.t() | atom(),
  colorspace: integer() | String.t() | atom(),
  field_mode: integer() | String.t() | atom(),
  color_primaries: integer() | String.t() | atom(),
  color_trc: integer() | String.t() | atom(),
  chroma_location: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Force field, or color property for the output video frame.

## Options

  * range - select color range (from -1 to 2) (default auto)
    - auto (-1)  - keep the same color range
    - unspecified (0) 
    - unknown (0) 
    - limited (1) 
    - tv (1) 
    - mpeg (1) 
    - full (2) 
    - pc (2) 
    - jpeg (2) 

  * colorspace - select colorspace (from -1 to 17) (default auto)
    - auto (-1)  - keep the same colorspace
    - gbr (0) 
    - bt709 (1) 
    - unknown (2) 
    - fcc (4) 
    - bt470bg (5) 
    - smpte170m (6) 
    - smpte240m (7) 
    - ycgco (8) 
    - ycgco-re (16) 
    - ycgco-ro (17) 
    - bt2020nc (9) 
    - bt2020c (10) 
    - smpte2085 (11) 
    - chroma-derived-nc 12
    - chroma-derived-c 13
    - ictcp (14) 
    - ipt-c2 (15) 

  * field_mode - select interlace mode (from -1 to 2) (default auto)
    - auto (-1)  - keep the same input field
    - bff (0)  - mark as bottom-field-first
    - tff (1)  - mark as top-field-first
    - prog (2)  - mark as progressive

  * color_primaries - select color primaries (from -1 to 22) (default auto)
    - auto (-1)  - keep the same color primaries
    - bt709 (1) 
    - unknown (2) 
    - bt470m (4) 
    - bt470bg (5) 
    - smpte170m (6) 
    - smpte240m (7) 
    - film (8) 
    - bt2020 (9) 
    - smpte428 (10) 
    - smpte431 (11) 
    - smpte432 (12) 
    - jedec-p22 (22) 
    - ebu3213 (22) 

  * color_trc - select color transfer (from -1 to 18) (default auto)
    - auto (-1)  - keep the same color transfer
    - bt709 (1) 
    - unknown (2) 
    - bt470m (4) 
    - bt470bg (5) 
    - smpte170m (6) 
    - smpte240m (7) 
    - linear (8) 
    - log100 (9) 
    - log316 (10) 
    - iec61966-2-4 (11) 
    - bt1361e (12) 
    - iec61966-2-1 (13) 
    - bt2020-10 (14) 
    - bt2020-12 (15) 
    - smpte2084 (16) 
    - smpte428 (17) 
    - arib-std-b67 (18) 

  * chroma_location - select chroma sample location (from -1 to 6) (default auto)
    - auto (-1)  - keep the same chroma location
    - unspecified (0) 
    - unknown (0) 
    - left (1) 
    - center (2) 
    - topleft (3) 
    - top (4) 
    - bottomleft (5) 
    - bottom (6) 

# `setpts`

```elixir
@spec setpts(
  FFix.Stream.t(),
  [{:expr, String.t()}]
) :: FFix.Stream.t()
```

Set PTS for the output video frame.

## Options

  * expr - Expression determining the frame timestamp (default "PTS")

# `setrange`

```elixir
@spec setrange(
  FFix.Stream.t(),
  [{:range, integer() | String.t() | atom()}]
) :: FFix.Stream.t()
```

Force color range for the output video frame.

## Options

  * range - select color range (from -1 to 2) (default auto)
    - auto (-1)  - keep the same color range
    - unspecified (0) 
    - unknown (0) 
    - limited (1) 
    - tv (1) 
    - mpeg (1) 
    - full (2) 
    - pc (2) 
    - jpeg (2) 

# `setsar`

```elixir
@spec setsar(FFix.Stream.t(),
  max: integer(),
  r: String.t(),
  ratio: String.t(),
  sar: String.t()
) ::
  FFix.Stream.t()
```

Set the pixel sample aspect ratio.

## Options

  * max - set max value for nominator or denominator in the ratio (from 1 to INT_MAX) (default 100)
  * r - set sample (pixel) aspect ratio (default "0")
  * ratio - set sample (pixel) aspect ratio (default "0")
  * sar - set sample (pixel) aspect ratio (default "0")

# `settb`

```elixir
@spec settb(FFix.Stream.t(), expr: String.t(), tb: String.t()) :: FFix.Stream.t()
```

Set timebase for the video output link.

## Options

  * expr - set expression determining the output timebase (default "intb")
  * tb - set expression determining the output timebase (default "intb")

# `sharpness_vaapi`

```elixir
@spec sharpness_vaapi(
  FFix.Stream.t(),
  [{:sharpness, integer()}]
) :: FFix.Stream.t()
```

VAAPI VPP for sharpness

## Options

  * sharpness - sharpness level (from 0 to 64) (default 44)

# `shear`

```elixir
@spec shear(FFix.Stream.t(),
  c: String.t(),
  enable: String.t(),
  interp: integer() | String.t() | atom(),
  fillcolor: String.t(),
  shx: float(),
  shy: float()
) :: FFix.Stream.t()
```

Shear transform the input image.

## Options

  * c - set background fill color (default "black")
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * interp - set interpolation (from 0 to 1) (default bilinear)
    - nearest (0)  - nearest neighbour
    - bilinear (1)  - bilinear

  * fillcolor - set background fill color (default "black")
  * shx - set x shear factor (from -2 to 2) (default 0)
  * shy - set y shear factor (from -2 to 2) (default 0)

# `showinfo`

```elixir
@spec showinfo(FFix.Stream.t(), checksum: boolean(), udu_sei_as_ascii: boolean()) ::
  FFix.Stream.t()
```

Show textual information for each video frame.

## Options

  * checksum - calculate checksums (default true)
  * udu_sei_as_ascii - try to print user data unregistered SEI as ascii character when possible (default false)

# `showpalette`

```elixir
@spec showpalette(
  FFix.Stream.t(),
  [{:s, integer()}]
) :: FFix.Stream.t()
```

Display frame palette.

## Options

  * s - set pixel box size (from 1 to 100) (default 30)

# `shuffleframes`

```elixir
@spec shuffleframes(FFix.Stream.t(), enable: String.t(), mapping: String.t()) ::
  FFix.Stream.t()
```

Shuffle video frames.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * mapping - set destination indexes of input frames (default "0")

# `shufflepixels`

```elixir
@spec shufflepixels(FFix.Stream.t(),
  mode: integer() | String.t() | atom(),
  m: integer() | String.t() | atom(),
  s: integer(),
  enable: String.t(),
  seed: integer(),
  h: integer(),
  width: integer(),
  w: integer(),
  d: integer() | String.t() | atom(),
  direction: integer() | String.t() | atom(),
  height: integer()
) :: FFix.Stream.t()
```

Shuffle video pixels.

## Options

  * mode - set shuffle mode (from 0 to 2) (default horizontal)
    - horizontal (0) 
    - vertical (1) 
    - block (2) 

  * m - set shuffle mode (from 0 to 2) (default horizontal)
    - horizontal (0) 
    - vertical (1) 
    - block (2) 

  * s - set random seed (from -1 to UINT32_MAX) (default -1)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * seed - set random seed (from -1 to UINT32_MAX) (default -1)
  * h - set block height (from 1 to 8000) (default 10)
  * width - set block width (from 1 to 8000) (default 10)
  * w - set block width (from 1 to 8000) (default 10)
  * d - set shuffle direction (from 0 to 1) (default forward)
    - forward (0) 
    - inverse (1) 

  * direction - set shuffle direction (from 0 to 1) (default forward)
    - forward (0) 
    - inverse (1) 

  * height - set block height (from 1 to 8000) (default 10)

# `shuffleplanes`

```elixir
@spec shuffleplanes(FFix.Stream.t(),
  enable: String.t(),
  map0: integer(),
  map1: integer(),
  map2: integer(),
  map3: integer()
) :: FFix.Stream.t()
```

Shuffle video planes.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * map0 - Index of the input plane to be used as the first output plane  (from 0 to 3) (default 0)
  * map1 - Index of the input plane to be used as the second output plane  (from 0 to 3) (default 1)
  * map2 - Index of the input plane to be used as the third output plane  (from 0 to 3) (default 2)
  * map3 - Index of the input plane to be used as the fourth output plane  (from 0 to 3) (default 3)

# `sidedata`

```elixir
@spec sidedata(FFix.Stream.t(),
  type: integer() | String.t() | atom(),
  mode: integer() | String.t() | atom(),
  enable: String.t()
) :: FFix.Stream.t()
```

Manipulate video frame side data.

## Options

  * type - set side data type (from -1 to INT_MAX) (default -1)
    - PANSCAN (0) 
    - A53_CC (1) 
    - STEREO3D (2) 
    - MATRIXENCODING (3) 
    - DOWNMIX_INFO (4) 
    - REPLAYGAIN (5) 
    - DISPLAYMATRIX (6) 
    - AFD (7) 
    - MOTION_VECTORS (8) 
    - SKIP_SAMPLES (9) 
    - AUDIO_SERVICE_TYPE 10
    - MASTERING_DISPLAY_METADATA 11
    - GOP_TIMECODE (12) 
    - SPHERICAL (13) 
    - CONTENT_LIGHT_LEVEL 14
    - ICC_PROFILE (15) 
    - S12M_TIMECOD (16) 
    - DYNAMIC_HDR_PLUS 17
    - REGIONS_OF_INTEREST 18
    - VIDEO_ENC_PARAMS 19
    - SEI_UNREGISTERED 20
    - FILM_GRAIN_PARAMS 21
    - DETECTION_BOUNDING_BOXES 22
    - DETECTION_BBOXES 22
    - DOVI_RPU_BUFFER 23
    - DOVI_METADATA (24) 
    - DYNAMIC_HDR_VIVID 25
    - AMBIENT_VIEWING_ENVIRONMENT 26
    - VIDEO_HINT (27) 

  * mode - set a mode of operation (from 0 to 1) (default select)
    - select (0)  - select frame
    - delete (1)  - delete side data

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero

# `signalstats`

```elixir
@spec signalstats(FFix.Stream.t(),
  out: integer() | String.t() | atom(),
  c: term(),
  stat: integer() | String.t() | atom() | [String.t() | atom()],
  color: term()
) :: FFix.Stream.t()
```

Generate statistics from video analysis.

## Options

  * out - set video filter (from -1 to 2) (default -1)
    - tout (0)  - highlight pixels that depict temporal outliers
    - vrep (1)  - highlight video lines that depict vertical line repetition
    - brng (2)  - highlight pixels that are outside of broadcast range

  * c - set highlight color (default "yellow")
  * stat - set statistics filters (default 0)
    - tout - analyze pixels for temporal outliers
    - vrep - analyze video lines for vertical line repetition
    - brng - analyze for pixels outside of broadcast range

  * color - set highlight color (default "yellow")

# `siti`

```elixir
@spec siti(
  FFix.Stream.t(),
  [{:print_summary, boolean()}]
) :: FFix.Stream.t()
```

Calculate spatial information (SI) and temporal information (TI).

## Options

  * print_summary - Print summary showing average values (default false)

# `smartblur`

```elixir
@spec smartblur(FFix.Stream.t(),
  cr: float(),
  at: integer(),
  lt: integer(),
  enable: String.t(),
  ls: float(),
  cs: float(),
  as: float(),
  luma_radius: float(),
  lr: float(),
  luma_strength: float(),
  chroma_radius: float(),
  chroma_strength: float(),
  alpha_threshold: integer(),
  luma_threshold: integer(),
  chroma_threshold: integer(),
  ct: integer(),
  alpha_radius: float(),
  ar: float(),
  alpha_strength: float()
) :: FFix.Stream.t()
```

Blur the input video without impacting the outlines.

## Options

  * cr - set chroma radius (from -0.9 to 5) (default -0.9)
  * at - set alpha threshold (from -31 to 30) (default -31)
  * lt - set luma threshold (from -30 to 30) (default 0)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * ls - set luma strength (from -1 to 1) (default 1)
  * cs - set chroma strength (from -2 to 1) (default -2)
  * as - set alpha strength (from -2 to 1) (default -2)
  * luma_radius - set luma radius (from 0.1 to 5) (default 1)
  * lr - set luma radius (from 0.1 to 5) (default 1)
  * luma_strength - set luma strength (from -1 to 1) (default 1)
  * chroma_radius - set chroma radius (from -0.9 to 5) (default -0.9)
  * chroma_strength - set chroma strength (from -2 to 1) (default -2)
  * alpha_threshold - set alpha threshold (from -31 to 30) (default -31)
  * luma_threshold - set luma threshold (from -30 to 30) (default 0)
  * chroma_threshold - set chroma threshold (from -31 to 30) (default -31)
  * ct - set chroma threshold (from -31 to 30) (default -31)
  * alpha_radius - set alpha radius (from -0.9 to 5) (default -0.9)
  * ar - set alpha radius (from -0.9 to 5) (default -0.9)
  * alpha_strength - set alpha strength (from -2 to 1) (default -2)

# `sobel`

```elixir
@spec sobel(FFix.Stream.t(),
  enable: String.t(),
  scale: float(),
  planes: integer(),
  delta: float()
) ::
  FFix.Stream.t()
```

Apply sobel operator.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * scale - set scale (from 0 to 65535) (default 1)
  * planes - set planes to filter (from 0 to 15) (default 15)
  * delta - set delta (from -65535 to 65535) (default 0)

# `sobel_opencl`

```elixir
@spec sobel_opencl(FFix.Stream.t(), scale: float(), planes: integer(), delta: float()) ::
  FFix.Stream.t()
```

Apply sobel operator

## Options

  * scale - set scale (from 0 to 65535) (default 1)
  * planes - set planes to filter (from 0 to 15) (default 15)
  * delta - set delta (from -65535 to 65535) (default 0)

# `spp`

```elixir
@spec spp(FFix.Stream.t(),
  mode: integer() | String.t() | atom(),
  enable: String.t(),
  qp: integer(),
  quality: integer(),
  use_bframe_qp: boolean()
) :: FFix.Stream.t()
```

Apply a simple post processing filter.

## Options

  * mode - set thresholding mode (from 0 to 1) (default hard)
    - hard (0)  - hard thresholding
    - soft (1)  - soft thresholding

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * qp - force a constant quantizer parameter (from 0 to 63) (default 0)
  * quality - set quality (from 0 to 6) (default 3)
  * use_bframe_qp - use B-frames' QP (default false)

# `ssim360`

```elixir
@spec ssim360(FFix.Stream.t(), FFix.Stream.t(),
  f: String.t(),
  shortest: boolean(),
  eof_action: integer() | String.t() | atom(),
  repeatlast: boolean(),
  ts_sync_mode: integer() | String.t() | atom(),
  stats_file: String.t(),
  compute_chroma: integer(),
  frame_skip_ratio: integer(),
  ref_projection: integer() | String.t() | atom(),
  main_projection: integer() | String.t() | atom(),
  ref_stereo: integer() | String.t() | atom(),
  main_stereo: integer() | String.t() | atom(),
  ref_pad: float(),
  main_pad: float(),
  use_tape: integer(),
  heatmap_str: String.t(),
  default_heatmap_width: integer(),
  default_heatmap_height: integer()
) :: FFix.Stream.t()
```

Calculate the SSIM between two 360 video streams.

## Options

  * f - Set file where to store per-frame difference information
  * shortest - force termination when the shortest input terminates (default false)
  * eof_action - Action to take when encountering EOF from secondary input  (from 0 to 2) (default repeat)
    - repeat (0)  - Repeat the previous frame.
    - endall (1)  - End both streams.
    - pass (2)  - Pass through the main input.

  * repeatlast - extend last frame of secondary streams beyond EOF (default true)
  * ts_sync_mode - How strictly to sync streams based on secondary input timestamps (from 0 to 1) (default default)
    - default (0)  - Frame from secondary input with the nearest lower or equal timestamp to the primary input frame
    - nearest (1)  - Frame from secondary input with the absolute nearest timestamp to the primary input frame

  * stats_file - Set file where to store per-frame difference information
  * compute_chroma - Specifies if non-luma channels must be computed (from 0 to 1) (default 1)
  * frame_skip_ratio - Specifies the number of frames to be skipped from evaluation, for every evaluated frame (from 0 to 1e+06) (default 0)
  * ref_projection - projection of the reference video (from 0 to 4) (default e)
    - e (4)  - equirectangular
    - equirect (4)  - equirectangular
    - c3x2 (0)  - cubemap 3x2
    - c2x3 (1)  - cubemap 2x3
    - barrel (2)  - barrel facebook's 360 format
    - barrelsplit (3)  - barrel split facebook's 360 format

  * main_projection - projection of the main video (from 0 to 5) (default 5)
    - e (4)  - equirectangular
    - equirect (4)  - equirectangular
    - c3x2 (0)  - cubemap 3x2
    - c2x3 (1)  - cubemap 2x3
    - barrel (2)  - barrel facebook's 360 format
    - barrelsplit (3)  - barrel split facebook's 360 format

  * ref_stereo - stereo format of the reference video (from 0 to 2) (default mono)
    - mono (2) 
    - tb (0) 
    - lr (1) 

  * main_stereo - stereo format of main video (from 0 to 3) (default 3)
    - mono (2) 
    - tb (0) 
    - lr (1) 

  * ref_pad - Expansion (padding) coefficient for each cube face of the reference video (from 0 to 10) (default 0)
  * main_pad - Expansion (padding) coeffiecient for each cube face of the main video (from 0 to 10) (default 0)
  * use_tape - Specifies if the tape based SSIM 360 algorithm must be used independent of the input video types (from 0 to 1) (default 0)
  * heatmap_str - Heatmap data for view-based evaluation. For heatmap file format, please refer to EntSphericalVideoHeatmapData.
  * default_heatmap_width - Default heatmap dimension. Will be used when dimension is not specified in heatmap data. (from 1 to 4096) (default 32)
  * default_heatmap_height - Default heatmap dimension. Will be used when dimension is not specified in heatmap data. (from 1 to 4096) (default 16)

# `ssim`

```elixir
@spec ssim(FFix.Stream.t(), FFix.Stream.t(),
  f: String.t(),
  enable: String.t(),
  shortest: boolean(),
  eof_action: integer() | String.t() | atom(),
  repeatlast: boolean(),
  ts_sync_mode: integer() | String.t() | atom(),
  stats_file: String.t()
) :: FFix.Stream.t()
```

Calculate the SSIM between two video streams.

## Options

  * f - Set file where to store per-frame difference information
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * shortest - force termination when the shortest input terminates (default false)
  * eof_action - Action to take when encountering EOF from secondary input  (from 0 to 2) (default repeat)
    - repeat (0)  - Repeat the previous frame.
    - endall (1)  - End both streams.
    - pass (2)  - Pass through the main input.

  * repeatlast - extend last frame of secondary streams beyond EOF (default true)
  * ts_sync_mode - How strictly to sync streams based on secondary input timestamps (from 0 to 1) (default default)
    - default (0)  - Frame from secondary input with the nearest lower or equal timestamp to the primary input frame
    - nearest (1)  - Frame from secondary input with the absolute nearest timestamp to the primary input frame

  * stats_file - Set file where to store per-frame difference information

# `stereo3d`

```elixir
@spec stereo3d(FFix.Stream.t(),
  in: integer() | String.t() | atom(),
  out: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Convert video stereoscopic 3D view.

## Options

  * in - set input format (from 16 to 32) (default sbsl)
    - ab2l (24)  - above below half height left first
    - tb2l (24)  - above below half height left first
    - ab2r (25)  - above below half height right first
    - tb2r (25)  - above below half height right first
    - abl (22)  - above below left first
    - tbl (22)  - above below left first
    - abr (23)  - above below right first
    - tbr (23)  - above below right first
    - al (26)  - alternating frames left first
    - ar (27)  - alternating frames right first
    - sbs2l (20)  - side by side half width left first
    - sbs2r (21)  - side by side half width right first
    - sbsl (18)  - side by side left first
    - sbsr (19)  - side by side right first
    - irl (16)  - interleave rows left first
    - irr (17)  - interleave rows right first
    - icl (30)  - interleave columns left first
    - icr (31)  - interleave columns right first

  * out - set output format (from 0 to 32) (default arcd)
    - ab2l (24)  - above below half height left first
    - tb2l (24)  - above below half height left first
    - ab2r (25)  - above below half height right first
    - tb2r (25)  - above below half height right first
    - abl (22)  - above below left first
    - tbl (22)  - above below left first
    - abr (23)  - above below right first
    - tbr (23)  - above below right first
    - agmc (6)  - anaglyph green magenta color
    - agmd (7)  - anaglyph green magenta dubois
    - agmg (4)  - anaglyph green magenta gray
    - agmh (5)  - anaglyph green magenta half color
    - al (26)  - alternating frames left first
    - ar (27)  - alternating frames right first
    - arbg (12)  - anaglyph red blue gray
    - arcc (2)  - anaglyph red cyan color
    - arcd (3)  - anaglyph red cyan dubois
    - arcg (0)  - anaglyph red cyan gray
    - arch (1)  - anaglyph red cyan half color
    - argg (13)  - anaglyph red green gray
    - aybc (10)  - anaglyph yellow blue color
    - aybd (11)  - anaglyph yellow blue dubois
    - aybg (8)  - anaglyph yellow blue gray
    - aybh (9)  - anaglyph yellow blue half color
    - irl (16)  - interleave rows left first
    - irr (17)  - interleave rows right first
    - ml (14)  - mono left
    - mr (15)  - mono right
    - sbs2l (20)  - side by side half width left first
    - sbs2r (21)  - side by side half width right first
    - sbsl (18)  - side by side left first
    - sbsr (19)  - side by side right first
    - chl (28)  - checkerboard left first
    - chr (29)  - checkerboard right first
    - icl (30)  - interleave columns left first
    - icr (31)  - interleave columns right first
    - hdmi (32)  - HDMI frame pack

# `subtitles`

```elixir
@spec subtitles(FFix.Stream.t(),
  filename: String.t(),
  f: String.t(),
  alpha: boolean(),
  stream_index: integer(),
  si: integer(),
  original_size: term(),
  fontsdir: String.t(),
  charenc: String.t(),
  force_style: String.t(),
  wrap_unicode: boolean()
) :: FFix.Stream.t()
```

Render text subtitles onto input video using the libass library.

## Options

  * filename - set the filename of file to read
  * f - set the filename of file to read
  * alpha - enable processing of alpha channel (default false)
  * stream_index - set stream index (from -1 to INT_MAX) (default -1)
  * si - set stream index (from -1 to INT_MAX) (default -1)
  * original_size - set the size of the original video (used to scale fonts)
  * fontsdir - set the directory containing the fonts to read
  * charenc - set input character encoding
  * force_style - force subtitle style
  * wrap_unicode - break lines according to the Unicode Line Breaking Algorithm (default auto)

# `super2xsai`

```elixir
@spec super2xsai(
  FFix.Stream.t(),
  []
) :: FFix.Stream.t()
```

Scale the input by 2x using the Super2xSaI pixel art algorithm.

## Options

# `swaprect`

```elixir
@spec swaprect(FFix.Stream.t(),
  enable: String.t(),
  h: String.t(),
  w: String.t(),
  x1: String.t(),
  x2: String.t(),
  y1: String.t(),
  y2: String.t()
) :: FFix.Stream.t()
```

Swap 2 rectangular objects in video.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * h - set rect height (default "h/2")
  * w - set rect width (default "w/2")
  * x1 - set 1st rect x top left coordinate (default "w/2")
  * x2 - set 2nd rect x top left coordinate (default "0")
  * y1 - set 1st rect y top left coordinate (default "h/2")
  * y2 - set 2nd rect y top left coordinate (default "0")

# `swapuv`

```elixir
@spec swapuv(
  FFix.Stream.t(),
  [{:enable, String.t()}]
) :: FFix.Stream.t()
```

Swap U and V components.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero

# `tblend`

```elixir
@spec tblend(FFix.Stream.t(),
  enable: String.t(),
  c0_mode: integer() | String.t() | atom(),
  c1_mode: integer() | String.t() | atom(),
  c2_mode: integer() | String.t() | atom(),
  c3_mode: integer() | String.t() | atom(),
  all_mode: integer() | String.t() | atom(),
  c0_opacity: float(),
  c1_opacity: float(),
  c2_opacity: float(),
  c3_opacity: float(),
  all_opacity: float(),
  c0_expr: String.t(),
  c1_expr: String.t(),
  c2_expr: String.t(),
  c3_expr: String.t(),
  all_expr: String.t()
) :: FFix.Stream.t()
```

Blend successive frames.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * c0_mode - set component #0 blend mode (from 0 to 39) (default normal)
    - addition (1) 
    - addition128 (28) 
    - grainmerge (28) 
    - and (2) 
    - average (3) 
    - burn (4) 
    - darken (5) 
    - difference (6) 
    - difference128 (7) 
    - grainextract (7) 
    - divide (8) 
    - dodge (9) 
    - exclusion (10) 
    - extremity (32) 
    - freeze (31) 
    - glow (27) 
    - hardlight (11) 
    - hardmix (25) 
    - heat (30) 
    - lighten (12) 
    - linearlight (26) 
    - multiply (13) 
    - multiply128 (29) 
    - negation (14) 
    - normal (0) 
    - or (15) 
    - overlay (16) 
    - phoenix (17) 
    - pinlight (18) 
    - reflect (19) 
    - screen (20) 
    - softlight (21) 
    - subtract (22) 
    - vividlight (23) 
    - xor (24) 
    - softdifference (33) 
    - geometric (34) 
    - harmonic (35) 
    - bleach (36) 
    - stain (37) 
    - interpolate (38) 
    - hardoverlay (39) 

  * c1_mode - set component #1 blend mode (from 0 to 39) (default normal)
    - addition (1) 
    - addition128 (28) 
    - grainmerge (28) 
    - and (2) 
    - average (3) 
    - burn (4) 
    - darken (5) 
    - difference (6) 
    - difference128 (7) 
    - grainextract (7) 
    - divide (8) 
    - dodge (9) 
    - exclusion (10) 
    - extremity (32) 
    - freeze (31) 
    - glow (27) 
    - hardlight (11) 
    - hardmix (25) 
    - heat (30) 
    - lighten (12) 
    - linearlight (26) 
    - multiply (13) 
    - multiply128 (29) 
    - negation (14) 
    - normal (0) 
    - or (15) 
    - overlay (16) 
    - phoenix (17) 
    - pinlight (18) 
    - reflect (19) 
    - screen (20) 
    - softlight (21) 
    - subtract (22) 
    - vividlight (23) 
    - xor (24) 
    - softdifference (33) 
    - geometric (34) 
    - harmonic (35) 
    - bleach (36) 
    - stain (37) 
    - interpolate (38) 
    - hardoverlay (39) 

  * c2_mode - set component #2 blend mode (from 0 to 39) (default normal)
    - addition (1) 
    - addition128 (28) 
    - grainmerge (28) 
    - and (2) 
    - average (3) 
    - burn (4) 
    - darken (5) 
    - difference (6) 
    - difference128 (7) 
    - grainextract (7) 
    - divide (8) 
    - dodge (9) 
    - exclusion (10) 
    - extremity (32) 
    - freeze (31) 
    - glow (27) 
    - hardlight (11) 
    - hardmix (25) 
    - heat (30) 
    - lighten (12) 
    - linearlight (26) 
    - multiply (13) 
    - multiply128 (29) 
    - negation (14) 
    - normal (0) 
    - or (15) 
    - overlay (16) 
    - phoenix (17) 
    - pinlight (18) 
    - reflect (19) 
    - screen (20) 
    - softlight (21) 
    - subtract (22) 
    - vividlight (23) 
    - xor (24) 
    - softdifference (33) 
    - geometric (34) 
    - harmonic (35) 
    - bleach (36) 
    - stain (37) 
    - interpolate (38) 
    - hardoverlay (39) 

  * c3_mode - set component #3 blend mode (from 0 to 39) (default normal)
    - addition (1) 
    - addition128 (28) 
    - grainmerge (28) 
    - and (2) 
    - average (3) 
    - burn (4) 
    - darken (5) 
    - difference (6) 
    - difference128 (7) 
    - grainextract (7) 
    - divide (8) 
    - dodge (9) 
    - exclusion (10) 
    - extremity (32) 
    - freeze (31) 
    - glow (27) 
    - hardlight (11) 
    - hardmix (25) 
    - heat (30) 
    - lighten (12) 
    - linearlight (26) 
    - multiply (13) 
    - multiply128 (29) 
    - negation (14) 
    - normal (0) 
    - or (15) 
    - overlay (16) 
    - phoenix (17) 
    - pinlight (18) 
    - reflect (19) 
    - screen (20) 
    - softlight (21) 
    - subtract (22) 
    - vividlight (23) 
    - xor (24) 
    - softdifference (33) 
    - geometric (34) 
    - harmonic (35) 
    - bleach (36) 
    - stain (37) 
    - interpolate (38) 
    - hardoverlay (39) 

  * all_mode - set blend mode for all components (from -1 to 39) (default -1)
    - addition (1) 
    - addition128 (28) 
    - grainmerge (28) 
    - and (2) 
    - average (3) 
    - burn (4) 
    - darken (5) 
    - difference (6) 
    - difference128 (7) 
    - grainextract (7) 
    - divide (8) 
    - dodge (9) 
    - exclusion (10) 
    - extremity (32) 
    - freeze (31) 
    - glow (27) 
    - hardlight (11) 
    - hardmix (25) 
    - heat (30) 
    - lighten (12) 
    - linearlight (26) 
    - multiply (13) 
    - multiply128 (29) 
    - negation (14) 
    - normal (0) 
    - or (15) 
    - overlay (16) 
    - phoenix (17) 
    - pinlight (18) 
    - reflect (19) 
    - screen (20) 
    - softlight (21) 
    - subtract (22) 
    - vividlight (23) 
    - xor (24) 
    - softdifference (33) 
    - geometric (34) 
    - harmonic (35) 
    - bleach (36) 
    - stain (37) 
    - interpolate (38) 
    - hardoverlay (39) 

  * c0_opacity - set color component #0 opacity (from 0 to 1) (default 1)
  * c1_opacity - set color component #1 opacity (from 0 to 1) (default 1)
  * c2_opacity - set color component #2 opacity (from 0 to 1) (default 1)
  * c3_opacity - set color component #3 opacity (from 0 to 1) (default 1)
  * all_opacity - set opacity for all color components (from 0 to 1) (default 1)
  * c0_expr - set color component #0 expression
  * c1_expr - set color component #1 expression
  * c2_expr - set color component #2 expression
  * c3_expr - set color component #3 expression
  * all_expr - set expression for all color components

# `telecine`

```elixir
@spec telecine(FFix.Stream.t(),
  pattern: String.t(),
  first_field: integer() | String.t() | atom()
) ::
  FFix.Stream.t()
```

Apply a telecine pattern.

## Options

  * pattern - pattern that describe for how many fields a frame is to be displayed (default "23")
  * first_field - select first field (from 0 to 1) (default top)
    - top (0)  - select top field first
    - t (0)  - select top field first
    - bottom (1)  - select bottom field first
    - b (1)  - select bottom field first

# `thistogram`

```elixir
@spec thistogram(FFix.Stream.t(),
  c: integer(),
  m: integer() | String.t() | atom(),
  b: float(),
  width: integer(),
  w: integer(),
  d: integer() | String.t() | atom(),
  slide: integer() | String.t() | atom(),
  components: integer(),
  e: boolean(),
  envelope: boolean(),
  bgopacity: float(),
  display_mode: integer() | String.t() | atom(),
  levels_mode: integer() | String.t() | atom(),
  ecolor: term(),
  ec: term()
) :: FFix.Stream.t()
```

Compute and draw a temporal histogram.

## Options

  * c - set color components to display (from 1 to 15) (default 7)
  * m - set levels mode (from 0 to 1) (default linear)
    - linear (0) 
    - logarithmic (1) 

  * b - set background opacity (from 0 to 1) (default 0.9)
  * width - set width (from 0 to 8192) (default 0)
  * w - set width (from 0 to 8192) (default 0)
  * d - set display mode (from 0 to 2) (default stack)
    - overlay (0) 
    - parade (1) 
    - stack (2) 

  * slide - set slide mode (from 0 to 4) (default replace)
    - frame (0)  - draw new frames
    - replace (1)  - replace old columns with new
    - scroll (2)  - scroll from right to left
    - rscroll (3)  - scroll from left to right
    - picture (4)  - display graph in single frame

  * components - set color components to display (from 1 to 15) (default 7)
  * e - display envelope (default false)
  * envelope - display envelope (default false)
  * bgopacity - set background opacity (from 0 to 1) (default 0.9)
  * display_mode - set display mode (from 0 to 2) (default stack)
    - overlay (0) 
    - parade (1) 
    - stack (2) 

  * levels_mode - set levels mode (from 0 to 1) (default linear)
    - linear (0) 
    - logarithmic (1) 

  * ecolor - set envelope color (default "gold")
  * ec - set envelope color (default "gold")

# `threshold`

```elixir
@spec threshold(FFix.Stream.t(), FFix.Stream.t(), FFix.Stream.t(), FFix.Stream.t(),
  enable: String.t(),
  planes: integer()
) :: FFix.Stream.t()
```

Threshold first video stream using other video streams.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * planes - set planes to filter (from 0 to 15) (default 15)

# `thumbnail`

```elixir
@spec thumbnail(FFix.Stream.t(),
  log: integer() | String.t() | atom(),
  enable: String.t(),
  n: integer()
) ::
  FFix.Stream.t()
```

Select the most representative frame in a given sequence of consecutive frames.

## Options

  * log - force stats logging level (from INT_MIN to INT_MAX) (default info)
    - quiet (-8)  - logging disabled
    - info (32)  - information logging level
    - verbose (40)  - verbose logging level

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * n - set the frames batch size (from 2 to INT_MAX) (default 100)

# `tile`

```elixir
@spec tile(FFix.Stream.t(),
  padding: integer(),
  color: term(),
  overlap: integer(),
  layout: term(),
  nb_frames: integer(),
  margin: integer(),
  init_padding: integer()
) :: FFix.Stream.t()
```

Tile several successive frames together.

## Options

  * padding - set inner border thickness in pixels (from 0 to 1024) (default 0)
  * color - set the color of the unused area (default "black")
  * overlap - set how many frames to overlap for each render (from 0 to INT_MAX) (default 0)
  * layout - set grid size (default "6x5")
  * nb_frames - set maximum number of frame to render (from 0 to INT_MAX) (default 0)
  * margin - set outer border margin in pixels (from 0 to 1024) (default 0)
  * init_padding - set how many frames to initially pad (from 0 to INT_MAX) (default 0)

# `tiltandshift`

```elixir
@spec tiltandshift(FFix.Stream.t(),
  &quot;-tilt&quot;: integer(),
  &quot;-start&quot;: integer() | String.t() | atom(),
  &quot;-end&quot;: integer() | String.t() | atom(),
  &quot;-hold&quot;: integer(),
  &quot;-pad&quot;: integer()
) :: FFix.Stream.t()
```

Generate a tilt-and-shift'd video.

## Options

  * -tilt - Tilt the video horizontally while shifting (from 0 to 1) (default 1)
  * -start - Action at the start of input (from 0 to 3) (default none)
    - none (0)  - Start immediately (default)
    - frame (1)  - Use the first frames
    - black (2)  - Fill with black

  * -end - Action at the end of input (from 0 to 3) (default none)
    - none (0)  - Do not pad at the end (default)
    - frame (1)  - Use the last frame
    - black (2)  - Fill with black

  * -hold - Number of columns to hold at the start of the video (from 0 to INT_MAX) (default 0)
  * -pad - Number of columns to pad at the end of the video (from 0 to INT_MAX) (default 0)

# `tinterlace`

```elixir
@spec tinterlace(
  FFix.Stream.t(),
  [{:mode, integer() | String.t() | atom()}]
) :: FFix.Stream.t()
```

Perform temporal field interlacing.

## Options

  * mode - select interlace mode (from 0 to 7) (default merge)
    - merge (0)  - merge fields
    - drop_even (1)  - drop even fields
    - drop_odd (2)  - drop odd fields
    - pad (3)  - pad alternate lines with black
    - interleave_top (4)  - interleave top and bottom fields
    - interleave_bottom 5 - interleave bottom and top fields
    - interlacex2 (6)  - interlace fields from two consecutive frames
    - mergex2 (7)  - merge fields keeping same frame rate

# `tlut2`

```elixir
@spec tlut2(FFix.Stream.t(),
  enable: String.t(),
  c1: String.t(),
  c2: String.t(),
  c0: String.t(),
  c3: String.t()
) :: FFix.Stream.t()
```

Compute and apply a lookup table from two successive frames.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * c1 - set component #1 expression (default "x")
  * c2 - set component #2 expression (default "x")
  * c0 - set component #0 expression (default "x")
  * c3 - set component #3 expression (default "x")

# `tmedian`

```elixir
@spec tmedian(FFix.Stream.t(),
  enable: String.t(),
  planes: integer(),
  radius: integer(),
  percentile: float()
) :: FFix.Stream.t()
```

Pick median pixels from successive frames.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * planes - set planes to filter (from 0 to 15) (default 15)
  * radius - set median filter radius (from 1 to 127) (default 1)
  * percentile - set percentile (from 0 to 1) (default 0.5)

# `tmidequalizer`

```elixir
@spec tmidequalizer(FFix.Stream.t(),
  enable: String.t(),
  planes: integer(),
  radius: integer(),
  sigma: float()
) :: FFix.Stream.t()
```

Apply Temporal Midway Equalization.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * planes - set planes (from 0 to 15) (default 15)
  * radius - set radius (from 1 to 127) (default 5)
  * sigma - set sigma (from 0 to 1) (default 0.5)

# `tmix`

```elixir
@spec tmix(FFix.Stream.t(),
  enable: String.t(),
  scale: float(),
  weights: String.t(),
  planes: term(),
  frames: integer()
) :: FFix.Stream.t()
```

Mix successive video frames.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * scale - set scale (from 0 to 32767) (default 0)
  * weights - set weight for each frame (default "1 1 1")
  * planes - set what planes to filter (default F)
  * frames - set number of successive frames to mix (from 1 to 1024) (default 3)

# `tonemap`

```elixir
@spec tonemap(FFix.Stream.t(),
  tonemap: integer() | String.t() | atom(),
  param: float(),
  peak: float(),
  desat: float()
) :: FFix.Stream.t()
```

Conversion to/from different dynamic ranges.

## Options

  * tonemap - tonemap algorithm selection (from 0 to 6) (default none)
    - none (0) 
    - linear (1) 
    - gamma (2) 
    - clip (3) 
    - reinhard (4) 
    - hable (5) 
    - mobius (6) 

  * param - tonemap parameter (from DBL_MIN to DBL_MAX) (default nan)
  * peak - signal peak override (from 0 to DBL_MAX) (default 0)
  * desat - desaturation strength (from 0 to DBL_MAX) (default 2)

# `tonemap_opencl`

```elixir
@spec tonemap_opencl(FFix.Stream.t(),
  format: term(),
  p: integer() | String.t() | atom(),
  range: integer() | String.t() | atom(),
  m: integer() | String.t() | atom(),
  r: integer() | String.t() | atom(),
  threshold: float(),
  t: integer() | String.t() | atom(),
  tonemap: integer() | String.t() | atom(),
  param: float(),
  peak: float(),
  transfer: integer() | String.t() | atom(),
  matrix: integer() | String.t() | atom(),
  primaries: integer() | String.t() | atom(),
  desat: float()
) :: FFix.Stream.t()
```

Perform HDR to SDR conversion with tonemapping.

## Options

  * format - output pixel format (default none)
  * p - set color primaries (from -1 to INT_MAX) (default -1)
    - bt709 (1) 
    - bt2020 (9) 

  * range - set color range (from -1 to INT_MAX) (default -1)
    - tv (1) 
    - pc (2) 
    - limited (1) 
    - full (2) 

  * m - set colorspace matrix (from -1 to INT_MAX) (default -1)
    - bt709 (1) 
    - bt2020 (9) 

  * r - set color range (from -1 to INT_MAX) (default -1)
    - tv (1) 
    - pc (2) 
    - limited (1) 
    - full (2) 

  * threshold - scene detection threshold (from 0 to DBL_MAX) (default 0.2)
  * t - set transfer characteristic (from -1 to INT_MAX) (default bt709)
    - bt709 (1) 
    - bt2020 (14) 

  * tonemap - tonemap algorithm selection (from 0 to 6) (default none)
    - none (0) 
    - linear (1) 
    - gamma (2) 
    - clip (3) 
    - reinhard (4) 
    - hable (5) 
    - mobius (6) 

  * param - tonemap parameter (from DBL_MIN to DBL_MAX) (default nan)
  * peak - signal peak override (from 0 to DBL_MAX) (default 0)
  * transfer - set transfer characteristic (from -1 to INT_MAX) (default bt709)
    - bt709 (1) 
    - bt2020 (14) 

  * matrix - set colorspace matrix (from -1 to INT_MAX) (default -1)
    - bt709 (1) 
    - bt2020 (9) 

  * primaries - set color primaries (from -1 to INT_MAX) (default -1)
    - bt709 (1) 
    - bt2020 (9) 

  * desat - desaturation parameter (from 0 to DBL_MAX) (default 0.5)

# `tonemap_vaapi`

```elixir
@spec tonemap_vaapi(FFix.Stream.t(),
  display: String.t(),
  format: String.t(),
  p: String.t(),
  m: String.t(),
  t: String.t(),
  transfer: String.t(),
  matrix: String.t(),
  primaries: String.t(),
  light: String.t()
) :: FFix.Stream.t()
```

VAAPI VPP for tone-mapping

## Options

  * display - set mastering display colour volume
  * format - Output pixel format set
  * p - Output color primaries set
  * m - Output color matrix coefficient set
  * t - Output color transfer characteristics set
  * transfer - Output color transfer characteristics set
  * matrix - Output color matrix coefficient set
  * primaries - Output color primaries set
  * light - set content light level information

# `tpad`

```elixir
@spec tpad(FFix.Stream.t(),
  start: integer(),
  stop: integer(),
  color: term(),
  start_mode: integer() | String.t() | atom(),
  stop_mode: integer() | String.t() | atom(),
  start_duration: term(),
  stop_duration: term()
) :: FFix.Stream.t()
```

Temporarily pad video frames.

## Options

  * start - set the number of frames to delay input (from 0 to INT_MAX) (default 0)
  * stop - set the number of frames to add after input finished (from -1 to INT_MAX) (default 0)
  * color - set the color of the added frames (default "black")
  * start_mode - set the mode of added frames to start (from 0 to 1) (default add)
    - add (0)  - add solid-color frames
    - clone (1)  - clone first/last frame

  * stop_mode - set the mode of added frames to end (from 0 to 1) (default add)
    - add (0)  - add solid-color frames
    - clone (1)  - clone first/last frame

  * start_duration - set the duration to delay input (default 0)
  * stop_duration - set the duration to pad input (default 0)

# `transpose`

```elixir
@spec transpose(FFix.Stream.t(),
  dir: integer() | String.t() | atom(),
  passthrough: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Transpose input video.

## Options

  * dir - set transpose direction (from 0 to 7) (default cclock_flip)
    - cclock_flip (0)  - rotate counter-clockwise with vertical flip
    - clock (1)  - rotate clockwise
    - cclock (2)  - rotate counter-clockwise
    - clock_flip (3)  - rotate clockwise with vertical flip

  * passthrough - do not apply transposition if the input matches the specified geometry (from 0 to INT_MAX) (default none)
    - none (0)  - always apply transposition
    - portrait (2)  - preserve portrait geometry
    - landscape (1)  - preserve landscape geometry

# `transpose_opencl`

```elixir
@spec transpose_opencl(FFix.Stream.t(),
  dir: integer() | String.t() | atom(),
  passthrough: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Transpose input video

## Options

  * dir - set transpose direction (from 0 to 3) (default cclock_flip)
    - cclock_flip (0)  - rotate counter-clockwise with vertical flip
    - clock (1)  - rotate clockwise
    - cclock (2)  - rotate counter-clockwise
    - clock_flip (3)  - rotate clockwise with vertical flip

  * passthrough - do not apply transposition if the input matches the specified geometry (from 0 to INT_MAX) (default none)
    - none (0)  - always apply transposition
    - portrait (2)  - preserve portrait geometry
    - landscape (1)  - preserve landscape geometry

# `transpose_vaapi`

```elixir
@spec transpose_vaapi(FFix.Stream.t(),
  dir: integer() | String.t() | atom(),
  passthrough: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

VAAPI VPP for transpose

## Options

  * dir - set transpose direction (from 0 to 6) (default cclock_flip)
    - cclock_flip (0)  - rotate counter-clockwise with vertical flip
    - clock (1)  - rotate clockwise
    - cclock (2)  - rotate counter-clockwise
    - clock_flip (3)  - rotate clockwise with vertical flip
    - reversal (4)  - rotate by half-turn
    - hflip (5)  - flip horizontally
    - vflip (6)  - flip vertically

  * passthrough - do not apply transposition if the input matches the specified geometry (from 0 to INT_MAX) (default none)
    - none (0)  - always apply transposition
    - portrait (2)  - preserve portrait geometry
    - landscape (1)  - preserve landscape geometry

# `transpose_vulkan`

```elixir
@spec transpose_vulkan(FFix.Stream.t(),
  dir: integer() | String.t() | atom(),
  passthrough: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Transpose Vulkan Filter

## Options

  * dir - set transpose direction (from 0 to 7) (default cclock_flip)
    - cclock_flip (0)  - rotate counter-clockwise with vertical flip
    - clock (1)  - rotate clockwise
    - cclock (2)  - rotate counter-clockwise
    - clock_flip (3)  - rotate clockwise with vertical flip

  * passthrough - do not apply transposition if the input matches the specified geometry (from 0 to INT_MAX) (default none)
    - none (0)  - always apply transposition
    - portrait (2)  - preserve portrait geometry
    - landscape (1)  - preserve landscape geometry

# `trim`

```elixir
@spec trim(FFix.Stream.t(),
  start: term(),
  end: term(),
  duration: term(),
  starti: term(),
  endi: term(),
  start_pts: integer(),
  end_pts: integer(),
  durationi: term(),
  start_frame: integer(),
  end_frame: integer()
) :: FFix.Stream.t()
```

Pick one continuous section from the input, drop the rest.

## Options

  * start - Timestamp of the first frame that should be passed (default INT64_MAX)
  * end - Timestamp of the first frame that should be dropped again (default INT64_MAX)
  * duration - Maximum duration of the output (default 0)
  * starti - Timestamp of the first frame that should be passed (default INT64_MAX)
  * endi - Timestamp of the first frame that should be dropped again (default INT64_MAX)
  * start_pts - Timestamp of the first frame that should be  passed (from I64_MIN to I64_MAX) (default I64_MIN)
  * end_pts - Timestamp of the first frame that should be dropped again (from I64_MIN to I64_MAX) (default I64_MIN)
  * durationi - Maximum duration of the output (default 0)
  * start_frame - Number of the first frame that should be passed to the output (from -1 to I64_MAX) (default -1)
  * end_frame - Number of the first frame that should be dropped again (from 0 to I64_MAX) (default I64_MAX)

# `unsharp`

```elixir
@spec unsharp(FFix.Stream.t(),
  enable: String.t(),
  aa: float(),
  luma_msize_x: integer(),
  lx: integer(),
  luma_msize_y: integer(),
  ly: integer(),
  luma_amount: float(),
  la: float(),
  chroma_msize_x: integer(),
  cx: integer(),
  chroma_msize_y: integer(),
  cy: integer(),
  chroma_amount: float(),
  ca: float(),
  alpha_msize_x: integer(),
  ax: integer(),
  alpha_msize_y: integer(),
  ay: integer(),
  alpha_amount: float()
) :: FFix.Stream.t()
```

Sharpen or blur the input video.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * aa - set alpha effect strength (from -2 to 5) (default 0)
  * luma_msize_x - set luma matrix horizontal size (from 3 to 23) (default 5)
  * lx - set luma matrix horizontal size (from 3 to 23) (default 5)
  * luma_msize_y - set luma matrix vertical size (from 3 to 23) (default 5)
  * ly - set luma matrix vertical size (from 3 to 23) (default 5)
  * luma_amount - set luma effect strength (from -2 to 5) (default 1)
  * la - set luma effect strength (from -2 to 5) (default 1)
  * chroma_msize_x - set chroma matrix horizontal size (from 3 to 23) (default 5)
  * cx - set chroma matrix horizontal size (from 3 to 23) (default 5)
  * chroma_msize_y - set chroma matrix vertical size (from 3 to 23) (default 5)
  * cy - set chroma matrix vertical size (from 3 to 23) (default 5)
  * chroma_amount - set chroma effect strength (from -2 to 5) (default 0)
  * ca - set chroma effect strength (from -2 to 5) (default 0)
  * alpha_msize_x - set alpha matrix horizontal size (from 3 to 23) (default 5)
  * ax - set alpha matrix horizontal size (from 3 to 23) (default 5)
  * alpha_msize_y - set alpha matrix vertical size (from 3 to 23) (default 5)
  * ay - set alpha matrix vertical size (from 3 to 23) (default 5)
  * alpha_amount - set alpha effect strength (from -2 to 5) (default 0)

# `unsharp_opencl`

```elixir
@spec unsharp_opencl(FFix.Stream.t(),
  luma_msize_x: float(),
  lx: float(),
  luma_msize_y: float(),
  ly: float(),
  luma_amount: float(),
  la: float(),
  chroma_msize_x: float(),
  cx: float(),
  chroma_msize_y: float(),
  cy: float(),
  chroma_amount: float(),
  ca: float()
) :: FFix.Stream.t()
```

Apply unsharp mask to input video

## Options

  * luma_msize_x - Set luma mask horizontal diameter (pixels) (from 1 to 23) (default 5)
  * lx - Set luma mask horizontal diameter (pixels) (from 1 to 23) (default 5)
  * luma_msize_y - Set luma mask vertical diameter (pixels) (from 1 to 23) (default 5)
  * ly - Set luma mask vertical diameter (pixels) (from 1 to 23) (default 5)
  * luma_amount - Set luma amount (multiplier) (from -10 to 10) (default 1)
  * la - Set luma amount (multiplier) (from -10 to 10) (default 1)
  * chroma_msize_x - Set chroma mask horizontal diameter (pixels after subsampling) (from 1 to 23) (default 5)
  * cx - Set chroma mask horizontal diameter (pixels after subsampling) (from 1 to 23) (default 5)
  * chroma_msize_y - Set chroma mask vertical diameter (pixels after subsampling) (from 1 to 23) (default 5)
  * cy - Set chroma mask vertical diameter (pixels after subsampling) (from 1 to 23) (default 5)
  * chroma_amount - Set chroma amount (multiplier) (from -10 to 10) (default 0)
  * ca - Set chroma amount (multiplier) (from -10 to 10) (default 0)

# `untile`

```elixir
@spec untile(
  FFix.Stream.t(),
  [{:layout, term()}]
) :: FFix.Stream.t()
```

Untile a frame into a sequence of frames.

## Options

  * layout - set grid size (default "6x5")

# `uspp`

```elixir
@spec uspp(FFix.Stream.t(),
  enable: String.t(),
  qp: integer(),
  quality: integer(),
  use_bframe_qp: boolean(),
  codec: String.t()
) :: FFix.Stream.t()
```

Apply Ultra Simple / Slow Post-processing filter.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * qp - force a constant quantizer parameter (from 0 to 63) (default 0)
  * quality - set quality (from 0 to 8) (default 3)
  * use_bframe_qp - use B-frames' QP (default false)
  * codec - Codec name (default "snow")

# `v360`

```elixir
@spec v360(FFix.Stream.t(),
  w: integer(),
  yaw: float(),
  out_forder: String.t(),
  v_fov: float(),
  h: integer(),
  pitch: float(),
  input: integer() | String.t() | atom(),
  in_stereo: integer() | String.t() | atom(),
  v_flip: boolean(),
  out_stereo: integer() | String.t() | atom(),
  out_trans: boolean(),
  in_pad: float(),
  in_frot: String.t(),
  h_fov: float(),
  reset_rot: boolean(),
  in_forder: String.t(),
  rorder: String.t(),
  in_trans: boolean(),
  h_flip: boolean(),
  out_frot: String.t(),
  ih_fov: float(),
  d_flip: boolean(),
  d_fov: float(),
  output: integer() | String.t() | atom(),
  out_pad: float(),
  id_fov: float(),
  ih_flip: boolean(),
  iv_flip: boolean(),
  roll: float(),
  interp: integer() | String.t() | atom(),
  alpha_mask: boolean(),
  v_offset: float(),
  fout_pad: integer(),
  iv_fov: float(),
  h_offset: float(),
  fin_pad: integer()
) :: FFix.Stream.t()
```

Convert 360 projection of video.

## Options

  * w - output width (from 0 to 32767) (default 0)
  * yaw - yaw rotation (from -180 to 180) (default 0)
  * out_forder - output cubemap face order (default "rludfb")
  * v_fov - output vertical field of view (from 0 to 360) (default 0)
  * h - output height (from 0 to 32767) (default 0)
  * pitch - pitch rotation (from -180 to 180) (default 0)
  * input - set input projection (from 0 to 24) (default e)
    - e (0)  - equirectangular
    - equirect (0)  - equirectangular
    - c3x2 (1)  - cubemap 3x2
    - c6x1 (2)  - cubemap 6x1
    - eac (3)  - equi-angular cubemap
    - dfisheye (5)  - dual fisheye
    - flat (4)  - regular video
    - rectilinear (4)  - regular video
    - gnomonic (4)  - regular video
    - barrel (6)  - barrel facebook's 360 format
    - fb (6)  - barrel facebook's 360 format
    - c1x6 (7)  - cubemap 1x6
    - sg (8)  - stereographic
    - mercator (9)  - mercator
    - ball (10)  - ball
    - hammer (11)  - hammer
    - sinusoidal (12)  - sinusoidal
    - fisheye (13)  - fisheye
    - pannini (14)  - pannini
    - cylindrical (15)  - cylindrical
    - tetrahedron (17)  - tetrahedron
    - barrelsplit (18)  - barrel split facebook's 360 format
    - tsp (19)  - truncated square pyramid
    - hequirect (20)  - half equirectangular
    - he (20)  - half equirectangular
    - equisolid (21)  - equisolid
    - og (22)  - orthographic
    - octahedron (23)  - octahedron
    - cylindricalea (24)  - cylindrical equal area

  * in_stereo - input stereo format (from 0 to 2) (default 2d)
    - 2d (0)  - 2d mono
    - sbs (1)  - side by side
    - tb (2)  - top bottom

  * v_flip - flip out video vertically (default false)
  * out_stereo - output stereo format (from 0 to 2) (default 2d)
    - 2d (0)  - 2d mono
    - sbs (1)  - side by side
    - tb (2)  - top bottom

  * out_trans - transpose video output (default false)
  * in_pad - percent input cubemap pads (from 0 to 0.1) (default 0)
  * in_frot - input cubemap face rotation (default "000000")
  * h_fov - output horizontal field of view (from 0 to 360) (default 0)
  * reset_rot - reset rotation (default false)
  * in_forder - input cubemap face order (default "rludfb")
  * rorder - rotation order (default "ypr")
  * in_trans - transpose video input (default false)
  * h_flip - flip out video horizontally (default false)
  * out_frot - output cubemap face rotation (default "000000")
  * ih_fov - input horizontal field of view (from 0 to 360) (default 0)
  * d_flip - flip out video indepth (default false)
  * d_fov - output diagonal field of view (from 0 to 360) (default 0)
  * output - set output projection (from 0 to 24) (default c3x2)
    - e (0)  - equirectangular
    - equirect (0)  - equirectangular
    - c3x2 (1)  - cubemap 3x2
    - c6x1 (2)  - cubemap 6x1
    - eac (3)  - equi-angular cubemap
    - dfisheye (5)  - dual fisheye
    - flat (4)  - regular video
    - rectilinear (4)  - regular video
    - gnomonic (4)  - regular video
    - barrel (6)  - barrel facebook's 360 format
    - fb (6)  - barrel facebook's 360 format
    - c1x6 (7)  - cubemap 1x6
    - sg (8)  - stereographic
    - mercator (9)  - mercator
    - ball (10)  - ball
    - hammer (11)  - hammer
    - sinusoidal (12)  - sinusoidal
    - fisheye (13)  - fisheye
    - pannini (14)  - pannini
    - cylindrical (15)  - cylindrical
    - perspective (16)  - perspective
    - tetrahedron (17)  - tetrahedron
    - barrelsplit (18)  - barrel split facebook's 360 format
    - tsp (19)  - truncated square pyramid
    - hequirect (20)  - half equirectangular
    - he (20)  - half equirectangular
    - equisolid (21)  - equisolid
    - og (22)  - orthographic
    - octahedron (23)  - octahedron
    - cylindricalea (24)  - cylindrical equal area

  * out_pad - percent output cubemap pads (from 0 to 0.1) (default 0)
  * id_fov - input diagonal field of view (from 0 to 360) (default 0)
  * ih_flip - flip in video horizontally (default false)
  * iv_flip - flip in video vertically (default false)
  * roll - roll rotation (from -180 to 180) (default 0)
  * interp - set interpolation method (from 0 to 7) (default line)
    - near (0)  - nearest neighbour
    - nearest (0)  - nearest neighbour
    - line (1)  - bilinear interpolation
    - linear (1)  - bilinear interpolation
    - lagrange9 (2)  - lagrange9 interpolation
    - cube (3)  - bicubic interpolation
    - cubic (3)  - bicubic interpolation
    - lanc (4)  - lanczos interpolation
    - lanczos (4)  - lanczos interpolation
    - sp16 (5)  - spline16 interpolation
    - spline16 (5)  - spline16 interpolation
    - gauss (6)  - gaussian interpolation
    - gaussian (6)  - gaussian interpolation
    - mitchell (7)  - mitchell interpolation

  * alpha_mask - build mask in alpha plane (default false)
  * v_offset - output vertical off-axis offset (from -1 to 1) (default 0)
  * fout_pad - fixed output cubemap pads (from 0 to 100) (default 0)
  * iv_fov - input vertical field of view (from 0 to 360) (default 0)
  * h_offset - output horizontal off-axis offset (from -1 to 1) (default 0)
  * fin_pad - fixed input cubemap pads (from 0 to 100) (default 0)

# `vaguedenoiser`

```elixir
@spec vaguedenoiser(FFix.Stream.t(),
  type: integer() | String.t() | atom(),
  enable: String.t(),
  threshold: float(),
  planes: integer(),
  method: integer() | String.t() | atom(),
  percent: float(),
  nsteps: integer()
) :: FFix.Stream.t()
```

Apply a Wavelet based Denoiser.

## Options

  * type - set threshold type (from 0 to 1) (default universal)
    - universal (0)  - universal (VisuShrink)
    - bayes (1)  - bayes (BayesShrink)

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * threshold - set filtering strength (from 0 to DBL_MAX) (default 2)
  * planes - set planes to filter (from 0 to 15) (default 15)
  * method - set filtering method (from 0 to 2) (default garrote)
    - hard (0)  - hard thresholding
    - soft (1)  - soft thresholding
    - garrote (2)  - garrote thresholding

  * percent - set percent of full denoising (from 0 to 100) (default 85)
  * nsteps - set number of steps (from 1 to 32) (default 6)

# `varblur`

```elixir
@spec varblur(FFix.Stream.t(), FFix.Stream.t(),
  enable: String.t(),
  shortest: boolean(),
  planes: integer(),
  eof_action: integer() | String.t() | atom(),
  repeatlast: boolean(),
  ts_sync_mode: integer() | String.t() | atom(),
  min_r: integer(),
  max_r: integer()
) :: FFix.Stream.t()
```

Apply Variable Blur filter.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * shortest - force termination when the shortest input terminates (default false)
  * planes - set planes to filter (from 0 to 15) (default 15)
  * eof_action - Action to take when encountering EOF from secondary input  (from 0 to 2) (default repeat)
    - repeat (0)  - Repeat the previous frame.
    - endall (1)  - End both streams.
    - pass (2)  - Pass through the main input.

  * repeatlast - extend last frame of secondary streams beyond EOF (default true)
  * ts_sync_mode - How strictly to sync streams based on secondary input timestamps (from 0 to 1) (default default)
    - default (0)  - Frame from secondary input with the nearest lower or equal timestamp to the primary input frame
    - nearest (1)  - Frame from secondary input with the absolute nearest timestamp to the primary input frame

  * min_r - set min blur radius (from 0 to 254) (default 0)
  * max_r - set max blur radius (from 1 to 255) (default 8)

# `vectorscope`

```elixir
@spec vectorscope(FFix.Stream.t(),
  flags: integer() | String.t() | atom() | [String.t() | atom()],
  x: integer(),
  y: integer(),
  mode: integer() | String.t() | atom(),
  c: integer() | String.t() | atom(),
  intensity: float(),
  i: float(),
  m: integer() | String.t() | atom(),
  f: integer() | String.t() | atom() | [String.t() | atom()],
  b: float(),
  h: float(),
  l: float(),
  o: float(),
  colorspace: integer() | String.t() | atom(),
  opacity: float(),
  e: integer() | String.t() | atom(),
  g: integer() | String.t() | atom(),
  envelope: integer() | String.t() | atom(),
  graticule: integer() | String.t() | atom(),
  bgopacity: float(),
  tint0: float(),
  t0: float(),
  tint1: float(),
  t1: float(),
  lthreshold: float(),
  hthreshold: float()
) :: FFix.Stream.t()
```

Video vectorscope.

## Options

  * flags - set graticule flags (default name)
    - white - draw white point
    - black - draw black point
    - name - draw point name

  * x - set color component on X axis (from 0 to 2) (default 1)
  * y - set color component on Y axis (from 0 to 2) (default 2)
  * mode - set vectorscope mode (from 0 to 5) (default gray)
    - gray (0) 
    - tint (0) 
    - color (1) 
    - color2 (2) 
    - color3 (3) 
    - color4 (4) 
    - color5 (5) 

  * c - set colorspace (from 0 to 2) (default auto)
    - auto (0) 
    - 601 (1) 
    - 709 (2) 

  * intensity - set intensity (from 0 to 1) (default 0.004)
  * i - set intensity (from 0 to 1) (default 0.004)
  * m - set vectorscope mode (from 0 to 5) (default gray)
    - gray (0) 
    - tint (0) 
    - color (1) 
    - color2 (2) 
    - color3 (3) 
    - color4 (4) 
    - color5 (5) 

  * f - set graticule flags (default name)
    - white - draw white point
    - black - draw black point
    - name - draw point name

  * b - set background opacity (from 0 to 1) (default 0.3)
  * h - set high threshold (from 0 to 1) (default 1)
  * l - set low threshold (from 0 to 1) (default 0)
  * o - set graticule opacity (from 0 to 1) (default 0.75)
  * colorspace - set colorspace (from 0 to 2) (default auto)
    - auto (0) 
    - 601 (1) 
    - 709 (2) 

  * opacity - set graticule opacity (from 0 to 1) (default 0.75)
  * e - set envelope (from 0 to 3) (default none)
    - none (0) 
    - instant (1) 
    - peak (2) 
    - peak+instant (3) 

  * g - set graticule (from 0 to 3) (default none)
    - none (0) 
    - green (1) 
    - color (2) 
    - invert (3) 

  * envelope - set envelope (from 0 to 3) (default none)
    - none (0) 
    - instant (1) 
    - peak (2) 
    - peak+instant (3) 

  * graticule - set graticule (from 0 to 3) (default none)
    - none (0) 
    - green (1) 
    - color (2) 
    - invert (3) 

  * bgopacity - set background opacity (from 0 to 1) (default 0.3)
  * tint0 - set 1st tint (from -1 to 1) (default 0)
  * t0 - set 1st tint (from -1 to 1) (default 0)
  * tint1 - set 2nd tint (from -1 to 1) (default 0)
  * t1 - set 2nd tint (from -1 to 1) (default 0)
  * lthreshold - set low threshold (from 0 to 1) (default 0)
  * hthreshold - set high threshold (from 0 to 1) (default 1)

# `vflip`

```elixir
@spec vflip(
  FFix.Stream.t(),
  [{:enable, String.t()}]
) :: FFix.Stream.t()
```

Flip the input video vertically.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero

# `vflip_vulkan`

```elixir
@spec vflip_vulkan(
  FFix.Stream.t(),
  []
) :: FFix.Stream.t()
```

Vertically flip the input video in Vulkan

## Options

# `vfrdet`

```elixir
@spec vfrdet(
  FFix.Stream.t(),
  []
) :: FFix.Stream.t()
```

Variable frame rate detect filter.

## Options

# `vibrance`

```elixir
@spec vibrance(FFix.Stream.t(),
  intensity: float(),
  enable: String.t(),
  rbal: float(),
  gbal: float(),
  bbal: float(),
  rlum: float(),
  glum: float(),
  blum: float(),
  alternate: boolean()
) :: FFix.Stream.t()
```

Boost or alter saturation.

## Options

  * intensity - set the intensity value (from -2 to 2) (default 0)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * rbal - set the red balance value (from -10 to 10) (default 1)
  * gbal - set the green balance value (from -10 to 10) (default 1)
  * bbal - set the blue balance value (from -10 to 10) (default 1)
  * rlum - set the red luma coefficient (from 0 to 1) (default 0.072186)
  * glum - set the green luma coefficient (from 0 to 1) (default 0.715158)
  * blum - set the blue luma coefficient (from 0 to 1) (default 0.212656)
  * alternate - use alternate colors (default false)

# `vidstabdetect`

```elixir
@spec vidstabdetect(FFix.Stream.t(),
  result: String.t(),
  accuracy: integer(),
  show: integer(),
  tripod: integer(),
  shakiness: integer(),
  stepsize: integer(),
  mincontrast: float(),
  fileformat: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Extract relative transformations, pass 1 of 2 for stabilization (see vidstabtransform for pass 2).

## Options

  * result - path to the file used to write the transforms (default "transforms.trf")
  * accuracy - (>=shakiness) 1: low 15: high (slow) (from 1 to 15) (default 15)
  * show - 0: draw nothing; 1,2: show fields and transforms (from 0 to 2) (default 0)
  * tripod - virtual tripod mode (if >0): motion is compared to a reference reference frame (frame # is the value) (from 0 to INT_MAX) (default 0)
  * shakiness - how shaky is the video and how quick is the camera? 1: little (fast) 10: very strong/quick (slow) (from 1 to 10) (default 5)
  * stepsize - region around minimum is scanned with 1 pixel resolution (from 1 to 32) (default 6)
  * mincontrast - below this contrast a field is discarded (0-1) (from 0 to 1) (default 0.25)
  * fileformat - transforms data file format (from 1 to 2) (default binary)
    - ascii (1)  - ASCII text
    - binary (2)  - binary

# `vidstabtransform`

```elixir
@spec vidstabtransform(FFix.Stream.t(),
  input: String.t(),
  debug: boolean(),
  relative: integer(),
  crop: integer() | String.t() | atom(),
  smoothing: integer(),
  zoom: float(),
  tripod: boolean(),
  invert: integer(),
  optalgo: integer() | String.t() | atom(),
  maxshift: integer(),
  maxangle: float(),
  optzoom: integer(),
  zoomspeed: float(),
  interpol: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Transform the frames, pass 2 of 2 for stabilization (see vidstabdetect for pass 1).

## Options

  * input - set path to the file storing the transforms (default "transforms.trf")
  * debug - enable debug mode and writer global motions information to file (default false)
  * relative - consider transforms as relative (from 0 to 1) (default 1)
  * crop - set cropping mode (from 0 to 1) (default keep)
    - keep (0)  - keep border
    - black (1)  - black border

  * smoothing - set number of frames*2 + 1 used for lowpass filtering (from 0 to 1000) (default 15)
  * zoom - set percentage to zoom (>0: zoom in, <0: zoom out (from -100 to 100) (default 0)
  * tripod - enable virtual tripod mode (same as relative=0:smoothing=0) (default false)
  * invert - invert transforms (from 0 to 1) (default 0)
  * optalgo - set camera path optimization algo (from 0 to 2) (default opt)
    - opt (0)  - global optimization
    - gauss (1)  - gaussian kernel
    - avg (2)  - simple averaging on motion

  * maxshift - set maximal number of pixels to translate image (from -1 to 500) (default -1)
  * maxangle - set maximal angle in rad to rotate image (from -1 to 3.14) (default -1)
  * optzoom - set optimal zoom (0: nothing, 1: optimal static zoom, 2: optimal dynamic zoom) (from 0 to 2) (default 1)
  * zoomspeed - for adative zoom: percent to zoom maximally each frame (from 0 to 5) (default 0.25)
  * interpol - set type of interpolation (from 0 to 3) (default bilinear)
    - no (0)  - no interpolation
    - linear (1)  - linear (horizontal)
    - bilinear (2)  - bi-linear
    - bicubic (3)  - bi-cubic

# `vif`

```elixir
@spec vif(FFix.Stream.t(), FFix.Stream.t(),
  enable: String.t(),
  shortest: boolean(),
  eof_action: integer() | String.t() | atom(),
  repeatlast: boolean(),
  ts_sync_mode: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Calculate the VIF between two video streams.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * shortest - force termination when the shortest input terminates (default false)
  * eof_action - Action to take when encountering EOF from secondary input  (from 0 to 2) (default repeat)
    - repeat (0)  - Repeat the previous frame.
    - endall (1)  - End both streams.
    - pass (2)  - Pass through the main input.

  * repeatlast - extend last frame of secondary streams beyond EOF (default true)
  * ts_sync_mode - How strictly to sync streams based on secondary input timestamps (from 0 to 1) (default default)
    - default (0)  - Frame from secondary input with the nearest lower or equal timestamp to the primary input frame
    - nearest (1)  - Frame from secondary input with the absolute nearest timestamp to the primary input frame

# `vignette`

```elixir
@spec vignette(FFix.Stream.t(),
  mode: integer() | String.t() | atom(),
  eval: integer() | String.t() | atom(),
  a: String.t(),
  enable: String.t(),
  x0: String.t(),
  dither: boolean(),
  angle: String.t(),
  y0: String.t(),
  aspect: term()
) :: FFix.Stream.t()
```

Make or reverse a vignette effect.

## Options

  * mode - set forward/backward mode (from 0 to 1) (default forward)
    - forward (0) 
    - backward (1) 

  * eval - specify when to evaluate expressions (from 0 to 1) (default init)
    - init (0)  - eval expressions once during initialization
    - frame (1)  - eval expressions for each frame

  * a - set lens angle (default "PI/5")
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * x0 - set circle center position on x-axis (default "w/2")
  * dither - set dithering (default true)
  * angle - set lens angle (default "PI/5")
  * y0 - set circle center position on y-axis (default "h/2")
  * aspect - set aspect ratio (from 0 to DBL_MAX) (default 1/1)

# `vmafmotion`

```elixir
@spec vmafmotion(
  FFix.Stream.t(),
  [{:stats_file, String.t()}]
) :: FFix.Stream.t()
```

Calculate the VMAF Motion score.

## Options

  * stats_file - Set file where to store per-frame difference information

# `vpp_qsv`

```elixir
@spec vpp_qsv(FFix.Stream.t(),
  format: String.t(),
  h: String.t(),
  width: String.t(),
  w: String.t(),
  framerate: term(),
  tonemap: integer(),
  transpose: integer() | String.t() | atom(),
  hue: float(),
  rate: integer() | String.t() | atom(),
  cx: String.t(),
  cy: String.t(),
  saturation: float(),
  contrast: float(),
  height: String.t(),
  brightness: float(),
  deinterlace: integer() | String.t() | atom(),
  denoise: integer(),
  detail: integer(),
  procamp: integer(),
  cw: String.t(),
  ch: String.t(),
  async_depth: integer(),
  scale_mode: integer() | String.t() | atom(),
  out_range: integer() | String.t() | atom(),
  out_color_matrix: String.t(),
  out_color_primaries: String.t(),
  out_color_transfer: String.t()
) :: FFix.Stream.t()
```

Quick Sync Video "VPP"

## Options

  * format - Output pixel format (default "same")
  * h - Output video height(0=input video height, -1=keep input video aspect) (default "w*ch/cw")
  * width - Output video width(0=input video width, -1=keep input video aspect) (default "cw")
  * w - Output video width(0=input video width, -1=keep input video aspect) (default "cw")
  * framerate - output framerate (from 0 to DBL_MAX) (default 0/1)
  * tonemap - Perform tonemapping (0=disable tonemapping, 1=perform tonemapping if the input has HDR metadata) (from 0 to 1) (default 0)
  * transpose - set transpose direction (from -1 to 6) (default -1)
    - cclock_hflip (0)  - rotate counter-clockwise with horizontal flip
    - clock (1)  - rotate clockwise
    - cclock (2)  - rotate counter-clockwise
    - clock_hflip (3)  - rotate clockwise with horizontal flip
    - reversal (4)  - rotate by half-turn
    - hflip (5)  - flip horizontally
    - vflip (6)  - flip vertically

  * hue - ProcAmp hue (from -180 to 180) (default 0)
  * rate - Generate output at frame rate or field rate, available only for deinterlace mode (from 0 to 1) (default frame)
    - frame (0)  - Output at frame rate (one frame of output for each field-pair)
    - field (1)  - Output at field rate (one frame of output for each field)

  * cx - set the x crop area expression (default "(in_w-out_w)/2")
  * cy - set the y crop area expression (default "(in_h-out_h)/2")
  * saturation - ProcAmp saturation (from 0 to 10) (default 1)
  * contrast - ProcAmp contrast (from 0 to 10) (default 1)
  * height - Output video height(0=input video height, -1=keep input video aspect) (default "w*ch/cw")
  * brightness - ProcAmp brightness (from -100 to 100) (default 0)
  * deinterlace - deinterlace mode: 0=off, 1=bob, 2=advanced (from 0 to 2) (default 0)
    - bob (1)  - Bob deinterlace mode.
    - advanced (2)  - Advanced deinterlace mode. 

  * denoise - denoise level [0, 100] (from 0 to 100) (default 0)
  * detail - enhancement level [0, 100] (from 0 to 100) (default 0)
  * procamp - Enable ProcAmp (from 0 to 1) (default 0)
  * cw - set the width crop area expression (default "iw")
  * ch - set the height crop area expression (default "ih")
  * async_depth - Internal parallelization depth, the higher the value the higher the latency. (from 0 to INT_MAX) (default 4)
  * scale_mode - scaling & format conversion mode (mode compute(3), vd(4) and ve(5) are only available on some platforms) (from 0 to 5) (default auto)
    - auto (0)  - auto mode
    - low_power (1)  - low power mode
    - hq (2)  - high quality mode
    - compute (3)  - compute
    - vd (4)  - vd
    - ve (5)  - ve

  * out_range - Output color range (from 0 to 2) (default 0)
    - full (2)  - Full range
    - limited (1)  - Limited range
    - jpeg (2)  - Full range
    - mpeg (1)  - Limited range
    - tv (1)  - Limited range
    - pc (2)  - Full range

  * out_color_matrix - Output color matrix coefficient set
  * out_color_primaries - Output color primaries
  * out_color_transfer - Output color transfer characteristics

# `w3fdif`

```elixir
@spec w3fdif(FFix.Stream.t(),
  mode: integer() | String.t() | atom(),
  filter: integer() | String.t() | atom(),
  enable: String.t(),
  parity: integer() | String.t() | atom(),
  deint: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Apply Martin Weston three field deinterlace.

## Options

  * mode - specify the interlacing mode (from 0 to 1) (default field)
    - frame (0)  - send one frame for each frame
    - field (1)  - send one frame for each field

  * filter - specify the filter (from 0 to 1) (default complex)
    - simple (0) 
    - complex (1) 

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * parity - specify the assumed picture field parity (from -1 to 1) (default auto)
    - tff (0)  - assume top field first
    - bff (1)  - assume bottom field first
    - auto (-1)  - auto detect parity

  * deint - specify which frames to deinterlace (from 0 to 1) (default all)
    - all (0)  - deinterlace all frames
    - interlaced (1)  - only deinterlace frames marked as interlaced

# `waveform`

```elixir
@spec waveform(FFix.Stream.t(),
  flags: integer() | String.t() | atom() | [String.t() | atom()],
  input: integer() | String.t() | atom(),
  display: integer() | String.t() | atom(),
  mode: integer() | String.t() | atom(),
  c: integer(),
  intensity: float(),
  filter: integer() | String.t() | atom(),
  i: float(),
  m: integer() | String.t() | atom(),
  f: integer() | String.t() | atom(),
  b: float(),
  s: integer() | String.t() | atom(),
  r: boolean(),
  d: integer() | String.t() | atom(),
  components: integer(),
  o: float(),
  scale: integer() | String.t() | atom(),
  opacity: float(),
  e: integer() | String.t() | atom(),
  g: integer() | String.t() | atom(),
  mirror: boolean(),
  envelope: integer() | String.t() | atom(),
  graticule: integer() | String.t() | atom(),
  fl: integer() | String.t() | atom() | [String.t() | atom()],
  bgopacity: float(),
  tint0: float(),
  t0: float(),
  tint1: float(),
  t1: float(),
  fitmode: integer() | String.t() | atom(),
  fm: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Video waveform monitor.

## Options

  * flags - set graticule flags (default numbers)
    - numbers - draw numbers
    - dots - draw dots instead of lines

  * input - set input formats selection (from 0 to 1) (default first)
    - all (0)  - try to select from all available formats
    - first (1)  - pick first available format

  * display - set display mode (from 0 to 2) (default stack)
    - overlay (0) 
    - stack (1) 
    - parade (2) 

  * mode - set mode (from 0 to 1) (default column)
    - row (0) 
    - column (1) 

  * c - set components to display (from 1 to 15) (default 1)
  * intensity - set intensity (from 0 to 1) (default 0.04)
  * filter - set filter (from 0 to 7) (default lowpass)
    - lowpass (0) 
    - flat (1) 
    - aflat (2) 
    - chroma (3) 
    - color (4) 
    - acolor (5) 
    - xflat (6) 
    - yflat (7) 

  * i - set intensity (from 0 to 1) (default 0.04)
  * m - set mode (from 0 to 1) (default column)
    - row (0) 
    - column (1) 

  * f - set filter (from 0 to 7) (default lowpass)
    - lowpass (0) 
    - flat (1) 
    - aflat (2) 
    - chroma (3) 
    - color (4) 
    - acolor (5) 
    - xflat (6) 
    - yflat (7) 

  * b - set background opacity (from 0 to 1) (default 0.75)
  * s - set scale (from 0 to 2) (default digital)
    - digital (0) 
    - millivolts (1) 
    - ire (2) 

  * r - set mirroring (default true)
  * d - set display mode (from 0 to 2) (default stack)
    - overlay (0) 
    - stack (1) 
    - parade (2) 

  * components - set components to display (from 1 to 15) (default 1)
  * o - set graticule opacity (from 0 to 1) (default 0.75)
  * scale - set scale (from 0 to 2) (default digital)
    - digital (0) 
    - millivolts (1) 
    - ire (2) 

  * opacity - set graticule opacity (from 0 to 1) (default 0.75)
  * e - set envelope to display (from 0 to 3) (default none)
    - none (0) 
    - instant (1) 
    - peak (2) 
    - peak+instant (3) 

  * g - set graticule (from 0 to 3) (default none)
    - none (0) 
    - green (1) 
    - orange (2) 
    - invert (3) 

  * mirror - set mirroring (default true)
  * envelope - set envelope to display (from 0 to 3) (default none)
    - none (0) 
    - instant (1) 
    - peak (2) 
    - peak+instant (3) 

  * graticule - set graticule (from 0 to 3) (default none)
    - none (0) 
    - green (1) 
    - orange (2) 
    - invert (3) 

  * fl - set graticule flags (default numbers)
    - numbers - draw numbers
    - dots - draw dots instead of lines

  * bgopacity - set background opacity (from 0 to 1) (default 0.75)
  * tint0 - set 1st tint (from -1 to 1) (default 0)
  * t0 - set 1st tint (from -1 to 1) (default 0)
  * tint1 - set 2nd tint (from -1 to 1) (default 0)
  * t1 - set 2nd tint (from -1 to 1) (default 0)
  * fitmode - set fit mode (from 0 to 1) (default none)
    - none (0) 
    - size (1) 

  * fm - set fit mode (from 0 to 1) (default none)
    - none (0) 
    - size (1) 

# `weave`

```elixir
@spec weave(
  FFix.Stream.t(),
  [{:first_field, integer() | String.t() | atom()}]
) :: FFix.Stream.t()
```

Weave input video fields into frames.

## Options

  * first_field - set first field (from 0 to 1) (default top)
    - top (0)  - set top field first
    - t (0)  - set top field first
    - bottom (1)  - set bottom field first
    - b (1)  - set bottom field first

# `xbr`

```elixir
@spec xbr(
  FFix.Stream.t(),
  [{:n, integer()}]
) :: FFix.Stream.t()
```

Scale the input using xBR algorithm.

## Options

  * n - set scale factor (from 2 to 4) (default 3)

# `xcorrelate`

```elixir
@spec xcorrelate(FFix.Stream.t(), FFix.Stream.t(),
  enable: String.t(),
  shortest: boolean(),
  planes: integer(),
  eof_action: integer() | String.t() | atom(),
  repeatlast: boolean(),
  ts_sync_mode: integer() | String.t() | atom(),
  secondary: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Cross-correlate first video stream with second video stream.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * shortest - force termination when the shortest input terminates (default false)
  * planes - set planes to cross-correlate (from 0 to 15) (default 7)
  * eof_action - Action to take when encountering EOF from secondary input  (from 0 to 2) (default repeat)
    - repeat (0)  - Repeat the previous frame.
    - endall (1)  - End both streams.
    - pass (2)  - Pass through the main input.

  * repeatlast - extend last frame of secondary streams beyond EOF (default true)
  * ts_sync_mode - How strictly to sync streams based on secondary input timestamps (from 0 to 1) (default default)
    - default (0)  - Frame from secondary input with the nearest lower or equal timestamp to the primary input frame
    - nearest (1)  - Frame from secondary input with the absolute nearest timestamp to the primary input frame

  * secondary - when to process secondary frame (from 0 to 1) (default all)
    - first (0)  - process only first secondary frame, ignore rest
    - all (1)  - process all secondary frames

# `xfade`

```elixir
@spec xfade(FFix.Stream.t(), FFix.Stream.t(),
  offset: term(),
  expr: String.t(),
  duration: term(),
  transition: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Cross fade one video with another video.

## Options

  * offset - set cross fade start relative to first input stream (default 0)
  * expr - set expression for custom transition
  * duration - set cross fade duration (default 1)
  * transition - set cross fade transition (from -1 to 57) (default fade)
    - custom (-1)  - custom transition
    - fade (0)  - fade transition
    - wipeleft (1)  - wipe left transition
    - wiperight (2)  - wipe right transition
    - wipeup (3)  - wipe up transition
    - wipedown (4)  - wipe down transition
    - slideleft (5)  - slide left transition
    - slideright (6)  - slide right transition
    - slideup (7)  - slide up transition
    - slidedown (8)  - slide down transition
    - circlecrop (9)  - circle crop transition
    - rectcrop (10)  - rect crop transition
    - distance (11)  - distance transition
    - fadeblack (12)  - fadeblack transition
    - fadewhite (13)  - fadewhite transition
    - radial (14)  - radial transition
    - smoothleft (15)  - smoothleft transition
    - smoothright (16)  - smoothright transition
    - smoothup (17)  - smoothup transition
    - smoothdown (18)  - smoothdown transition
    - circleopen (19)  - circleopen transition
    - circleclose (20)  - circleclose transition
    - vertopen (21)  - vert open transition
    - vertclose (22)  - vert close transition
    - horzopen (23)  - horz open transition
    - horzclose (24)  - horz close transition
    - dissolve (25)  - dissolve transition
    - pixelize (26)  - pixelize transition
    - diagtl (27)  - diag tl transition
    - diagtr (28)  - diag tr transition
    - diagbl (29)  - diag bl transition
    - diagbr (30)  - diag br transition
    - hlslice (31)  - hl slice transition
    - hrslice (32)  - hr slice transition
    - vuslice (33)  - vu slice transition
    - vdslice (34)  - vd slice transition
    - hblur (35)  - hblur transition
    - fadegrays (36)  - fadegrays transition
    - wipetl (37)  - wipe tl transition
    - wipetr (38)  - wipe tr transition
    - wipebl (39)  - wipe bl transition
    - wipebr (40)  - wipe br transition
    - squeezeh (41)  - squeeze h transition
    - squeezev (42)  - squeeze v transition
    - zoomin (43)  - zoom in transition
    - fadefast (44)  - fast fade transition
    - fadeslow (45)  - slow fade transition
    - hlwind (46)  - hl wind transition
    - hrwind (47)  - hr wind transition
    - vuwind (48)  - vu wind transition
    - vdwind (49)  - vd wind transition
    - coverleft (50)  - cover left transition
    - coverright (51)  - cover right transition
    - coverup (52)  - cover up transition
    - coverdown (53)  - cover down transition
    - revealleft (54)  - reveal left transition
    - revealright (55)  - reveal right transition
    - revealup (56)  - reveal up transition
    - revealdown (57)  - reveal down transition

# `xfade_opencl`

```elixir
@spec xfade_opencl(FFix.Stream.t(), FFix.Stream.t(),
  offset: term(),
  kernel: String.t(),
  source: String.t(),
  duration: term(),
  transition: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Cross fade one video with another video.

## Options

  * offset - set cross fade start relative to first input stream (default 0)
  * kernel - set kernel name in program file for custom transition
  * source - set OpenCL program source file for custom transition
  * duration - set cross fade duration (default 1)
  * transition - set cross fade transition (from 0 to 9) (default fade)
    - custom (0)  - custom transition
    - fade (1)  - fade transition
    - wipeleft (2)  - wipe left transition
    - wiperight (3)  - wipe right transition
    - wipeup (4)  - wipe up transition
    - wipedown (5)  - wipe down transition
    - slideleft (6)  - slide left transition
    - slideright (7)  - slide right transition
    - slideup (8)  - slide up transition
    - slidedown (9)  - slide down transition

# `xfade_vulkan`

```elixir
@spec xfade_vulkan(FFix.Stream.t(), FFix.Stream.t(),
  offset: term(),
  duration: term(),
  transition: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Cross fade one video with another video.

## Options

  * offset - set cross fade start relative to first input stream (default 0)
  * duration - set cross fade duration (default 1)
  * transition - set cross fade transition (from 0 to 16) (default fade)
    - fade (0)  - fade transition
    - wipeleft (1)  - wipe left transition
    - wiperight (2)  - wipe right transition
    - wipeup (3)  - wipe up transition
    - wipedown (4)  - wipe down transition
    - slidedown (5)  - slide down transition
    - slideup (6)  - slide up transition
    - slideleft (7)  - slide left transition
    - slideright (8)  - slide right transition
    - circleopen (9)  - circleopen transition
    - circleclose (10)  - circleclose transition
    - dissolve (11)  - dissolve transition
    - pixelize (12)  - pixelize transition
    - wipetl (13)  - wipe top left transition
    - wipetr (14)  - wipe top right transition
    - wipebl (15)  - wipe bottom left transition
    - wipebr (16)  - wipe bottom right transition

# `xpsnr`

```elixir
@spec xpsnr(FFix.Stream.t(), FFix.Stream.t(),
  f: String.t(),
  enable: String.t(),
  shortest: boolean(),
  eof_action: integer() | String.t() | atom(),
  repeatlast: boolean(),
  ts_sync_mode: integer() | String.t() | atom(),
  stats_file: String.t()
) :: FFix.Stream.t()
```

Calculate the extended perceptually weighted peak signal-to-noise ratio (XPSNR) between two video streams.

## Options

  * f - Set file where to store per-frame XPSNR information
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * shortest - force termination when the shortest input terminates (default false)
  * eof_action - Action to take when encountering EOF from secondary input  (from 0 to 2) (default repeat)
    - repeat (0)  - Repeat the previous frame.
    - endall (1)  - End both streams.
    - pass (2)  - Pass through the main input.

  * repeatlast - extend last frame of secondary streams beyond EOF (default true)
  * ts_sync_mode - How strictly to sync streams based on secondary input timestamps (from 0 to 1) (default default)
    - default (0)  - Frame from secondary input with the nearest lower or equal timestamp to the primary input frame
    - nearest (1)  - Frame from secondary input with the absolute nearest timestamp to the primary input frame

  * stats_file - Set file where to store per-frame XPSNR information

# `yadif`

```elixir
@spec yadif(FFix.Stream.t(),
  mode: integer() | String.t() | atom(),
  enable: String.t(),
  parity: integer() | String.t() | atom(),
  deint: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Deinterlace the input image.

## Options

  * mode - specify the interlacing mode (from 0 to 3) (default send_frame)
    - send_frame (0)  - send one frame for each frame
    - send_field (1)  - send one frame for each field
    - send_frame_nospatial 2 - send one frame for each frame, but skip spatial interlacing check
    - send_field_nospatial 3 - send one frame for each field, but skip spatial interlacing check

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * parity - specify the assumed picture field parity (from -1 to 1) (default auto)
    - tff (0)  - assume top field first
    - bff (1)  - assume bottom field first
    - auto (-1)  - auto detect parity

  * deint - specify which frames to deinterlace (from 0 to 1) (default all)
    - all (0)  - deinterlace all frames
    - interlaced (1)  - only deinterlace frames marked as interlaced

# `yaepblur`

```elixir
@spec yaepblur(FFix.Stream.t(),
  p: integer(),
  s: integer(),
  enable: String.t(),
  r: integer(),
  planes: integer(),
  radius: integer(),
  sigma: integer()
) :: FFix.Stream.t()
```

Yet another edge preserving blur filter.

## Options

  * p - set planes to filter (from 0 to 15) (default 1)
  * s - set blur strength (from 1 to INT_MAX) (default 128)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * r - set window radius (from 0 to INT_MAX) (default 3)
  * planes - set planes to filter (from 0 to 15) (default 1)
  * radius - set window radius (from 0 to INT_MAX) (default 3)
  * sigma - set blur strength (from 1 to INT_MAX) (default 128)

# `zmq`

```elixir
@spec zmq(FFix.Stream.t(), b: String.t(), bind_address: String.t()) :: FFix.Stream.t()
```

Receive commands through ZMQ and broker them to filters.

## Options

  * b - set bind address (default "tcp://*:5555")
  * bind_address - set bind address (default "tcp://*:5555")

# `zoompan`

```elixir
@spec zoompan(FFix.Stream.t(),
  x: String.t(),
  y: String.t(),
  s: term(),
  d: String.t(),
  z: String.t(),
  fps: term(),
  zoom: String.t()
) :: FFix.Stream.t()
```

Apply Zoom & Pan effect.

## Options

  * x - set the x expression (default "0")
  * y - set the y expression (default "0")
  * s - set the output image size (default "hd720")
  * d - set the duration expression (default "90")
  * z - set the zoom expression (default "1")
  * fps - set the output framerate (default "25")
  * zoom - set the zoom expression (default "1")

# `zscale`

```elixir
@spec zscale(FFix.Stream.t(),
  param_b: float(),
  w: String.t(),
  chromalin: integer() | String.t() | atom(),
  rin: integer() | String.t() | atom(),
  h: String.t(),
  width: String.t(),
  matrixin: integer() | String.t() | atom(),
  m: integer() | String.t() | atom(),
  transferin: integer() | String.t() | atom(),
  cin: integer() | String.t() | atom(),
  s: String.t(),
  tin: integer() | String.t() | atom(),
  in_range: integer() | String.t() | atom(),
  chromal: integer() | String.t() | atom(),
  d: integer() | String.t() | atom(),
  r: integer() | String.t() | atom(),
  primariesin: integer() | String.t() | atom(),
  pin: integer() | String.t() | atom(),
  npl: float(),
  primaries: integer() | String.t() | atom(),
  f: integer() | String.t() | atom(),
  t: integer() | String.t() | atom(),
  range: integer() | String.t() | atom(),
  dither: integer() | String.t() | atom(),
  min: integer() | String.t() | atom(),
  size: String.t(),
  agamma: boolean(),
  c: integer() | String.t() | atom(),
  p: integer() | String.t() | atom(),
  rangein: integer() | String.t() | atom(),
  param_a: float(),
  transfer: integer() | String.t() | atom(),
  out_range: integer() | String.t() | atom(),
  filter: integer() | String.t() | atom(),
  height: String.t(),
  matrix: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Apply resizing, colorspace and bit depth conversion.

## Options

  * param_b - parameter B, which is parameter "c" for bicubic (from -DBL_MAX to DBL_MAX) (default nan)
  * w - Output video width
  * chromalin - set input chroma location (from -1 to 5) (default input)
    - input (-1) 
    - left (0) 
    - center (1) 
    - topleft (2) 
    - top (3) 
    - bottomleft (4) 
    - bottom (5) 

  * rin - set input color range (from -1 to 1) (default input)
    - input (-1) 
    - limited (0) 
    - full (1) 
    - unknown (-1) 
    - tv (0) 
    - pc (1) 

  * h - Output video height
  * width - Output video width
  * matrixin - set input colorspace matrix (from -1 to INT_MAX) (default input)
    - input (-1) 
    - 709 (1) 
    - unspecified (2) 
    - 470bg (5) 
    - 170m (6) 
    - 2020_ncl (9) 
    - 2020_cl (10) 
    - unknown (2) 
    - gbr (0) 
    - bt709 (1) 
    - fcc (4) 
    - bt470bg (5) 
    - smpte170m (6) 
    - smpte240m (7) 
    - ycgco (8) 
    - bt2020nc (9) 
    - bt2020c (10) 
    - chroma-derived-nc 12
    - chroma-derived-c 13
    - ictcp (14) 

  * m - set colorspace matrix (from -1 to INT_MAX) (default input)
    - input (-1) 
    - 709 (1) 
    - unspecified (2) 
    - 470bg (5) 
    - 170m (6) 
    - 2020_ncl (9) 
    - 2020_cl (10) 
    - unknown (2) 
    - gbr (0) 
    - bt709 (1) 
    - fcc (4) 
    - bt470bg (5) 
    - smpte170m (6) 
    - smpte240m (7) 
    - ycgco (8) 
    - bt2020nc (9) 
    - bt2020c (10) 
    - chroma-derived-nc 12
    - chroma-derived-c 13
    - ictcp (14) 

  * transferin - set input transfer characteristic (from -1 to INT_MAX) (default input)
    - input (-1) 
    - 709 (1) 
    - unspecified (2) 
    - 601 (6) 
    - linear (8) 
    - 2020_10 (14) 
    - 2020_12 (15) 
    - unknown (2) 
    - bt470m (4) 
    - bt470bg (5) 
    - smpte170m (6) 
    - smpte240m (7) 
    - bt709 (1) 
    - linear (8) 
    - log100 (9) 
    - log316 (10) 
    - bt2020-10 (14) 
    - bt2020-12 (15) 
    - smpte2084 (16) 
    - iec61966-2-4 (11) 
    - iec61966-2-1 (13) 
    - arib-std-b67 (18) 

  * cin - set input chroma location (from -1 to 5) (default input)
    - input (-1) 
    - left (0) 
    - center (1) 
    - topleft (2) 
    - top (3) 
    - bottomleft (4) 
    - bottom (5) 

  * s - set video size
  * tin - set input transfer characteristic (from -1 to INT_MAX) (default input)
    - input (-1) 
    - 709 (1) 
    - unspecified (2) 
    - 601 (6) 
    - linear (8) 
    - 2020_10 (14) 
    - 2020_12 (15) 
    - unknown (2) 
    - bt470m (4) 
    - bt470bg (5) 
    - smpte170m (6) 
    - smpte240m (7) 
    - bt709 (1) 
    - linear (8) 
    - log100 (9) 
    - log316 (10) 
    - bt2020-10 (14) 
    - bt2020-12 (15) 
    - smpte2084 (16) 
    - iec61966-2-4 (11) 
    - iec61966-2-1 (13) 
    - arib-std-b67 (18) 

  * in_range - set input color range (from -1 to 1) (default input)
    - input (-1) 
    - limited (0) 
    - full (1) 
    - unknown (-1) 
    - tv (0) 
    - pc (1) 

  * chromal - set output chroma location (from -1 to 5) (default input)
    - input (-1) 
    - left (0) 
    - center (1) 
    - topleft (2) 
    - top (3) 
    - bottomleft (4) 
    - bottom (5) 

  * d - set dither type (from 0 to 3) (default none)
    - none (0) 
    - ordered (1) 
    - random (2) 
    - error_diffusion 3

  * r - set color range (from -1 to 1) (default input)
    - input (-1) 
    - limited (0) 
    - full (1) 
    - unknown (-1) 
    - tv (0) 
    - pc (1) 

  * primariesin - set input color primaries (from -1 to INT_MAX) (default input)
    - input (-1) 
    - 709 (1) 
    - unspecified (2) 
    - 170m (6) 
    - 240m (7) 
    - 2020 (9) 
    - unknown (2) 
    - bt709 (1) 
    - bt470m (4) 
    - bt470bg (5) 
    - smpte170m (6) 
    - smpte240m (7) 
    - film (8) 
    - bt2020 (9) 
    - smpte428 (10) 
    - smpte431 (11) 
    - smpte432 (12) 
    - jedec-p22 (22) 
    - ebu3213 (22) 

  * pin - set input color primaries (from -1 to INT_MAX) (default input)
    - input (-1) 
    - 709 (1) 
    - unspecified (2) 
    - 170m (6) 
    - 240m (7) 
    - 2020 (9) 
    - unknown (2) 
    - bt709 (1) 
    - bt470m (4) 
    - bt470bg (5) 
    - smpte170m (6) 
    - smpte240m (7) 
    - film (8) 
    - bt2020 (9) 
    - smpte428 (10) 
    - smpte431 (11) 
    - smpte432 (12) 
    - jedec-p22 (22) 
    - ebu3213 (22) 

  * npl - set nominal peak luminance (from 0 to DBL_MAX) (default nan)
  * primaries - set color primaries (from -1 to INT_MAX) (default input)
    - input (-1) 
    - 709 (1) 
    - unspecified (2) 
    - 170m (6) 
    - 240m (7) 
    - 2020 (9) 
    - unknown (2) 
    - bt709 (1) 
    - bt470m (4) 
    - bt470bg (5) 
    - smpte170m (6) 
    - smpte240m (7) 
    - film (8) 
    - bt2020 (9) 
    - smpte428 (10) 
    - smpte431 (11) 
    - smpte432 (12) 
    - jedec-p22 (22) 
    - ebu3213 (22) 

  * f - set filter type (from 0 to 5) (default bilinear)
    - point (0) 
    - bilinear (1) 
    - bicubic (2) 
    - spline16 (3) 
    - spline36 (4) 
    - lanczos (5) 

  * t - set transfer characteristic (from -1 to INT_MAX) (default input)
    - input (-1) 
    - 709 (1) 
    - unspecified (2) 
    - 601 (6) 
    - linear (8) 
    - 2020_10 (14) 
    - 2020_12 (15) 
    - unknown (2) 
    - bt470m (4) 
    - bt470bg (5) 
    - smpte170m (6) 
    - smpte240m (7) 
    - bt709 (1) 
    - linear (8) 
    - log100 (9) 
    - log316 (10) 
    - bt2020-10 (14) 
    - bt2020-12 (15) 
    - smpte2084 (16) 
    - iec61966-2-4 (11) 
    - iec61966-2-1 (13) 
    - arib-std-b67 (18) 

  * range - set color range (from -1 to 1) (default input)
    - input (-1) 
    - limited (0) 
    - full (1) 
    - unknown (-1) 
    - tv (0) 
    - pc (1) 

  * dither - set dither type (from 0 to 3) (default none)
    - none (0) 
    - ordered (1) 
    - random (2) 
    - error_diffusion 3

  * min - set input colorspace matrix (from -1 to INT_MAX) (default input)
    - input (-1) 
    - 709 (1) 
    - unspecified (2) 
    - 470bg (5) 
    - 170m (6) 
    - 2020_ncl (9) 
    - 2020_cl (10) 
    - unknown (2) 
    - gbr (0) 
    - bt709 (1) 
    - fcc (4) 
    - bt470bg (5) 
    - smpte170m (6) 
    - smpte240m (7) 
    - ycgco (8) 
    - bt2020nc (9) 
    - bt2020c (10) 
    - chroma-derived-nc 12
    - chroma-derived-c 13
    - ictcp (14) 

  * size - set video size
  * agamma - allow approximate gamma (default true)
  * c - set output chroma location (from -1 to 5) (default input)
    - input (-1) 
    - left (0) 
    - center (1) 
    - topleft (2) 
    - top (3) 
    - bottomleft (4) 
    - bottom (5) 

  * p - set color primaries (from -1 to INT_MAX) (default input)
    - input (-1) 
    - 709 (1) 
    - unspecified (2) 
    - 170m (6) 
    - 240m (7) 
    - 2020 (9) 
    - unknown (2) 
    - bt709 (1) 
    - bt470m (4) 
    - bt470bg (5) 
    - smpte170m (6) 
    - smpte240m (7) 
    - film (8) 
    - bt2020 (9) 
    - smpte428 (10) 
    - smpte431 (11) 
    - smpte432 (12) 
    - jedec-p22 (22) 
    - ebu3213 (22) 

  * rangein - set input color range (from -1 to 1) (default input)
    - input (-1) 
    - limited (0) 
    - full (1) 
    - unknown (-1) 
    - tv (0) 
    - pc (1) 

  * param_a - parameter A, which is parameter "b" for bicubic, and the number of filter taps for lanczos (from -DBL_MAX to DBL_MAX) (default nan)
  * transfer - set transfer characteristic (from -1 to INT_MAX) (default input)
    - input (-1) 
    - 709 (1) 
    - unspecified (2) 
    - 601 (6) 
    - linear (8) 
    - 2020_10 (14) 
    - 2020_12 (15) 
    - unknown (2) 
    - bt470m (4) 
    - bt470bg (5) 
    - smpte170m (6) 
    - smpte240m (7) 
    - bt709 (1) 
    - linear (8) 
    - log100 (9) 
    - log316 (10) 
    - bt2020-10 (14) 
    - bt2020-12 (15) 
    - smpte2084 (16) 
    - iec61966-2-4 (11) 
    - iec61966-2-1 (13) 
    - arib-std-b67 (18) 

  * out_range - set color range (from -1 to 1) (default input)
    - input (-1) 
    - limited (0) 
    - full (1) 
    - unknown (-1) 
    - tv (0) 
    - pc (1) 

  * filter - set filter type (from 0 to 5) (default bilinear)
    - point (0) 
    - bilinear (1) 
    - bicubic (2) 
    - spline16 (3) 
    - spline36 (4) 
    - lanczos (5) 

  * height - Output video height
  * matrix - set colorspace matrix (from -1 to INT_MAX) (default input)
    - input (-1) 
    - 709 (1) 
    - unspecified (2) 
    - 470bg (5) 
    - 170m (6) 
    - 2020_ncl (9) 
    - 2020_cl (10) 
    - unknown (2) 
    - gbr (0) 
    - bt709 (1) 
    - fcc (4) 
    - bt470bg (5) 
    - smpte170m (6) 
    - smpte240m (7) 
    - ycgco (8) 
    - bt2020nc (9) 
    - bt2020c (10) 
    - chroma-derived-nc 12
    - chroma-derived-c 13
    - ictcp (14) 

# `aap`

```elixir
@spec aap(FFix.Stream.t(), FFix.Stream.t(),
  enable: String.t(),
  precision: integer() | String.t() | atom(),
  projection: integer(),
  order: integer(),
  delta: float(),
  mu: float(),
  out_mode: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Apply Affine Projection algorithm to first audio stream.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * precision - set processing precision (from 0 to 2) (default auto)
    - auto (0)  - set auto processing precision
    - float (1)  - set single-floating point processing precision
    - double (2)  - set double-floating point processing precision

  * projection - set the filter projection (from 1 to 256) (default 2)
  * order - set the filter order (from 1 to 32767) (default 16)
  * delta - set the filter delta (from 0 to 1) (default 0.001)
  * mu - set the filter mu (from 0 to 1) (default 0.0001)
  * out_mode - set output mode (from 0 to 4) (default o)
    - i (0)  - input
    - d (1)  - desired
    - o (2)  - output
    - n (3)  - noise
    - e (4)  - error

# `abench`

```elixir
@spec abench(
  FFix.Stream.t(),
  [{:action, integer() | String.t() | atom()}]
) :: FFix.Stream.t()
```

Benchmark part of a filtergraph.

## Options

  * action - set action (from 0 to 1) (default start)
    - start (0)  - start timer
    - stop (1)  - stop timer

# `acompressor`

```elixir
@spec acompressor(FFix.Stream.t(),
  link: integer() | String.t() | atom(),
  mode: integer() | String.t() | atom(),
  threshold: float(),
  mix: float(),
  makeup: float(),
  ratio: float(),
  attack: float(),
  level_in: float(),
  release: float(),
  knee: float(),
  detection: integer() | String.t() | atom(),
  level_sc: float()
) :: FFix.Stream.t()
```

Audio compressor.

## Options

  * link - set link type (from 0 to 1) (default average)
    - average (0) 
    - maximum (1) 

  * mode - set mode (from 0 to 1) (default downward)
    - downward (0) 
    - upward (1) 

  * threshold - set threshold (from 0.000976563 to 1) (default 0.125)
  * mix - set mix (from 0 to 1) (default 1)
  * makeup - set make up gain (from 1 to 64) (default 1)
  * ratio - set ratio (from 1 to 20) (default 2)
  * attack - set attack (from 0.01 to 2000) (default 20)
  * level_in - set input gain (from 0.015625 to 64) (default 1)
  * release - set release (from 0.01 to 9000) (default 250)
  * knee - set knee (from 1 to 8) (default 2.82843)
  * detection - set detection (from 0 to 1) (default rms)
    - peak (0) 
    - rms (1) 

  * level_sc - set sidechain gain (from 0.015625 to 64) (default 1)

# `acontrast`

```elixir
@spec acontrast(
  FFix.Stream.t(),
  [{:contrast, float()}]
) :: FFix.Stream.t()
```

Simple audio dynamic range compression/expansion filter.

## Options

  * contrast - set contrast (from 0 to 100) (default 33)

# `acopy`

```elixir
@spec acopy(
  FFix.Stream.t(),
  []
) :: FFix.Stream.t()
```

Copy the input audio unchanged to the output.

## Options

# `acrossfade`

```elixir
@spec acrossfade(FFix.Stream.t(), FFix.Stream.t(),
  d: term(),
  o: boolean(),
  duration: term(),
  nb_samples: integer(),
  ns: integer(),
  overlap: boolean(),
  curve1: integer() | String.t() | atom(),
  c1: integer() | String.t() | atom(),
  curve2: integer() | String.t() | atom(),
  c2: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Cross fade two input audio streams.

## Options

  * d - set cross fade duration (default 0)
  * o - overlap 1st stream end with 2nd stream start (default true)
  * duration - set cross fade duration (default 0)
  * nb_samples - set number of samples for cross fade duration (from 1 to 2.14748e+08) (default 44100)
  * ns - set number of samples for cross fade duration (from 1 to 2.14748e+08) (default 44100)
  * overlap - overlap 1st stream end with 2nd stream start (default true)
  * curve1 - set fade curve type for 1st stream (from -1 to 22) (default tri)
    - nofade (-1)  - no fade; keep audio as-is
    - tri (0)  - linear slope
    - qsin (1)  - quarter of sine wave
    - esin (2)  - exponential sine wave
    - hsin (3)  - half of sine wave
    - log (4)  - logarithmic
    - ipar (5)  - inverted parabola
    - qua (6)  - quadratic
    - cub (7)  - cubic
    - squ (8)  - square root
    - cbr (9)  - cubic root
    - par (10)  - parabola
    - exp (11)  - exponential
    - iqsin (12)  - inverted quarter of sine wave
    - ihsin (13)  - inverted half of sine wave
    - dese (14)  - double-exponential seat
    - desi (15)  - double-exponential sigmoid
    - losi (16)  - logistic sigmoid
    - sinc (17)  - sine cardinal function
    - isinc (18)  - inverted sine cardinal function
    - quat (19)  - quartic
    - quatr (20)  - quartic root
    - qsin2 (21)  - squared quarter of sine wave
    - hsin2 (22)  - squared half of sine wave

  * c1 - set fade curve type for 1st stream (from -1 to 22) (default tri)
    - nofade (-1)  - no fade; keep audio as-is
    - tri (0)  - linear slope
    - qsin (1)  - quarter of sine wave
    - esin (2)  - exponential sine wave
    - hsin (3)  - half of sine wave
    - log (4)  - logarithmic
    - ipar (5)  - inverted parabola
    - qua (6)  - quadratic
    - cub (7)  - cubic
    - squ (8)  - square root
    - cbr (9)  - cubic root
    - par (10)  - parabola
    - exp (11)  - exponential
    - iqsin (12)  - inverted quarter of sine wave
    - ihsin (13)  - inverted half of sine wave
    - dese (14)  - double-exponential seat
    - desi (15)  - double-exponential sigmoid
    - losi (16)  - logistic sigmoid
    - sinc (17)  - sine cardinal function
    - isinc (18)  - inverted sine cardinal function
    - quat (19)  - quartic
    - quatr (20)  - quartic root
    - qsin2 (21)  - squared quarter of sine wave
    - hsin2 (22)  - squared half of sine wave

  * curve2 - set fade curve type for 2nd stream (from -1 to 22) (default tri)
    - nofade (-1)  - no fade; keep audio as-is
    - tri (0)  - linear slope
    - qsin (1)  - quarter of sine wave
    - esin (2)  - exponential sine wave
    - hsin (3)  - half of sine wave
    - log (4)  - logarithmic
    - ipar (5)  - inverted parabola
    - qua (6)  - quadratic
    - cub (7)  - cubic
    - squ (8)  - square root
    - cbr (9)  - cubic root
    - par (10)  - parabola
    - exp (11)  - exponential
    - iqsin (12)  - inverted quarter of sine wave
    - ihsin (13)  - inverted half of sine wave
    - dese (14)  - double-exponential seat
    - desi (15)  - double-exponential sigmoid
    - losi (16)  - logistic sigmoid
    - sinc (17)  - sine cardinal function
    - isinc (18)  - inverted sine cardinal function
    - quat (19)  - quartic
    - quatr (20)  - quartic root
    - qsin2 (21)  - squared quarter of sine wave
    - hsin2 (22)  - squared half of sine wave

  * c2 - set fade curve type for 2nd stream (from -1 to 22) (default tri)
    - nofade (-1)  - no fade; keep audio as-is
    - tri (0)  - linear slope
    - qsin (1)  - quarter of sine wave
    - esin (2)  - exponential sine wave
    - hsin (3)  - half of sine wave
    - log (4)  - logarithmic
    - ipar (5)  - inverted parabola
    - qua (6)  - quadratic
    - cub (7)  - cubic
    - squ (8)  - square root
    - cbr (9)  - cubic root
    - par (10)  - parabola
    - exp (11)  - exponential
    - iqsin (12)  - inverted quarter of sine wave
    - ihsin (13)  - inverted half of sine wave
    - dese (14)  - double-exponential seat
    - desi (15)  - double-exponential sigmoid
    - losi (16)  - logistic sigmoid
    - sinc (17)  - sine cardinal function
    - isinc (18)  - inverted sine cardinal function
    - quat (19)  - quartic
    - quatr (20)  - quartic root
    - qsin2 (21)  - squared quarter of sine wave
    - hsin2 (22)  - squared half of sine wave

# `acrusher`

```elixir
@spec acrusher(FFix.Stream.t(),
  mode: integer() | String.t() | atom(),
  bits: float(),
  enable: String.t(),
  mix: float(),
  aa: float(),
  level_in: float(),
  level_out: float(),
  samples: float(),
  dc: float(),
  lfo: boolean(),
  lforange: float(),
  lforate: float()
) :: FFix.Stream.t()
```

Reduce audio bit resolution.

## Options

  * mode - set mode (from 0 to 1) (default lin)
    - lin (0)  - linear
    - log (1)  - logarithmic

  * bits - set bit reduction (from 1 to 64) (default 8)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * mix - set mix (from 0 to 1) (default 0.5)
  * aa - set anti-aliasing (from 0 to 1) (default 0.5)
  * level_in - set level in (from 0.015625 to 64) (default 1)
  * level_out - set level out (from 0.015625 to 64) (default 1)
  * samples - set sample reduction (from 1 to 250) (default 1)
  * dc - set DC (from 0.25 to 4) (default 1)
  * lfo - enable LFO (default false)
  * lforange - set LFO depth (from 1 to 250) (default 20)
  * lforate - set LFO rate (from 0.01 to 200) (default 0.3)

# `acue`

```elixir
@spec acue(FFix.Stream.t(), buffer: term(), cue: integer(), preroll: term()) ::
  FFix.Stream.t()
```

Delay filtering to match a cue.

## Options

  * buffer - buffer duration in seconds (default 0)
  * cue - cue unix timestamp in microseconds (from 0 to I64_MAX) (default 0)
  * preroll - preroll duration in seconds (default 0)

# `adeclick`

```elixir
@spec adeclick(FFix.Stream.t(),
  m: integer() | String.t() | atom(),
  a: float(),
  b: float(),
  enable: String.t(),
  w: float(),
  threshold: float(),
  o: float(),
  t: float(),
  overlap: float(),
  window: float(),
  arorder: float(),
  burst: float(),
  method: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Remove impulsive noise from input audio.

## Options

  * m - set overlap method (from 0 to 1) (default add)
    - add (0)  - overlap-add
    - a (0)  - overlap-add
    - save (1)  - overlap-save
    - s (1)  - overlap-save

  * a - set autoregression order (from 0 to 25) (default 2)
  * b - set burst fusion (from 0 to 10) (default 2)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * w - set window size (from 10 to 100) (default 55)
  * threshold - set threshold (from 1 to 100) (default 2)
  * o - set window overlap (from 50 to 95) (default 75)
  * t - set threshold (from 1 to 100) (default 2)
  * overlap - set window overlap (from 50 to 95) (default 75)
  * window - set window size (from 10 to 100) (default 55)
  * arorder - set autoregression order (from 0 to 25) (default 2)
  * burst - set burst fusion (from 0 to 10) (default 2)
  * method - set overlap method (from 0 to 1) (default add)
    - add (0)  - overlap-add
    - a (0)  - overlap-add
    - save (1)  - overlap-save
    - s (1)  - overlap-save

# `adeclip`

```elixir
@spec adeclip(FFix.Stream.t(),
  m: integer() | String.t() | atom(),
  a: float(),
  enable: String.t(),
  w: float(),
  threshold: float(),
  n: integer(),
  o: float(),
  t: float(),
  overlap: float(),
  window: float(),
  arorder: float(),
  method: integer() | String.t() | atom(),
  hsize: integer()
) :: FFix.Stream.t()
```

Remove clipping from input audio.

## Options

  * m - set overlap method (from 0 to 1) (default add)
    - add (0)  - overlap-add
    - a (0)  - overlap-add
    - save (1)  - overlap-save
    - s (1)  - overlap-save

  * a - set autoregression order (from 0 to 25) (default 8)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * w - set window size (from 10 to 100) (default 55)
  * threshold - set threshold (from 1 to 100) (default 10)
  * n - set histogram size (from 100 to 9999) (default 1000)
  * o - set window overlap (from 50 to 95) (default 75)
  * t - set threshold (from 1 to 100) (default 10)
  * overlap - set window overlap (from 50 to 95) (default 75)
  * window - set window size (from 10 to 100) (default 55)
  * arorder - set autoregression order (from 0 to 25) (default 8)
  * method - set overlap method (from 0 to 1) (default add)
    - add (0)  - overlap-add
    - a (0)  - overlap-add
    - save (1)  - overlap-save
    - s (1)  - overlap-save

  * hsize - set histogram size (from 100 to 9999) (default 1000)

# `adecorrelate`

```elixir
@spec adecorrelate(FFix.Stream.t(),
  enable: String.t(),
  seed: integer(),
  stages: integer()
) ::
  FFix.Stream.t()
```

Apply decorrelation to input audio.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * seed - set random seed (from -1 to UINT32_MAX) (default -1)
  * stages - set filtering stages (from 1 to 16) (default 6)

# `adelay`

```elixir
@spec adelay(FFix.Stream.t(), all: boolean(), enable: String.t(), delays: String.t()) ::
  FFix.Stream.t()
```

Delay one or more audio channels.

## Options

  * all - use last available delay for remained channels (default false)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * delays - set list of delays for each channel

# `adenorm`

```elixir
@spec adenorm(FFix.Stream.t(),
  type: integer() | String.t() | atom(),
  level: float(),
  enable: String.t()
) :: FFix.Stream.t()
```

Remedy denormals by adding extremely low-level noise.

## Options

  * type - set type (from 0 to 3) (default dc)
    - dc (0) 
    - ac (1) 
    - square (2) 
    - pulse (3) 

  * level - set level (from -451 to -90) (default -351)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero

# `aderivative`

```elixir
@spec aderivative(
  FFix.Stream.t(),
  [{:enable, String.t()}]
) :: FFix.Stream.t()
```

Compute derivative of input audio.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero

# `adrc`

```elixir
@spec adrc(FFix.Stream.t(),
  enable: String.t(),
  channels: String.t(),
  attack: float(),
  release: float(),
  transfer: String.t()
) :: FFix.Stream.t()
```

Audio Spectral Dynamic Range Controller.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * channels - set channels to filter (default "all")
  * attack - set the attack (from 1 to 1000) (default 50)
  * release - set the release (from 5 to 2000) (default 100)
  * transfer - set the transfer expression (default "p")

# `adynamicequalizer`

```elixir
@spec adynamicequalizer(FFix.Stream.t(),
  auto: integer() | String.t() | atom(),
  mode: integer() | String.t() | atom(),
  range: float(),
  enable: String.t(),
  precision: integer() | String.t() | atom(),
  threshold: float(),
  makeup: float(),
  ratio: float(),
  attack: float(),
  release: float(),
  dfrequency: float(),
  dqfactor: float(),
  tfrequency: float(),
  tqfactor: float(),
  dftype: integer() | String.t() | atom(),
  tftype: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Apply Dynamic Equalization of input audio.

## Options

  * auto - set auto threshold (from 1 to 4) (default off)
    - disabled (1) 
    - off (2) 
    - on (3) 
    - adaptive (4) 

  * mode - set mode (from -1 to 3) (default cutbelow)
    - listen (-1) 
    - cutbelow (0) 
    - cutabove (1) 
    - boostbelow (2) 
    - boostabove (3) 

  * range - set max gain (from 1 to 2000) (default 50)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * precision - set processing precision (from 0 to 2) (default auto)
    - auto (0)  - set auto processing precision
    - float (1)  - set single-floating point processing precision
    - double (2)  - set double-floating point processing precision

  * threshold - set detection threshold (from 0 to 100) (default 0)
  * makeup - set makeup gain (from 0 to 1000) (default 0)
  * ratio - set ratio factor (from 0 to 30) (default 1)
  * attack - set detection attack duration (from 0.01 to 2000) (default 20)
  * release - set detection release duration (from 0.01 to 2000) (default 200)
  * dfrequency - set detection frequency (from 2 to 1e+06) (default 1000)
  * dqfactor - set detection Q factor (from 0.001 to 1000) (default 1)
  * tfrequency - set target frequency (from 2 to 1e+06) (default 1000)
  * tqfactor - set target Q factor (from 0.001 to 1000) (default 1)
  * dftype - set detection filter type (from 0 to 3) (default bandpass)
    - bandpass (0) 
    - lowpass (1) 
    - highpass (2) 
    - peak (3) 

  * tftype - set target filter type (from 0 to 2) (default bell)
    - bell (0) 
    - lowshelf (1) 
    - highshelf (2) 

# `adynamicsmooth`

```elixir
@spec adynamicsmooth(FFix.Stream.t(),
  enable: String.t(),
  basefreq: float(),
  sensitivity: float()
) ::
  FFix.Stream.t()
```

Apply Dynamic Smoothing of input audio.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * basefreq - set base frequency (from 2 to 1e+06) (default 22050)
  * sensitivity - set smooth sensitivity (from 0 to 1e+06) (default 2)

# `aecho`

```elixir
@spec aecho(FFix.Stream.t(),
  decays: String.t(),
  in_gain: float(),
  out_gain: float(),
  delays: String.t()
) :: FFix.Stream.t()
```

Add echoing to the audio.

## Options

  * decays - set list of signal decays (default "0.5")
  * in_gain - set signal input gain (from 0 to 1) (default 0.6)
  * out_gain - set signal output gain (from 0 to 1) (default 0.3)
  * delays - set list of signal delays (default "1000")

# `aemphasis`

```elixir
@spec aemphasis(FFix.Stream.t(),
  type: integer() | String.t() | atom(),
  mode: integer() | String.t() | atom(),
  enable: String.t(),
  level_in: float(),
  level_out: float()
) :: FFix.Stream.t()
```

Audio emphasis.

## Options

  * type - set filter type (from 0 to 8) (default cd)
    - col (0)  - Columbia
    - emi (1)  - EMI
    - bsi (2)  - BSI (78RPM)
    - riaa (3)  - RIAA
    - cd (4)  - Compact Disc (CD)
    - 50fm (5)  - 50µs (FM)
    - 75fm (6)  - 75µs (FM)
    - 50kf (7)  - 50µs (FM-KF)
    - 75kf (8)  - 75µs (FM-KF)

  * mode - set filter mode (from 0 to 1) (default reproduction)
    - reproduction (0) 
    - production (1) 

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * level_in - set input gain (from 0 to 64) (default 1)
  * level_out - set output gain (from 0 to 64) (default 1)

# `aeval`

```elixir
@spec aeval(FFix.Stream.t(),
  exprs: String.t(),
  c: String.t(),
  enable: String.t(),
  channel_layout: String.t()
) :: FFix.Stream.t()
```

Filter audio signal according to a specified expression.

## Options

  * exprs - set the '|'-separated list of channels expressions
  * c - set channel layout
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * channel_layout - set channel layout

# `aexciter`

```elixir
@spec aexciter(FFix.Stream.t(),
  ceil: float(),
  listen: boolean(),
  enable: String.t(),
  amount: float(),
  blend: float(),
  freq: float(),
  level_in: float(),
  level_out: float(),
  drive: float()
) :: FFix.Stream.t()
```

Enhance high frequency part of audio.

## Options

  * ceil - set ceiling (from 9999 to 20000) (default 9999)
  * listen - enable listen mode (default false)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * amount - set amount (from 0 to 64) (default 1)
  * blend - set blend harmonics (from -10 to 10) (default 0)
  * freq - set scope (from 2000 to 12000) (default 7500)
  * level_in - set level in (from 0 to 64) (default 1)
  * level_out - set level out (from 0 to 64) (default 1)
  * drive - set harmonics (from 0.1 to 10) (default 8.5)

# `afade`

```elixir
@spec afade(FFix.Stream.t(),
  type: integer() | String.t() | atom(),
  st: term(),
  c: integer() | String.t() | atom(),
  enable: String.t(),
  d: term(),
  curve: integer() | String.t() | atom(),
  t: integer() | String.t() | atom(),
  duration: term(),
  nb_samples: integer(),
  ns: integer(),
  start_time: term(),
  start_sample: integer(),
  ss: integer(),
  silence: float(),
  unity: float()
) :: FFix.Stream.t()
```

Fade in/out input audio.

## Options

  * type - set the fade direction (from 0 to 1) (default in)
    - in (0)  - fade-in
    - out (1)  - fade-out

  * st - set time to start fading (default 0)
  * c - set fade curve type (from -1 to 22) (default tri)
    - nofade (-1)  - no fade; keep audio as-is
    - tri (0)  - linear slope
    - qsin (1)  - quarter of sine wave
    - esin (2)  - exponential sine wave
    - hsin (3)  - half of sine wave
    - log (4)  - logarithmic
    - ipar (5)  - inverted parabola
    - qua (6)  - quadratic
    - cub (7)  - cubic
    - squ (8)  - square root
    - cbr (9)  - cubic root
    - par (10)  - parabola
    - exp (11)  - exponential
    - iqsin (12)  - inverted quarter of sine wave
    - ihsin (13)  - inverted half of sine wave
    - dese (14)  - double-exponential seat
    - desi (15)  - double-exponential sigmoid
    - losi (16)  - logistic sigmoid
    - sinc (17)  - sine cardinal function
    - isinc (18)  - inverted sine cardinal function
    - quat (19)  - quartic
    - quatr (20)  - quartic root
    - qsin2 (21)  - squared quarter of sine wave
    - hsin2 (22)  - squared half of sine wave

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * d - set fade duration (default 0)
  * curve - set fade curve type (from -1 to 22) (default tri)
    - nofade (-1)  - no fade; keep audio as-is
    - tri (0)  - linear slope
    - qsin (1)  - quarter of sine wave
    - esin (2)  - exponential sine wave
    - hsin (3)  - half of sine wave
    - log (4)  - logarithmic
    - ipar (5)  - inverted parabola
    - qua (6)  - quadratic
    - cub (7)  - cubic
    - squ (8)  - square root
    - cbr (9)  - cubic root
    - par (10)  - parabola
    - exp (11)  - exponential
    - iqsin (12)  - inverted quarter of sine wave
    - ihsin (13)  - inverted half of sine wave
    - dese (14)  - double-exponential seat
    - desi (15)  - double-exponential sigmoid
    - losi (16)  - logistic sigmoid
    - sinc (17)  - sine cardinal function
    - isinc (18)  - inverted sine cardinal function
    - quat (19)  - quartic
    - quatr (20)  - quartic root
    - qsin2 (21)  - squared quarter of sine wave
    - hsin2 (22)  - squared half of sine wave

  * t - set the fade direction (from 0 to 1) (default in)
    - in (0)  - fade-in
    - out (1)  - fade-out

  * duration - set fade duration (default 0)
  * nb_samples - set number of samples for fade duration (from 1 to I64_MAX) (default 44100)
  * ns - set number of samples for fade duration (from 1 to I64_MAX) (default 44100)
  * start_time - set time to start fading (default 0)
  * start_sample - set number of first sample to start fading (from 0 to I64_MAX) (default 0)
  * ss - set number of first sample to start fading (from 0 to I64_MAX) (default 0)
  * silence - set the silence gain (from 0 to 1) (default 0)
  * unity - set the unity gain (from 0 to 1) (default 1)

# `afftdn`

```elixir
@spec afftdn(FFix.Stream.t(),
  bm: float(),
  nl: integer() | String.t() | atom(),
  enable: String.t(),
  output_mode: integer() | String.t() | atom(),
  nt: integer() | String.t() | atom(),
  tr: boolean(),
  gs: integer(),
  noise_reduction: float(),
  nr: float(),
  noise_floor: float(),
  nf: float(),
  noise_type: integer() | String.t() | atom(),
  band_noise: String.t(),
  bn: String.t(),
  residual_floor: float(),
  rf: float(),
  track_noise: boolean(),
  tn: boolean(),
  track_residual: boolean(),
  om: integer() | String.t() | atom(),
  adaptivity: float(),
  ad: float(),
  floor_offset: float(),
  fo: float(),
  noise_link: integer() | String.t() | atom(),
  band_multiplier: float(),
  sample_noise: integer() | String.t() | atom(),
  sn: integer() | String.t() | atom(),
  gain_smooth: integer()
) :: FFix.Stream.t()
```

Denoise audio samples using FFT.

## Options

  * bm - set band multiplier (from 0.2 to 5) (default 1.25)
  * nl - set the noise floor link (from 0 to 3) (default min)
    - none (0)  - none
    - min (1)  - min
    - max (2)  - max
    - average (3)  - average

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * output_mode - set output mode (from 0 to 2) (default output)
    - input (0)  - input
    - i (0)  - input
    - output (1)  - output
    - o (1)  - output
    - noise (2)  - noise
    - n (2)  - noise

  * nt - set the noise type (from 0 to 3) (default white)
    - white (0)  - white noise
    - w (0)  - white noise
    - vinyl (1)  - vinyl noise
    - v (1)  - vinyl noise
    - shellac (2)  - shellac noise
    - s (2)  - shellac noise
    - custom (3)  - custom noise
    - c (3)  - custom noise

  * tr - track residual (default false)
  * gs - set gain smooth radius (from 0 to 50) (default 0)
  * noise_reduction - set the noise reduction (from 0.01 to 97) (default 12)
  * nr - set the noise reduction (from 0.01 to 97) (default 12)
  * noise_floor - set the noise floor (from -80 to -20) (default -50)
  * nf - set the noise floor (from -80 to -20) (default -50)
  * noise_type - set the noise type (from 0 to 3) (default white)
    - white (0)  - white noise
    - w (0)  - white noise
    - vinyl (1)  - vinyl noise
    - v (1)  - vinyl noise
    - shellac (2)  - shellac noise
    - s (2)  - shellac noise
    - custom (3)  - custom noise
    - c (3)  - custom noise

  * band_noise - set the custom bands noise
  * bn - set the custom bands noise
  * residual_floor - set the residual floor (from -80 to -20) (default -38)
  * rf - set the residual floor (from -80 to -20) (default -38)
  * track_noise - track noise (default false)
  * tn - track noise (default false)
  * track_residual - track residual (default false)
  * om - set output mode (from 0 to 2) (default output)
    - input (0)  - input
    - i (0)  - input
    - output (1)  - output
    - o (1)  - output
    - noise (2)  - noise
    - n (2)  - noise

  * adaptivity - set adaptivity factor (from 0 to 1) (default 0.5)
  * ad - set adaptivity factor (from 0 to 1) (default 0.5)
  * floor_offset - set noise floor offset factor (from -2 to 2) (default 1)
  * fo - set noise floor offset factor (from -2 to 2) (default 1)
  * noise_link - set the noise floor link (from 0 to 3) (default min)
    - none (0)  - none
    - min (1)  - min
    - max (2)  - max
    - average (3)  - average

  * band_multiplier - set band multiplier (from 0.2 to 5) (default 1.25)
  * sample_noise - set sample noise mode (from 0 to 2) (default none)
    - none (0)  - none
    - start (1)  - start
    - begin (1)  - start
    - stop (2)  - stop
    - end (2)  - stop

  * sn - set sample noise mode (from 0 to 2) (default none)
    - none (0)  - none
    - start (1)  - start
    - begin (1)  - start
    - stop (2)  - stop
    - end (2)  - stop

  * gain_smooth - set gain smooth radius (from 0 to 50) (default 0)

# `afftfilt`

```elixir
@spec afftfilt(FFix.Stream.t(),
  real: String.t(),
  enable: String.t(),
  overlap: float(),
  win_func: integer() | String.t() | atom(),
  win_size: integer(),
  imag: String.t()
) :: FFix.Stream.t()
```

Apply arbitrary expressions to samples in frequency domain.

## Options

  * real - set channels real expressions (default "re")
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * overlap - set window overlap (from 0 to 1) (default 0.75)
  * win_func - set window function (from 0 to 20) (default hann)
    - rect (0)  - Rectangular
    - bartlett (4)  - Bartlett
    - hann (1)  - Hann
    - hanning (1)  - Hanning
    - hamming (2)  - Hamming
    - blackman (3)  - Blackman
    - welch (5)  - Welch
    - flattop (6)  - Flat-top
    - bharris (7)  - Blackman-Harris
    - bnuttall (8)  - Blackman-Nuttall
    - bhann (11)  - Bartlett-Hann
    - sine (9)  - Sine
    - nuttall (10)  - Nuttall
    - lanczos (12)  - Lanczos
    - gauss (13)  - Gauss
    - tukey (14)  - Tukey
    - dolph (15)  - Dolph-Chebyshev
    - cauchy (16)  - Cauchy
    - parzen (17)  - Parzen
    - poisson (18)  - Poisson
    - bohman (19)  - Bohman
    - kaiser (20)  - Kaiser

  * win_size - set window size (from 16 to 131072) (default 4096)
  * imag - set channels imaginary expressions (default "im")

# `aformat`

```elixir
@spec aformat(FFix.Stream.t(),
  f: [term()],
  r: [integer()],
  cl: [term()],
  sample_fmts: [term()],
  sample_rates: [integer()],
  channel_layouts: [term()]
) :: FFix.Stream.t()
```

Convert the input audio to one of the specified formats.

## Options

  * f - A '|'-separated list of sample formats.
  * r - A '|'-separated list of sample rates.
  * cl - A '|'-separated list of channel layouts.
  * sample_fmts - A '|'-separated list of sample formats.
  * sample_rates - A '|'-separated list of sample rates.
  * channel_layouts - A '|'-separated list of channel layouts.

# `afreqshift`

```elixir
@spec afreqshift(FFix.Stream.t(),
  level: float(),
  enable: String.t(),
  shift: float(),
  order: integer()
) ::
  FFix.Stream.t()
```

Apply frequency shifting to input audio.

## Options

  * level - set output level (from 0 to 1) (default 1)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * shift - set frequency shift (from -2.14748e+09 to INT_MAX) (default 0)
  * order - set filter order (from 1 to 16) (default 8)

# `afwtdn`

```elixir
@spec afwtdn(FFix.Stream.t(),
  profile: boolean(),
  enable: String.t(),
  levels: integer(),
  sigma: float(),
  samples: integer(),
  wavet: integer() | String.t() | atom(),
  percent: float(),
  adaptive: boolean(),
  softness: float()
) :: FFix.Stream.t()
```

Denoise audio stream using Wavelets.

## Options

  * profile - profile noise (default false)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * levels - set number of wavelet levels (from 1 to 12) (default 10)
  * sigma - set noise sigma (from 0 to 1) (default 0)
  * samples - set frame size in number of samples (from 512 to 65536) (default 8192)
  * wavet - set wavelet type (from 0 to 6) (default sym10)
    - sym2 (0)  - sym2
    - sym4 (1)  - sym4
    - rbior68 (2)  - rbior68
    - deb10 (3)  - deb10
    - sym10 (4)  - sym10
    - coif5 (5)  - coif5
    - bl3 (6)  - bl3

  * percent - set percent of full denoising (from 0 to 100) (default 85)
  * adaptive - adaptive profiling of noise (default false)
  * softness - set thresholding softness (from 0 to 10) (default 1)

# `agate`

```elixir
@spec agate(FFix.Stream.t(),
  link: integer() | String.t() | atom(),
  mode: integer() | String.t() | atom(),
  range: float(),
  enable: String.t(),
  threshold: float(),
  makeup: float(),
  ratio: float(),
  attack: float(),
  level_in: float(),
  release: float(),
  knee: float(),
  detection: integer() | String.t() | atom(),
  level_sc: float()
) :: FFix.Stream.t()
```

Audio gate.

## Options

  * link - set link (from 0 to 1) (default average)
    - average (0) 
    - maximum (1) 

  * mode - set mode (from 0 to 1) (default downward)
    - downward (0) 
    - upward (1) 

  * range - set max gain reduction (from 0 to 1) (default 0.06125)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * threshold - set threshold (from 0 to 1) (default 0.125)
  * makeup - set makeup gain (from 1 to 64) (default 1)
  * ratio - set ratio (from 1 to 9000) (default 2)
  * attack - set attack (from 0.01 to 9000) (default 20)
  * level_in - set input level (from 0.015625 to 64) (default 1)
  * release - set release (from 0.01 to 9000) (default 250)
  * knee - set knee (from 1 to 8) (default 2.82843)
  * detection - set detection (from 0 to 1) (default rms)
    - peak (0) 
    - rms (1) 

  * level_sc - set sidechain gain (from 0.015625 to 64) (default 1)

# `aintegral`

```elixir
@spec aintegral(
  FFix.Stream.t(),
  [{:enable, String.t()}]
) :: FFix.Stream.t()
```

Compute integral of input audio.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero

# `alatency`

```elixir
@spec alatency(
  FFix.Stream.t(),
  [{:enable, String.t()}]
) :: FFix.Stream.t()
```

Report audio filtering latency.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero

# `alimiter`

```elixir
@spec alimiter(FFix.Stream.t(),
  level: boolean(),
  asc: boolean(),
  enable: String.t(),
  limit: float(),
  latency: boolean(),
  attack: float(),
  level_in: float(),
  level_out: float(),
  release: float(),
  asc_level: float()
) :: FFix.Stream.t()
```

Audio lookahead limiter.

## Options

  * level - auto level (default true)
  * asc - enable asc (default false)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * limit - set limit (from 0.0625 to 1) (default 1)
  * latency - compensate delay (default false)
  * attack - set attack (from 0.1 to 80) (default 5)
  * level_in - set input level (from 0.015625 to 64) (default 1)
  * level_out - set output level (from 0.015625 to 64) (default 1)
  * release - set release (from 1 to 8000) (default 50)
  * asc_level - set asc level (from 0 to 1) (default 0.5)

# `allpass`

```elixir
@spec allpass(FFix.Stream.t(),
  normalize: boolean(),
  c: String.t(),
  m: float(),
  f: float(),
  a: integer() | String.t() | atom(),
  enable: String.t(),
  r: integer() | String.t() | atom(),
  width: float(),
  precision: integer() | String.t() | atom(),
  w: float(),
  mix: float(),
  n: boolean(),
  o: integer(),
  transform: integer() | String.t() | atom(),
  t: integer() | String.t() | atom(),
  order: integer(),
  channels: String.t(),
  frequency: float(),
  width_type: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Apply a two-pole all-pass filter.

## Options

  * normalize - normalize coefficients (default false)
  * c - set channels to filter (default "all")
  * m - set mix (from 0 to 1) (default 1)
  * f - set central frequency (from 0 to 999999) (default 3000)
  * a - set transform type (from 0 to 6) (default di)
    - di (0)  - direct form I
    - dii (1)  - direct form II
    - tdi (2)  - transposed direct form I
    - tdii (3)  - transposed direct form II
    - latt (4)  - lattice-ladder form
    - svf (5)  - state variable filter form
    - zdf (6)  - zero-delay filter form

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * r - set filtering precision (from -1 to 3) (default auto)
    - auto (-1)  - automatic
    - s16 (0)  - signed 16-bit
    - s32 (1)  - signed 32-bit
    - f32 (2)  - floating-point single
    - f64 (3)  - floating-point double

  * width - set width (from 0 to 99999) (default 0.707)
  * precision - set filtering precision (from -1 to 3) (default auto)
    - auto (-1)  - automatic
    - s16 (0)  - signed 16-bit
    - s32 (1)  - signed 32-bit
    - f32 (2)  - floating-point single
    - f64 (3)  - floating-point double

  * w - set width (from 0 to 99999) (default 0.707)
  * mix - set mix (from 0 to 1) (default 1)
  * n - normalize coefficients (default false)
  * o - set filter order (from 1 to 2) (default 2)
  * transform - set transform type (from 0 to 6) (default di)
    - di (0)  - direct form I
    - dii (1)  - direct form II
    - tdi (2)  - transposed direct form I
    - tdii (3)  - transposed direct form II
    - latt (4)  - lattice-ladder form
    - svf (5)  - state variable filter form
    - zdf (6)  - zero-delay filter form

  * t - set filter-width type (from 1 to 5) (default q)
    - h (1)  - Hz
    - q (3)  - Q-Factor
    - o (2)  - octave
    - s (4)  - slope
    - k (5)  - kHz

  * order - set filter order (from 1 to 2) (default 2)
  * channels - set channels to filter (default "all")
  * frequency - set central frequency (from 0 to 999999) (default 3000)
  * width_type - set filter-width type (from 1 to 5) (default q)
    - h (1)  - Hz
    - q (3)  - Q-Factor
    - o (2)  - octave
    - s (4)  - slope
    - k (5)  - kHz

# `aloop`

```elixir
@spec aloop(FFix.Stream.t(),
  size: integer(),
  start: integer(),
  time: term(),
  loop: integer()
) ::
  FFix.Stream.t()
```

Loop audio samples.

## Options

  * size - max number of samples to loop (from 0 to INT_MAX) (default 0)
  * start - set the loop start sample (from -1 to I64_MAX) (default 0)
  * time - set the loop start time (default INT64_MAX)
  * loop - number of loops (from -1 to INT_MAX) (default 0)

# `ametadata`

```elixir
@spec ametadata(FFix.Stream.t(),
  function: integer() | String.t() | atom(),
  value: String.t(),
  file: String.t(),
  mode: integer() | String.t() | atom(),
  expr: String.t(),
  enable: String.t(),
  key: String.t(),
  direct: boolean()
) :: FFix.Stream.t()
```

Manipulate audio frame metadata.

## Options

  * function - function for comparing values (from 0 to 6) (default same_str)
    - same_str (0) 
    - starts_with (1) 
    - less (2) 
    - equal (3) 
    - greater (4) 
    - expr (5) 
    - ends_with (6) 

  * value - set metadata value
  * file - set file where to print metadata information
  * mode - set a mode of operation (from 0 to 4) (default select)
    - select (0)  - select frame
    - add (1)  - add new metadata
    - modify (2)  - modify metadata
    - delete (3)  - delete metadata
    - print (4)  - print metadata

  * expr - set expression for expr function
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * key - set metadata key
  * direct - reduce buffering when printing to user-set file or pipe (default false)

# `amultiply`

```elixir
@spec amultiply(FFix.Stream.t(), FFix.Stream.t(), []) :: FFix.Stream.t()
```

Multiply two audio streams.

## Options

# `anlmdn`

```elixir
@spec anlmdn(FFix.Stream.t(),
  output: integer() | String.t() | atom(),
  p: term(),
  m: float(),
  s: float(),
  enable: String.t(),
  r: term(),
  patch: term(),
  o: integer() | String.t() | atom(),
  strength: float(),
  research: term(),
  smooth: float()
) :: FFix.Stream.t()
```

Reduce broadband noise from stream using Non-Local Means.

## Options

  * output - set output mode (from 0 to 2) (default o)
    - i (0)  - input
    - o (1)  - output
    - n (2)  - noise

  * p - set patch duration (default 0.002)
  * m - set smooth factor (from 1 to 1000) (default 11)
  * s - set denoising strength (from 1e-05 to 10000) (default 1e-05)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * r - set research duration (default 0.006)
  * patch - set patch duration (default 0.002)
  * o - set output mode (from 0 to 2) (default o)
    - i (0)  - input
    - o (1)  - output
    - n (2)  - noise

  * strength - set denoising strength (from 1e-05 to 10000) (default 1e-05)
  * research - set research duration (default 0.006)
  * smooth - set smooth factor (from 1 to 1000) (default 11)

# `anlmf`

```elixir
@spec anlmf(FFix.Stream.t(), FFix.Stream.t(),
  enable: String.t(),
  precision: integer() | String.t() | atom(),
  order: integer(),
  eps: float(),
  mu: float(),
  out_mode: integer() | String.t() | atom(),
  leakage: float()
) :: FFix.Stream.t()
```

Apply Normalized Least-Mean-Fourth algorithm to first audio stream.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * precision - set processing precision (from 0 to 2) (default auto)
    - auto (0)  - set auto processing precision
    - float (1)  - set single-floating point processing precision
    - double (2)  - set double-floating point processing precision

  * order - set the filter order (from 1 to 32767) (default 256)
  * eps - set the filter eps (from 0 to 1) (default 1)
  * mu - set the filter mu (from 0 to 2) (default 0.75)
  * out_mode - set output mode (from 0 to 4) (default o)
    - i (0)  - input
    - d (1)  - desired
    - o (2)  - output
    - n (3)  - noise
    - e (4)  - error

  * leakage - set the filter leakage (from 0 to 1) (default 0)

# `anlms`

```elixir
@spec anlms(FFix.Stream.t(), FFix.Stream.t(),
  enable: String.t(),
  precision: integer() | String.t() | atom(),
  order: integer(),
  eps: float(),
  mu: float(),
  out_mode: integer() | String.t() | atom(),
  leakage: float()
) :: FFix.Stream.t()
```

Apply Normalized Least-Mean-Squares algorithm to first audio stream.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * precision - set processing precision (from 0 to 2) (default auto)
    - auto (0)  - set auto processing precision
    - float (1)  - set single-floating point processing precision
    - double (2)  - set double-floating point processing precision

  * order - set the filter order (from 1 to 32767) (default 256)
  * eps - set the filter eps (from 0 to 1) (default 1)
  * mu - set the filter mu (from 0 to 2) (default 0.75)
  * out_mode - set output mode (from 0 to 4) (default o)
    - i (0)  - input
    - d (1)  - desired
    - o (2)  - output
    - n (3)  - noise
    - e (4)  - error

  * leakage - set the filter leakage (from 0 to 1) (default 0)

# `anull`

```elixir
@spec anull(
  FFix.Stream.t(),
  []
) :: FFix.Stream.t()
```

Pass the source unchanged to the output.

## Options

# `apad`

```elixir
@spec apad(FFix.Stream.t(),
  packet_size: integer(),
  enable: String.t(),
  pad_len: integer(),
  whole_len: integer(),
  pad_dur: term(),
  whole_dur: term()
) :: FFix.Stream.t()
```

Pad audio with silence.

## Options

  * packet_size - set silence packet size (from 0 to INT_MAX) (default 4096)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * pad_len - set number of samples of silence to add (from -1 to I64_MAX) (default -1)
  * whole_len - set minimum target number of samples in the audio stream (from -1 to I64_MAX) (default -1)
  * pad_dur - set duration of silence to add (default -0.000001)
  * whole_dur - set minimum target duration in the audio stream (default -0.000001)

# `aperms`

```elixir
@spec aperms(FFix.Stream.t(),
  mode: integer() | String.t() | atom(),
  enable: String.t(),
  seed: integer()
) :: FFix.Stream.t()
```

Set permissions for the output audio frame.

## Options

  * mode - select permissions mode (from 0 to 4) (default none)
    - none (0)  - do nothing
    - ro (1)  - set all output frames read-only
    - rw (2)  - set all output frames writable
    - toggle (3)  - switch permissions
    - random (4)  - set permissions randomly

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * seed - set the seed for the random mode (from -1 to UINT32_MAX) (default -1)

# `aphaser`

```elixir
@spec aphaser(FFix.Stream.t(),
  type: integer() | String.t() | atom(),
  speed: float(),
  delay: float(),
  in_gain: float(),
  out_gain: float(),
  decay: float()
) :: FFix.Stream.t()
```

Add a phasing effect to the audio.

## Options

  * type - set modulation type (from 0 to 1) (default triangular)
    - triangular (1) 
    - t (1) 
    - sinusoidal (0) 
    - s (0) 

  * speed - set modulation speed (from 0.1 to 2) (default 0.5)
  * delay - set delay in milliseconds (from 0 to 5) (default 3)
  * in_gain - set input gain (from 0 to 1) (default 0.4)
  * out_gain - set output gain (from 0 to 1e+09) (default 0.74)
  * decay - set decay (from 0 to 0.99) (default 0.4)

# `aphaseshift`

```elixir
@spec aphaseshift(FFix.Stream.t(),
  level: float(),
  enable: String.t(),
  shift: float(),
  order: integer()
) ::
  FFix.Stream.t()
```

Apply phase shifting to input audio.

## Options

  * level - set output level (from 0 to 1) (default 1)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * shift - set phase shift (from -1 to 1) (default 0)
  * order - set filter order (from 1 to 16) (default 8)

# `apsnr`

```elixir
@spec apsnr(FFix.Stream.t(), FFix.Stream.t(), [{:enable, String.t()}]) ::
  FFix.Stream.t()
```

Measure Audio Peak Signal-to-Noise Ratio.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero

# `apsyclip`

```elixir
@spec apsyclip(FFix.Stream.t(),
  level: boolean(),
  enable: String.t(),
  diff: boolean(),
  level_in: float(),
  level_out: float(),
  adaptive: float(),
  clip: float(),
  iterations: integer()
) :: FFix.Stream.t()
```

Audio Psychoacoustic Clipper.

## Options

  * level - set auto level (default false)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * diff - enable difference (default false)
  * level_in - set input level (from 0.015625 to 64) (default 1)
  * level_out - set output level (from 0.015625 to 64) (default 1)
  * adaptive - set adaptive distortion (from 0 to 1) (default 0.5)
  * clip - set clip level (from 0.015625 to 1) (default 1)
  * iterations - set iterations (from 1 to 20) (default 10)

# `apulsator`

```elixir
@spec apulsator(FFix.Stream.t(),
  mode: integer() | String.t() | atom(),
  width: float(),
  amount: float(),
  level_in: float(),
  level_out: float(),
  offset_l: float(),
  offset_r: float(),
  timing: integer() | String.t() | atom(),
  bpm: float(),
  ms: integer(),
  hz: float()
) :: FFix.Stream.t()
```

Audio pulsator.

## Options

  * mode - set mode (from 0 to 4) (default sine)
    - sine (0) 
    - triangle (1) 
    - square (2) 
    - sawup (3) 
    - sawdown (4) 

  * width - set pulse width (from 0 to 2) (default 1)
  * amount - set modulation (from 0 to 1) (default 1)
  * level_in - set input gain (from 0.015625 to 64) (default 1)
  * level_out - set output gain (from 0.015625 to 64) (default 1)
  * offset_l - set offset L (from 0 to 1) (default 0)
  * offset_r - set offset R (from 0 to 1) (default 0.5)
  * timing - set timing (from 0 to 2) (default hz)
    - bpm (0) 
    - ms (1) 
    - hz (2) 

  * bpm - set BPM (from 30 to 300) (default 120)
  * ms - set ms (from 10 to 2000) (default 500)
  * hz - set frequency (from 0.01 to 100) (default 2)

# `arealtime`

```elixir
@spec arealtime(FFix.Stream.t(), speed: float(), limit: term()) :: FFix.Stream.t()
```

Slow down filtering to match realtime.

## Options

  * speed - speed factor (from DBL_MIN to DBL_MAX) (default 1)
  * limit - sleep time limit (default 2)

# `aresample`

```elixir
@spec aresample(
  FFix.Stream.t(),
  [{:sample_rate, integer()}]
) :: FFix.Stream.t()
```

Resample audio data.

## Options

  * sample_rate - (from 0 to INT_MAX) (default 0)

# `areverse`

```elixir
@spec areverse(
  FFix.Stream.t(),
  []
) :: FFix.Stream.t()
```

Reverse an audio clip.

## Options

# `arls`

```elixir
@spec arls(FFix.Stream.t(), FFix.Stream.t(),
  enable: String.t(),
  precision: integer() | String.t() | atom(),
  lambda: float(),
  order: integer(),
  delta: float(),
  out_mode: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Apply Recursive Least Squares algorithm to first audio stream.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * precision - set processing precision (from 0 to 2) (default auto)
    - auto (0)  - set auto processing precision
    - float (1)  - set single-floating point processing precision
    - double (2)  - set double-floating point processing precision

  * lambda - set the filter lambda (from 0 to 1) (default 1)
  * order - set the filter order (from 1 to 32767) (default 16)
  * delta - set the filter delta (from 0 to 32767) (default 2)
  * out_mode - set output mode (from 0 to 4) (default o)
    - i (0)  - input
    - d (1)  - desired
    - o (2)  - output
    - n (3)  - noise
    - e (4)  - error

# `arnndn`

```elixir
@spec arnndn(FFix.Stream.t(),
  m: String.t(),
  enable: String.t(),
  mix: float(),
  model: String.t()
) ::
  FFix.Stream.t()
```

Reduce noise from speech using Recurrent Neural Networks.

## Options

  * m - set model name
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * mix - set output vs input mix (from -1 to 1) (default 1)
  * model - set model name

# `asdr`

```elixir
@spec asdr(FFix.Stream.t(), FFix.Stream.t(), [{:enable, String.t()}]) ::
  FFix.Stream.t()
```

Measure Audio Signal-to-Distortion Ratio.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero

# `asendcmd`

```elixir
@spec asendcmd(FFix.Stream.t(),
  filename: String.t(),
  c: String.t(),
  f: String.t(),
  commands: String.t()
) :: FFix.Stream.t()
```

Send commands to filters.

## Options

  * filename - set commands file
  * c - set commands
  * f - set commands file
  * commands - set commands

# `asetnsamples`

```elixir
@spec asetnsamples(FFix.Stream.t(),
  p: boolean(),
  pad: boolean(),
  enable: String.t(),
  n: integer(),
  nb_out_samples: integer()
) :: FFix.Stream.t()
```

Set the number of samples for each output audio frames.

## Options

  * p - pad last frame with zeros (default true)
  * pad - pad last frame with zeros (default true)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * n - set the number of per-frame output samples (from 1 to INT_MAX) (default 1024)
  * nb_out_samples - set the number of per-frame output samples (from 1 to INT_MAX) (default 1024)

# `asetpts`

```elixir
@spec asetpts(
  FFix.Stream.t(),
  [{:expr, String.t()}]
) :: FFix.Stream.t()
```

Set PTS for the output audio frame.

## Options

  * expr - Expression determining the frame timestamp (default "PTS")

# `asetrate`

```elixir
@spec asetrate(FFix.Stream.t(), r: integer(), sample_rate: integer()) ::
  FFix.Stream.t()
```

Change the sample rate without altering the data.

## Options

  * r - set the sample rate (from 1 to INT_MAX) (default 44100)
  * sample_rate - set the sample rate (from 1 to INT_MAX) (default 44100)

# `asettb`

```elixir
@spec asettb(FFix.Stream.t(), expr: String.t(), tb: String.t()) :: FFix.Stream.t()
```

Set timebase for the audio output link.

## Options

  * expr - set expression determining the output timebase (default "intb")
  * tb - set expression determining the output timebase (default "intb")

# `ashowinfo`

```elixir
@spec ashowinfo(
  FFix.Stream.t(),
  []
) :: FFix.Stream.t()
```

Show textual information for each audio frame.

## Options

# `asidedata`

```elixir
@spec asidedata(FFix.Stream.t(),
  type: integer() | String.t() | atom(),
  mode: integer() | String.t() | atom(),
  enable: String.t()
) :: FFix.Stream.t()
```

Manipulate audio frame side data.

## Options

  * type - set side data type (from -1 to INT_MAX) (default -1)
    - PANSCAN (0) 
    - A53_CC (1) 
    - STEREO3D (2) 
    - MATRIXENCODING (3) 
    - DOWNMIX_INFO (4) 
    - REPLAYGAIN (5) 
    - DISPLAYMATRIX (6) 
    - AFD (7) 
    - MOTION_VECTORS (8) 
    - SKIP_SAMPLES (9) 
    - AUDIO_SERVICE_TYPE 10
    - MASTERING_DISPLAY_METADATA 11
    - GOP_TIMECODE (12) 
    - SPHERICAL (13) 
    - CONTENT_LIGHT_LEVEL 14
    - ICC_PROFILE (15) 
    - S12M_TIMECOD (16) 
    - DYNAMIC_HDR_PLUS 17
    - REGIONS_OF_INTEREST 18
    - VIDEO_ENC_PARAMS 19
    - SEI_UNREGISTERED 20
    - FILM_GRAIN_PARAMS 21
    - DETECTION_BOUNDING_BOXES 22
    - DETECTION_BBOXES 22
    - DOVI_RPU_BUFFER 23
    - DOVI_METADATA (24) 
    - DYNAMIC_HDR_VIVID 25
    - AMBIENT_VIEWING_ENVIRONMENT 26
    - VIDEO_HINT (27) 

  * mode - set a mode of operation (from 0 to 1) (default select)
    - select (0)  - select frame
    - delete (1)  - delete side data

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero

# `asisdr`

```elixir
@spec asisdr(FFix.Stream.t(), FFix.Stream.t(), [{:enable, String.t()}]) ::
  FFix.Stream.t()
```

Measure Audio Scale-Invariant Signal-to-Distortion Ratio.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero

# `asoftclip`

```elixir
@spec asoftclip(FFix.Stream.t(),
  output: float(),
  type: integer() | String.t() | atom(),
  enable: String.t(),
  threshold: float(),
  param: float(),
  oversample: integer()
) :: FFix.Stream.t()
```

Audio Soft Clipper.

## Options

  * output - set softclip output gain (from 1e-06 to 16) (default 1)
  * type - set softclip type (from -1 to 7) (default tanh)
    - hard (-1) 
    - tanh (0) 
    - atan (1) 
    - cubic (2) 
    - exp (3) 
    - alg (4) 
    - quintic (5) 
    - sin (6) 
    - erf (7) 

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * threshold - set softclip threshold (from 1e-06 to 1) (default 1)
  * param - set softclip parameter (from 0.01 to 3) (default 1)
  * oversample - set oversample factor (from 1 to 64) (default 1)

# `aspectralstats`

```elixir
@spec aspectralstats(FFix.Stream.t(),
  overlap: float(),
  win_func: integer() | String.t() | atom(),
  win_size: integer(),
  measure: integer() | String.t() | atom() | [String.t() | atom()]
) :: FFix.Stream.t()
```

Show frequency domain statistics about audio frames.

## Options

  * overlap - set window overlap (from 0 to 1) (default 0.5)
  * win_func - set window function (from 0 to 20) (default hann)
    - rect (0)  - Rectangular
    - bartlett (4)  - Bartlett
    - hann (1)  - Hann
    - hanning (1)  - Hanning
    - hamming (2)  - Hamming
    - blackman (3)  - Blackman
    - welch (5)  - Welch
    - flattop (6)  - Flat-top
    - bharris (7)  - Blackman-Harris
    - bnuttall (8)  - Blackman-Nuttall
    - bhann (11)  - Bartlett-Hann
    - sine (9)  - Sine
    - nuttall (10)  - Nuttall
    - lanczos (12)  - Lanczos
    - gauss (13)  - Gauss
    - tukey (14)  - Tukey
    - dolph (15)  - Dolph-Chebyshev
    - cauchy (16)  - Cauchy
    - parzen (17)  - Parzen
    - poisson (18)  - Poisson
    - bohman (19)  - Bohman
    - kaiser (20)  - Kaiser

  * win_size - set the window size (from 32 to 65536) (default 2048)
  * measure - select the parameters which are measured (default all+mean+variance+centroid+spread+skewness+kurtosis+entropy+flatness+crest+flux+slope+decrease+rolloff)
    - none
    - all
    - mean
    - variance
    - centroid
    - spread
    - skewness
    - kurtosis
    - entropy
    - flatness
    - crest
    - flux
    - slope
    - decrease
    - rolloff

# `astats`

```elixir
@spec astats(FFix.Stream.t(),
  reset: integer(),
  length: float(),
  metadata: boolean(),
  measure_perchannel: integer() | String.t() | atom() | [String.t() | atom()],
  measure_overall: integer() | String.t() | atom() | [String.t() | atom()]
) :: FFix.Stream.t()
```

Show time domain statistics about audio frames.

## Options

  * reset - Set the number of frames over which cumulative stats are calculated before being reset (from 0 to INT_MAX) (default 0)
  * length - set the window length (from 0 to 10) (default 0.05)
  * metadata - inject metadata in the filtergraph (default false)
  * measure_perchannel - Select the parameters which are measured per channel (default all+Bit_depth+Crest_factor+DC_offset+Dynamic_range+Entropy+Flat_factor+Max_difference+Max_level+Mean_difference+Min_difference+Min_level+Noise_floor+Noise_floor_count+Number_of_Infs+Number_of_NaNs+Number_of_denormals+Number_of_samples+Peak_count+Peak_level+RMS_difference+RMS_level+RMS_peak+RMS_trough+Zero_crossings+Zero_crossings_rate+Abs_Peak_count)
    - none
    - all
    - Bit_depth
    - Crest_factor
    - DC_offset
    - Dynamic_range
    - Entropy
    - Flat_factor
    - Max_difference
    - Max_level
    - Mean_difference
    - Min_difference
    - Min_level
    - Noise_floor
    - Noise_floor_count
    - Number_of_Infs
    - Number_of_NaNs
    - Number_of_denormals
    - Number_of_samples
    - Peak_count
    - Peak_level
    - RMS_difference
    - RMS_level
    - RMS_peak
    - RMS_trough
    - Zero_crossings
    - Zero_crossings_rate
    - Abs_Peak_count

  * measure_overall - Select the parameters which are measured overall (default all+Bit_depth+Crest_factor+DC_offset+Dynamic_range+Entropy+Flat_factor+Max_difference+Max_level+Mean_difference+Min_difference+Min_level+Noise_floor+Noise_floor_count+Number_of_Infs+Number_of_NaNs+Number_of_denormals+Number_of_samples+Peak_count+Peak_level+RMS_difference+RMS_level+RMS_peak+RMS_trough+Zero_crossings+Zero_crossings_rate+Abs_Peak_count)
    - none
    - all
    - Bit_depth
    - Crest_factor
    - DC_offset
    - Dynamic_range
    - Entropy
    - Flat_factor
    - Max_difference
    - Max_level
    - Mean_difference
    - Min_difference
    - Min_level
    - Noise_floor
    - Noise_floor_count
    - Number_of_Infs
    - Number_of_NaNs
    - Number_of_denormals
    - Number_of_samples
    - Peak_count
    - Peak_level
    - RMS_difference
    - RMS_level
    - RMS_peak
    - RMS_trough
    - Zero_crossings
    - Zero_crossings_rate
    - Abs_Peak_count

# `asubboost`

```elixir
@spec asubboost(FFix.Stream.t(),
  enable: String.t(),
  delay: float(),
  feedback: float(),
  channels: String.t(),
  dry: float(),
  wet: float(),
  slope: float(),
  cutoff: float(),
  decay: float(),
  boost: float()
) :: FFix.Stream.t()
```

Boost subwoofer frequencies.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * delay - set delay (from 1 to 100) (default 20)
  * feedback - set feedback (from 0 to 1) (default 0.9)
  * channels - set channels to filter (default "all")
  * dry - set dry gain (from 0 to 1) (default 1)
  * wet - set wet gain (from 0 to 1) (default 1)
  * slope - set slope (from 0.0001 to 1) (default 0.5)
  * cutoff - set cutoff (from 50 to 900) (default 100)
  * decay - set decay (from 0 to 1) (default 0)
  * boost - set max boost (from 1 to 12) (default 2)

# `asubcut`

```elixir
@spec asubcut(FFix.Stream.t(),
  level: float(),
  enable: String.t(),
  order: integer(),
  cutoff: float()
) ::
  FFix.Stream.t()
```

Cut subwoofer frequencies.

## Options

  * level - set input level (from 0 to 1) (default 1)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * order - set filter order (from 3 to 20) (default 10)
  * cutoff - set cutoff frequency (from 2 to 200) (default 20)

# `asupercut`

```elixir
@spec asupercut(FFix.Stream.t(),
  level: float(),
  enable: String.t(),
  order: integer(),
  cutoff: float()
) ::
  FFix.Stream.t()
```

Cut super frequencies.

## Options

  * level - set input level (from 0 to 1) (default 1)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * order - set filter order (from 3 to 20) (default 10)
  * cutoff - set cutoff frequency (from 20000 to 192000) (default 20000)

# `asuperpass`

```elixir
@spec asuperpass(FFix.Stream.t(),
  level: float(),
  enable: String.t(),
  order: integer(),
  centerf: float(),
  qfactor: float()
) :: FFix.Stream.t()
```

Apply high order Butterworth band-pass filter.

## Options

  * level - set input level (from 0 to 2) (default 1)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * order - set filter order (from 4 to 20) (default 4)
  * centerf - set center frequency (from 2 to 999999) (default 1000)
  * qfactor - set Q-factor (from 0.01 to 100) (default 1)

# `asuperstop`

```elixir
@spec asuperstop(FFix.Stream.t(),
  level: float(),
  enable: String.t(),
  order: integer(),
  centerf: float(),
  qfactor: float()
) :: FFix.Stream.t()
```

Apply high order Butterworth band-stop filter.

## Options

  * level - set input level (from 0 to 2) (default 1)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * order - set filter order (from 4 to 20) (default 4)
  * centerf - set center frequency (from 2 to 999999) (default 1000)
  * qfactor - set Q-factor (from 0.01 to 100) (default 1)

# `atempo`

```elixir
@spec atempo(
  FFix.Stream.t(),
  [{:tempo, float()}]
) :: FFix.Stream.t()
```

Adjust audio tempo.

## Options

  * tempo - set tempo scale factor (from 0.5 to 100) (default 1)

# `atilt`

```elixir
@spec atilt(FFix.Stream.t(),
  level: float(),
  enable: String.t(),
  width: float(),
  order: integer(),
  freq: float(),
  slope: float()
) :: FFix.Stream.t()
```

Apply spectral tilt to audio.

## Options

  * level - set input level (from 0 to 4) (default 1)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * width - set filter width (from 100 to 10000) (default 1000)
  * order - set filter order (from 2 to 30) (default 5)
  * freq - set central frequency (from 20 to 192000) (default 10000)
  * slope - set filter slope (from -1 to 1) (default 0)

# `atrim`

```elixir
@spec atrim(FFix.Stream.t(),
  start: term(),
  end: term(),
  duration: term(),
  starti: term(),
  endi: term(),
  start_pts: integer(),
  end_pts: integer(),
  durationi: term(),
  start_sample: integer(),
  end_sample: integer()
) :: FFix.Stream.t()
```

Pick one continuous section from the input, drop the rest.

## Options

  * start - Timestamp of the first frame that should be passed (default INT64_MAX)
  * end - Timestamp of the first frame that should be dropped again (default INT64_MAX)
  * duration - Maximum duration of the output (default 0)
  * starti - Timestamp of the first frame that should be passed (default INT64_MAX)
  * endi - Timestamp of the first frame that should be dropped again (default INT64_MAX)
  * start_pts - Timestamp of the first frame that should be  passed (from I64_MIN to I64_MAX) (default I64_MIN)
  * end_pts - Timestamp of the first frame that should be dropped again (from I64_MIN to I64_MAX) (default I64_MIN)
  * durationi - Maximum duration of the output (default 0)
  * start_sample - Number of the first audio sample that should be passed to the output (from -1 to I64_MAX) (default -1)
  * end_sample - Number of the first audio sample that should be dropped again (from 0 to I64_MAX) (default I64_MAX)

# `axcorrelate`

```elixir
@spec axcorrelate(FFix.Stream.t(), FFix.Stream.t(),
  size: integer(),
  algo: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Cross-correlate two audio streams.

## Options

  * size - set the segment size (from 2 to 131072) (default 256)
  * algo - set the algorithm (from 0 to 2) (default best)
    - slow (0)  - slow algorithm
    - fast (1)  - fast algorithm
    - best (2)  - best algorithm

# `azmq`

```elixir
@spec azmq(FFix.Stream.t(), b: String.t(), bind_address: String.t()) ::
  FFix.Stream.t()
```

Receive commands through ZMQ and broker them to filters.

## Options

  * b - set bind address (default "tcp://*:5555")
  * bind_address - set bind address (default "tcp://*:5555")

# `bandpass`

```elixir
@spec bandpass(FFix.Stream.t(),
  normalize: boolean(),
  c: String.t(),
  m: float(),
  f: float(),
  a: integer() | String.t() | atom(),
  b: integer(),
  enable: String.t(),
  r: integer() | String.t() | atom(),
  width: float(),
  precision: integer() | String.t() | atom(),
  w: float(),
  mix: float(),
  n: boolean(),
  transform: integer() | String.t() | atom(),
  t: integer() | String.t() | atom(),
  channels: String.t(),
  frequency: float(),
  width_type: integer() | String.t() | atom(),
  blocksize: integer(),
  csg: boolean()
) :: FFix.Stream.t()
```

Apply a two-pole Butterworth band-pass filter.

## Options

  * normalize - normalize coefficients (default false)
  * c - set channels to filter (default "all")
  * m - set mix (from 0 to 1) (default 1)
  * f - set central frequency (from 0 to 999999) (default 3000)
  * a - set transform type (from 0 to 6) (default di)
    - di (0)  - direct form I
    - dii (1)  - direct form II
    - tdi (2)  - transposed direct form I
    - tdii (3)  - transposed direct form II
    - latt (4)  - lattice-ladder form
    - svf (5)  - state variable filter form
    - zdf (6)  - zero-delay filter form

  * b - set the block size (from 0 to 32768) (default 0)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * r - set filtering precision (from -1 to 3) (default auto)
    - auto (-1)  - automatic
    - s16 (0)  - signed 16-bit
    - s32 (1)  - signed 32-bit
    - f32 (2)  - floating-point single
    - f64 (3)  - floating-point double

  * width - set width (from 0 to 99999) (default 0.5)
  * precision - set filtering precision (from -1 to 3) (default auto)
    - auto (-1)  - automatic
    - s16 (0)  - signed 16-bit
    - s32 (1)  - signed 32-bit
    - f32 (2)  - floating-point single
    - f64 (3)  - floating-point double

  * w - set width (from 0 to 99999) (default 0.5)
  * mix - set mix (from 0 to 1) (default 1)
  * n - normalize coefficients (default false)
  * transform - set transform type (from 0 to 6) (default di)
    - di (0)  - direct form I
    - dii (1)  - direct form II
    - tdi (2)  - transposed direct form I
    - tdii (3)  - transposed direct form II
    - latt (4)  - lattice-ladder form
    - svf (5)  - state variable filter form
    - zdf (6)  - zero-delay filter form

  * t - set filter-width type (from 1 to 5) (default q)
    - h (1)  - Hz
    - q (3)  - Q-Factor
    - o (2)  - octave
    - s (4)  - slope
    - k (5)  - kHz

  * channels - set channels to filter (default "all")
  * frequency - set central frequency (from 0 to 999999) (default 3000)
  * width_type - set filter-width type (from 1 to 5) (default q)
    - h (1)  - Hz
    - q (3)  - Q-Factor
    - o (2)  - octave
    - s (4)  - slope
    - k (5)  - kHz

  * blocksize - set the block size (from 0 to 32768) (default 0)
  * csg - use constant skirt gain (default false)

# `bandreject`

```elixir
@spec bandreject(FFix.Stream.t(),
  normalize: boolean(),
  c: String.t(),
  m: float(),
  f: float(),
  a: integer() | String.t() | atom(),
  b: integer(),
  enable: String.t(),
  r: integer() | String.t() | atom(),
  width: float(),
  precision: integer() | String.t() | atom(),
  w: float(),
  mix: float(),
  n: boolean(),
  transform: integer() | String.t() | atom(),
  t: integer() | String.t() | atom(),
  channels: String.t(),
  frequency: float(),
  width_type: integer() | String.t() | atom(),
  blocksize: integer()
) :: FFix.Stream.t()
```

Apply a two-pole Butterworth band-reject filter.

## Options

  * normalize - normalize coefficients (default false)
  * c - set channels to filter (default "all")
  * m - set mix (from 0 to 1) (default 1)
  * f - set central frequency (from 0 to 999999) (default 3000)
  * a - set transform type (from 0 to 6) (default di)
    - di (0)  - direct form I
    - dii (1)  - direct form II
    - tdi (2)  - transposed direct form I
    - tdii (3)  - transposed direct form II
    - latt (4)  - lattice-ladder form
    - svf (5)  - state variable filter form
    - zdf (6)  - zero-delay filter form

  * b - set the block size (from 0 to 32768) (default 0)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * r - set filtering precision (from -1 to 3) (default auto)
    - auto (-1)  - automatic
    - s16 (0)  - signed 16-bit
    - s32 (1)  - signed 32-bit
    - f32 (2)  - floating-point single
    - f64 (3)  - floating-point double

  * width - set width (from 0 to 99999) (default 0.5)
  * precision - set filtering precision (from -1 to 3) (default auto)
    - auto (-1)  - automatic
    - s16 (0)  - signed 16-bit
    - s32 (1)  - signed 32-bit
    - f32 (2)  - floating-point single
    - f64 (3)  - floating-point double

  * w - set width (from 0 to 99999) (default 0.5)
  * mix - set mix (from 0 to 1) (default 1)
  * n - normalize coefficients (default false)
  * transform - set transform type (from 0 to 6) (default di)
    - di (0)  - direct form I
    - dii (1)  - direct form II
    - tdi (2)  - transposed direct form I
    - tdii (3)  - transposed direct form II
    - latt (4)  - lattice-ladder form
    - svf (5)  - state variable filter form
    - zdf (6)  - zero-delay filter form

  * t - set filter-width type (from 1 to 5) (default q)
    - h (1)  - Hz
    - q (3)  - Q-Factor
    - o (2)  - octave
    - s (4)  - slope
    - k (5)  - kHz

  * channels - set channels to filter (default "all")
  * frequency - set central frequency (from 0 to 999999) (default 3000)
  * width_type - set filter-width type (from 1 to 5) (default q)
    - h (1)  - Hz
    - q (3)  - Q-Factor
    - o (2)  - octave
    - s (4)  - slope
    - k (5)  - kHz

  * blocksize - set the block size (from 0 to 32768) (default 0)

# `bass`

```elixir
@spec bass(FFix.Stream.t(),
  normalize: boolean(),
  c: String.t(),
  p: integer(),
  m: float(),
  f: float(),
  a: integer() | String.t() | atom(),
  b: integer(),
  enable: String.t(),
  r: integer() | String.t() | atom(),
  width: float(),
  precision: integer() | String.t() | atom(),
  w: float(),
  mix: float(),
  n: boolean(),
  transform: integer() | String.t() | atom(),
  t: integer() | String.t() | atom(),
  channels: String.t(),
  gain: float(),
  poles: integer(),
  frequency: float(),
  width_type: integer() | String.t() | atom(),
  blocksize: integer(),
  g: float()
) :: FFix.Stream.t()
```

Boost or cut lower frequencies.

## Options

  * normalize - normalize coefficients (default false)
  * c - set channels to filter (default "all")
  * p - set number of poles (from 1 to 2) (default 2)
  * m - set mix (from 0 to 1) (default 1)
  * f - set central frequency (from 0 to 999999) (default 100)
  * a - set transform type (from 0 to 6) (default di)
    - di (0)  - direct form I
    - dii (1)  - direct form II
    - tdi (2)  - transposed direct form I
    - tdii (3)  - transposed direct form II
    - latt (4)  - lattice-ladder form
    - svf (5)  - state variable filter form
    - zdf (6)  - zero-delay filter form

  * b - set the block size (from 0 to 32768) (default 0)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * r - set filtering precision (from -1 to 3) (default auto)
    - auto (-1)  - automatic
    - s16 (0)  - signed 16-bit
    - s32 (1)  - signed 32-bit
    - f32 (2)  - floating-point single
    - f64 (3)  - floating-point double

  * width - set width (from 0 to 99999) (default 0.5)
  * precision - set filtering precision (from -1 to 3) (default auto)
    - auto (-1)  - automatic
    - s16 (0)  - signed 16-bit
    - s32 (1)  - signed 32-bit
    - f32 (2)  - floating-point single
    - f64 (3)  - floating-point double

  * w - set width (from 0 to 99999) (default 0.5)
  * mix - set mix (from 0 to 1) (default 1)
  * n - normalize coefficients (default false)
  * transform - set transform type (from 0 to 6) (default di)
    - di (0)  - direct form I
    - dii (1)  - direct form II
    - tdi (2)  - transposed direct form I
    - tdii (3)  - transposed direct form II
    - latt (4)  - lattice-ladder form
    - svf (5)  - state variable filter form
    - zdf (6)  - zero-delay filter form

  * t - set filter-width type (from 1 to 5) (default q)
    - h (1)  - Hz
    - q (3)  - Q-Factor
    - o (2)  - octave
    - s (4)  - slope
    - k (5)  - kHz

  * channels - set channels to filter (default "all")
  * gain - set gain (from -900 to 900) (default 0)
  * poles - set number of poles (from 1 to 2) (default 2)
  * frequency - set central frequency (from 0 to 999999) (default 100)
  * width_type - set filter-width type (from 1 to 5) (default q)
    - h (1)  - Hz
    - q (3)  - Q-Factor
    - o (2)  - octave
    - s (4)  - slope
    - k (5)  - kHz

  * blocksize - set the block size (from 0 to 32768) (default 0)
  * g - set gain (from -900 to 900) (default 0)

# `biquad`

```elixir
@spec biquad(FFix.Stream.t(),
  normalize: boolean(),
  c: String.t(),
  m: float(),
  a: integer() | String.t() | atom(),
  b: integer(),
  enable: String.t(),
  r: integer() | String.t() | atom(),
  precision: integer() | String.t() | atom(),
  mix: float(),
  n: boolean(),
  transform: integer() | String.t() | atom(),
  channels: String.t(),
  blocksize: integer(),
  a0: float(),
  a1: float(),
  a2: float(),
  b0: float(),
  b1: float(),
  b2: float()
) :: FFix.Stream.t()
```

Apply a biquad IIR filter with the given coefficients.

## Options

  * normalize - normalize coefficients (default false)
  * c - set channels to filter (default "all")
  * m - set mix (from 0 to 1) (default 1)
  * a - set transform type (from 0 to 6) (default di)
    - di (0)  - direct form I
    - dii (1)  - direct form II
    - tdi (2)  - transposed direct form I
    - tdii (3)  - transposed direct form II
    - latt (4)  - lattice-ladder form
    - svf (5)  - state variable filter form
    - zdf (6)  - zero-delay filter form

  * b - set the block size (from 0 to 32768) (default 0)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * r - set filtering precision (from -1 to 3) (default auto)
    - auto (-1)  - automatic
    - s16 (0)  - signed 16-bit
    - s32 (1)  - signed 32-bit
    - f32 (2)  - floating-point single
    - f64 (3)  - floating-point double

  * precision - set filtering precision (from -1 to 3) (default auto)
    - auto (-1)  - automatic
    - s16 (0)  - signed 16-bit
    - s32 (1)  - signed 32-bit
    - f32 (2)  - floating-point single
    - f64 (3)  - floating-point double

  * mix - set mix (from 0 to 1) (default 1)
  * n - normalize coefficients (default false)
  * transform - set transform type (from 0 to 6) (default di)
    - di (0)  - direct form I
    - dii (1)  - direct form II
    - tdi (2)  - transposed direct form I
    - tdii (3)  - transposed direct form II
    - latt (4)  - lattice-ladder form
    - svf (5)  - state variable filter form
    - zdf (6)  - zero-delay filter form

  * channels - set channels to filter (default "all")
  * blocksize - set the block size (from 0 to 32768) (default 0)
  * a0 - (from INT_MIN to INT_MAX) (default 1)
  * a1 - (from INT_MIN to INT_MAX) (default 0)
  * a2 - (from INT_MIN to INT_MAX) (default 0)
  * b0 - (from INT_MIN to INT_MAX) (default 0)
  * b1 - (from INT_MIN to INT_MAX) (default 0)
  * b2 - (from INT_MIN to INT_MAX) (default 0)

# `bs2b`

```elixir
@spec bs2b(FFix.Stream.t(),
  profile: integer() | String.t() | atom(),
  fcut: integer(),
  feed: integer()
) ::
  FFix.Stream.t()
```

Bauer stereo-to-binaural filter.

## Options

  * profile - Apply a pre-defined crossfeed level (from 0 to INT_MAX) (default default)
    - default (2949820)  - default profile
    - cmoy (3932860)  - Chu Moy circuit
    - jmeier (6226570)  - Jan Meier circuit

  * fcut - Set cut frequency (in Hz) (from 0 to 2000) (default 0)
  * feed - Set feed level (in Hz) (from 0 to 150) (default 0)

# `channelmap`

```elixir
@spec channelmap(FFix.Stream.t(), map: String.t(), channel_layout: term()) ::
  FFix.Stream.t()
```

Remap audio channels.

## Options

  * map - A comma-separated list of input channel numbers in output order.
  * channel_layout - Output channel layout.

# `chorus`

```elixir
@spec chorus(FFix.Stream.t(),
  decays: String.t(),
  in_gain: float(),
  out_gain: float(),
  delays: String.t(),
  speeds: String.t(),
  depths: String.t()
) :: FFix.Stream.t()
```

Add a chorus effect to the audio.

## Options

  * decays - set decays
  * in_gain - set input gain (from 0 to 1) (default 0.4)
  * out_gain - set output gain (from 0 to 1) (default 0.4)
  * delays - set delays
  * speeds - set speeds
  * depths - set depths

# `compand`

```elixir
@spec compand(FFix.Stream.t(),
  delay: float(),
  volume: float(),
  gain: float(),
  attacks: String.t(),
  decays: String.t(),
  points: String.t(),
  &quot;soft-knee&quot;: float()
) :: FFix.Stream.t()
```

Compress or expand audio dynamic range.

## Options

  * delay - set delay for samples before sending them to volume adjuster (from 0 to 20) (default 0)
  * volume - set initial volume (from -900 to 0) (default 0)
  * gain - set output gain (from -900 to 900) (default 0)
  * attacks - set time over which increase of volume is determined (default "0")
  * decays - set time over which decrease of volume is determined (default "0.8")
  * points - set points of transfer function (default "-70/-70|-60/-20|1/0")
  * soft-knee - set soft-knee (from 0.01 to 900) (default 0.01)

# `compensationdelay`

```elixir
@spec compensationdelay(FFix.Stream.t(),
  m: integer(),
  enable: String.t(),
  mm: integer(),
  temp: integer(),
  cm: integer(),
  dry: float(),
  wet: float()
) :: FFix.Stream.t()
```

Audio Compensation Delay Line.

## Options

  * m - set meter distance (from 0 to 100) (default 0)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * mm - set mm distance (from 0 to 10) (default 0)
  * temp - set temperature °C (from -50 to 50) (default 20)
  * cm - set cm distance (from 0 to 100) (default 0)
  * dry - set dry amount (from 0 to 1) (default 0)
  * wet - set wet amount (from 0 to 1) (default 1)

# `crossfeed`

```elixir
@spec crossfeed(FFix.Stream.t(),
  range: float(),
  enable: String.t(),
  block_size: integer(),
  slope: float(),
  strength: float(),
  level_in: float(),
  level_out: float()
) :: FFix.Stream.t()
```

Apply headphone crossfeed filter.

## Options

  * range - set soundstage wideness (from 0 to 1) (default 0.5)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * block_size - set the block size (from 0 to 32768) (default 0)
  * slope - set curve slope (from 0.01 to 1) (default 0.5)
  * strength - set crossfeed strength (from 0 to 1) (default 0.2)
  * level_in - set level in (from 0 to 1) (default 0.9)
  * level_out - set level out (from 0 to 1) (default 1)

# `crystalizer`

```elixir
@spec crystalizer(FFix.Stream.t(), c: boolean(), i: float(), enable: String.t()) ::
  FFix.Stream.t()
```

Simple audio noise sharpening filter.

## Options

  * c - enable clipping (default true)
  * i - set intensity (from -10 to 10) (default 2)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero

# `dcshift`

```elixir
@spec dcshift(FFix.Stream.t(),
  enable: String.t(),
  shift: float(),
  limitergain: float()
) ::
  FFix.Stream.t()
```

Apply a DC shift to the audio.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * shift - set DC shift (from -1 to 1) (default 0)
  * limitergain - set limiter gain (from 0 to 1) (default 0)

# `deesser`

```elixir
@spec deesser(FFix.Stream.t(),
  i: float(),
  m: float(),
  f: float(),
  s: integer() | String.t() | atom(),
  enable: String.t()
) :: FFix.Stream.t()
```

Apply de-essing to the audio.

## Options

  * i - set intensity (from 0 to 1) (default 0)
  * m - set max deessing (from 0 to 1) (default 0.5)
  * f - set frequency (from 0 to 1) (default 0.5)
  * s - set output mode (from 0 to 2) (default o)
    - i (0)  - input
    - o (1)  - output
    - e (2)  - ess

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero

# `dialoguenhance`

```elixir
@spec dialoguenhance(FFix.Stream.t(),
  enable: String.t(),
  original: float(),
  enhance: float(),
  voice: float()
) :: FFix.Stream.t()
```

Audio Dialogue Enhancement.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * original - set original center factor (from 0 to 1) (default 1)
  * enhance - set dialogue enhance factor (from 0 to 3) (default 1)
  * voice - set voice detection factor (from 2 to 32) (default 2)

# `drmeter`

```elixir
@spec drmeter(
  FFix.Stream.t(),
  [{:length, float()}]
) :: FFix.Stream.t()
```

Measure audio dynamic range.

## Options

  * length - set the window length (from 0.01 to 10) (default 3)

# `dynaudnorm`

```elixir
@spec dynaudnorm(FFix.Stream.t(),
  compress: float(),
  c: boolean(),
  p: float(),
  v: String.t(),
  m: float(),
  f: integer(),
  b: boolean(),
  s: float(),
  enable: String.t(),
  h: String.t(),
  r: float(),
  threshold: float(),
  n: boolean(),
  curve: String.t(),
  o: float(),
  t: float(),
  overlap: float(),
  channels: String.t(),
  g: integer(),
  coupling: boolean(),
  framelen: integer(),
  gausssize: integer(),
  peak: float(),
  maxgain: float(),
  targetrms: float(),
  correctdc: boolean(),
  altboundary: boolean()
) :: FFix.Stream.t()
```

Dynamic Audio Normalizer.

## Options

  * compress - set the compress factor (from 0 to 30) (default 0)
  * c - set DC correction (default false)
  * p - set the peak value (from 0 to 1) (default 0.95)
  * v - set the custom peak mapping curve
  * m - set the max amplification (from 1 to 100) (default 10)
  * f - set the frame length in msec (from 10 to 8000) (default 500)
  * b - set alternative boundary mode (default false)
  * s - set the compress factor (from 0 to 30) (default 0)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * h - set channels to filter (default "all")
  * r - set the target RMS (from 0 to 1) (default 0)
  * threshold - set the threshold value (from 0 to 1) (default 0)
  * n - set channel coupling (default true)
  * curve - set the custom peak mapping curve
  * o - set the frame overlap (from 0 to 1) (default 0)
  * t - set the threshold value (from 0 to 1) (default 0)
  * overlap - set the frame overlap (from 0 to 1) (default 0)
  * channels - set channels to filter (default "all")
  * g - set the filter size (from 3 to 301) (default 31)
  * coupling - set channel coupling (default true)
  * framelen - set the frame length in msec (from 10 to 8000) (default 500)
  * gausssize - set the filter size (from 3 to 301) (default 31)
  * peak - set the peak value (from 0 to 1) (default 0.95)
  * maxgain - set the max amplification (from 1 to 100) (default 10)
  * targetrms - set the target RMS (from 0 to 1) (default 0)
  * correctdc - set DC correction (default false)
  * altboundary - set alternative boundary mode (default false)

# `earwax`

```elixir
@spec earwax(
  FFix.Stream.t(),
  []
) :: FFix.Stream.t()
```

Widen the stereo image.

## Options

# `equalizer`

```elixir
@spec equalizer(FFix.Stream.t(),
  normalize: boolean(),
  c: String.t(),
  m: float(),
  f: float(),
  a: integer() | String.t() | atom(),
  b: integer(),
  enable: String.t(),
  r: integer() | String.t() | atom(),
  width: float(),
  precision: integer() | String.t() | atom(),
  w: float(),
  mix: float(),
  n: boolean(),
  transform: integer() | String.t() | atom(),
  t: integer() | String.t() | atom(),
  channels: String.t(),
  gain: float(),
  frequency: float(),
  width_type: integer() | String.t() | atom(),
  blocksize: integer(),
  g: float()
) :: FFix.Stream.t()
```

Apply two-pole peaking equalization (EQ) filter.

## Options

  * normalize - normalize coefficients (default false)
  * c - set channels to filter (default "all")
  * m - set mix (from 0 to 1) (default 1)
  * f - set central frequency (from 0 to 999999) (default 0)
  * a - set transform type (from 0 to 6) (default di)
    - di (0)  - direct form I
    - dii (1)  - direct form II
    - tdi (2)  - transposed direct form I
    - tdii (3)  - transposed direct form II
    - latt (4)  - lattice-ladder form
    - svf (5)  - state variable filter form
    - zdf (6)  - zero-delay filter form

  * b - set the block size (from 0 to 32768) (default 0)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * r - set filtering precision (from -1 to 3) (default auto)
    - auto (-1)  - automatic
    - s16 (0)  - signed 16-bit
    - s32 (1)  - signed 32-bit
    - f32 (2)  - floating-point single
    - f64 (3)  - floating-point double

  * width - set width (from 0 to 99999) (default 1)
  * precision - set filtering precision (from -1 to 3) (default auto)
    - auto (-1)  - automatic
    - s16 (0)  - signed 16-bit
    - s32 (1)  - signed 32-bit
    - f32 (2)  - floating-point single
    - f64 (3)  - floating-point double

  * w - set width (from 0 to 99999) (default 1)
  * mix - set mix (from 0 to 1) (default 1)
  * n - normalize coefficients (default false)
  * transform - set transform type (from 0 to 6) (default di)
    - di (0)  - direct form I
    - dii (1)  - direct form II
    - tdi (2)  - transposed direct form I
    - tdii (3)  - transposed direct form II
    - latt (4)  - lattice-ladder form
    - svf (5)  - state variable filter form
    - zdf (6)  - zero-delay filter form

  * t - set filter-width type (from 1 to 5) (default q)
    - h (1)  - Hz
    - q (3)  - Q-Factor
    - o (2)  - octave
    - s (4)  - slope
    - k (5)  - kHz

  * channels - set channels to filter (default "all")
  * gain - set gain (from -900 to 900) (default 0)
  * frequency - set central frequency (from 0 to 999999) (default 0)
  * width_type - set filter-width type (from 1 to 5) (default q)
    - h (1)  - Hz
    - q (3)  - Q-Factor
    - o (2)  - octave
    - s (4)  - slope
    - k (5)  - kHz

  * blocksize - set the block size (from 0 to 32768) (default 0)
  * g - set gain (from -900 to 900) (default 0)

# `extrastereo`

```elixir
@spec extrastereo(FFix.Stream.t(), c: boolean(), m: float(), enable: String.t()) ::
  FFix.Stream.t()
```

Increase difference between stereo audio channels.

## Options

  * c - enable clipping (default true)
  * m - set the difference coefficient (from -10 to 10) (default 2.5)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero

# `firequalizer`

```elixir
@spec firequalizer(FFix.Stream.t(),
  multi: boolean(),
  delay: float(),
  scale: integer() | String.t() | atom(),
  gain: String.t(),
  gain_entry: String.t(),
  accuracy: float(),
  wfunc: integer() | String.t() | atom(),
  fixed: boolean(),
  zero_phase: boolean(),
  dumpfile: String.t(),
  dumpscale: integer() | String.t() | atom(),
  fft2: boolean(),
  min_phase: boolean()
) :: FFix.Stream.t()
```

Finite Impulse Response Equalizer.

## Options

  * multi - set multi channels mode (default false)
  * delay - set delay (from 0 to 1e+10) (default 0.01)
  * scale - set gain scale (from 0 to 3) (default linlog)
    - linlin (0)  - linear-freq linear-gain
    - linlog (1)  - linear-freq logarithmic-gain
    - loglin (2)  - logarithmic-freq linear-gain
    - loglog (3)  - logarithmic-freq logarithmic-gain

  * gain - set gain curve (default "gain_interpolate(f)")
  * gain_entry - set gain entry
  * accuracy - set accuracy (from 0 to 1e+10) (default 5)
  * wfunc - set window function (from 0 to 9) (default hann)
    - rectangular (0)  - rectangular window
    - hann (1)  - hann window
    - hamming (2)  - hamming window
    - blackman (3)  - blackman window
    - nuttall3 (4)  - 3-term nuttall window
    - mnuttall3 (5)  - minimum 3-term nuttall window
    - nuttall (6)  - nuttall window
    - bnuttall (7)  - blackman-nuttall window
    - bharris (8)  - blackman-harris window
    - tukey (9)  - tukey window

  * fixed - set fixed frame samples (default false)
  * zero_phase - set zero phase mode (default false)
  * dumpfile - set dump file
  * dumpscale - set dump scale (from 0 to 3) (default linlog)
    - linlin (0)  - linear-freq linear-gain
    - linlog (1)  - linear-freq logarithmic-gain
    - loglin (2)  - logarithmic-freq linear-gain
    - loglog (3)  - logarithmic-freq logarithmic-gain

  * fft2 - set 2-channels fft (default false)
  * min_phase - set minimum phase mode (default false)

# `flanger`

```elixir
@spec flanger(FFix.Stream.t(),
  speed: float(),
  depth: float(),
  width: float(),
  delay: float(),
  phase: float(),
  shape: integer() | String.t() | atom(),
  interp: integer() | String.t() | atom(),
  regen: float()
) :: FFix.Stream.t()
```

Apply a flanging effect to the audio.

## Options

  * speed - sweeps per second (Hz) (from 0.1 to 10) (default 0.5)
  * depth - added swept delay in milliseconds (from 0 to 10) (default 2)
  * width - percentage of delayed signal mixed with original (from 0 to 100) (default 71)
  * delay - base delay in milliseconds (from 0 to 30) (default 0)
  * phase - swept wave percentage phase-shift for multi-channel (from 0 to 100) (default 25)
  * shape - swept wave shape (from 0 to 1) (default sinusoidal)
    - triangular (1) 
    - t (1) 
    - sinusoidal (0) 
    - s (0) 

  * interp - delay-line interpolation (from 0 to 1) (default linear)
    - linear (0) 
    - quadratic (1) 

  * regen - percentage regeneration (delayed signal feedback) (from -95 to 95) (default 0)

# `haas`

```elixir
@spec haas(FFix.Stream.t(),
  level_in: float(),
  level_out: float(),
  side_gain: float(),
  middle_source: integer() | String.t() | atom(),
  middle_phase: boolean(),
  left_delay: float(),
  left_balance: float(),
  left_gain: float(),
  left_phase: boolean(),
  right_delay: float(),
  right_balance: float(),
  right_gain: float(),
  right_phase: boolean()
) :: FFix.Stream.t()
```

Apply Haas Stereo Enhancer.

## Options

  * level_in - set level in (from 0.015625 to 64) (default 1)
  * level_out - set level out (from 0.015625 to 64) (default 1)
  * side_gain - set side gain (from 0.015625 to 64) (default 1)
  * middle_source - set middle source (from 0 to 3) (default mid)
    - left (0) 
    - right (1) 
    - mid (2)  - L+R
    - side (3)  - L-R

  * middle_phase - set middle phase (default false)
  * left_delay - set left delay (from 0 to 40) (default 2.05)
  * left_balance - set left balance (from -1 to 1) (default -1)
  * left_gain - set left gain (from 0.015625 to 64) (default 1)
  * left_phase - set left phase (default false)
  * right_delay - set right delay (from 0 to 40) (default 2.12)
  * right_balance - set right balance (from -1 to 1) (default 1)
  * right_gain - set right gain (from 0.015625 to 64) (default 1)
  * right_phase - set right phase (default true)

# `hdcd`

```elixir
@spec hdcd(FFix.Stream.t(),
  disable_autoconvert: boolean(),
  process_stereo: boolean(),
  cdt_ms: integer(),
  force_pe: boolean(),
  analyze_mode: integer() | String.t() | atom(),
  bits_per_sample: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Apply High Definition Compatible Digital (HDCD) decoding.

## Options

  * disable_autoconvert - Disable any format conversion or resampling in the filter graph. (default true)
  * process_stereo - Process stereo channels together. Only apply target_gain when both channels match. (default true)
  * cdt_ms - Code detect timer period in ms. (from 100 to 60000) (default 2000)
  * force_pe - Always extend peaks above -3dBFS even when PE is not signaled. (default false)
  * analyze_mode - Replace audio with solid tone and signal some processing aspect in the amplitude. (from 0 to 4) (default off)
    - off (0)  - disabled
    - lle (1)  - gain adjustment level at each sample
    - pe (2)  - samples where peak extend occurs
    - cdt (3)  - samples where the code detect timer is active
    - tgm (4)  - samples where the target gain does not match between channels

  * bits_per_sample - Valid bits per sample (location of the true LSB). (from 16 to 24) (default 16)
    - 16 (16)  - 16-bit (in s32 or s16)
    - 20 (20)  - 20-bit (in s32)
    - 24 (24)  - 24-bit (in s32)

# `highpass`

```elixir
@spec highpass(FFix.Stream.t(),
  normalize: boolean(),
  c: String.t(),
  p: integer(),
  m: float(),
  f: float(),
  a: integer() | String.t() | atom(),
  b: integer(),
  enable: String.t(),
  r: integer() | String.t() | atom(),
  width: float(),
  precision: integer() | String.t() | atom(),
  w: float(),
  mix: float(),
  n: boolean(),
  transform: integer() | String.t() | atom(),
  t: integer() | String.t() | atom(),
  channels: String.t(),
  poles: integer(),
  frequency: float(),
  width_type: integer() | String.t() | atom(),
  blocksize: integer()
) :: FFix.Stream.t()
```

Apply a high-pass filter with 3dB point frequency.

## Options

  * normalize - normalize coefficients (default false)
  * c - set channels to filter (default "all")
  * p - set number of poles (from 1 to 2) (default 2)
  * m - set mix (from 0 to 1) (default 1)
  * f - set frequency (from 0 to 999999) (default 3000)
  * a - set transform type (from 0 to 6) (default di)
    - di (0)  - direct form I
    - dii (1)  - direct form II
    - tdi (2)  - transposed direct form I
    - tdii (3)  - transposed direct form II
    - latt (4)  - lattice-ladder form
    - svf (5)  - state variable filter form
    - zdf (6)  - zero-delay filter form

  * b - set the block size (from 0 to 32768) (default 0)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * r - set filtering precision (from -1 to 3) (default auto)
    - auto (-1)  - automatic
    - s16 (0)  - signed 16-bit
    - s32 (1)  - signed 32-bit
    - f32 (2)  - floating-point single
    - f64 (3)  - floating-point double

  * width - set width (from 0 to 99999) (default 0.707)
  * precision - set filtering precision (from -1 to 3) (default auto)
    - auto (-1)  - automatic
    - s16 (0)  - signed 16-bit
    - s32 (1)  - signed 32-bit
    - f32 (2)  - floating-point single
    - f64 (3)  - floating-point double

  * w - set width (from 0 to 99999) (default 0.707)
  * mix - set mix (from 0 to 1) (default 1)
  * n - normalize coefficients (default false)
  * transform - set transform type (from 0 to 6) (default di)
    - di (0)  - direct form I
    - dii (1)  - direct form II
    - tdi (2)  - transposed direct form I
    - tdii (3)  - transposed direct form II
    - latt (4)  - lattice-ladder form
    - svf (5)  - state variable filter form
    - zdf (6)  - zero-delay filter form

  * t - set filter-width type (from 1 to 5) (default q)
    - h (1)  - Hz
    - q (3)  - Q-Factor
    - o (2)  - octave
    - s (4)  - slope
    - k (5)  - kHz

  * channels - set channels to filter (default "all")
  * poles - set number of poles (from 1 to 2) (default 2)
  * frequency - set frequency (from 0 to 999999) (default 3000)
  * width_type - set filter-width type (from 1 to 5) (default q)
    - h (1)  - Hz
    - q (3)  - Q-Factor
    - o (2)  - octave
    - s (4)  - slope
    - k (5)  - kHz

  * blocksize - set the block size (from 0 to 32768) (default 0)

# `highshelf`

```elixir
@spec highshelf(FFix.Stream.t(),
  normalize: boolean(),
  c: String.t(),
  p: integer(),
  m: float(),
  f: float(),
  a: integer() | String.t() | atom(),
  b: integer(),
  enable: String.t(),
  r: integer() | String.t() | atom(),
  width: float(),
  precision: integer() | String.t() | atom(),
  w: float(),
  mix: float(),
  n: boolean(),
  transform: integer() | String.t() | atom(),
  t: integer() | String.t() | atom(),
  channels: String.t(),
  gain: float(),
  poles: integer(),
  frequency: float(),
  width_type: integer() | String.t() | atom(),
  blocksize: integer(),
  g: float()
) :: FFix.Stream.t()
```

Apply a high shelf filter.

## Options

  * normalize - normalize coefficients (default false)
  * c - set channels to filter (default "all")
  * p - set number of poles (from 1 to 2) (default 2)
  * m - set mix (from 0 to 1) (default 1)
  * f - set central frequency (from 0 to 999999) (default 3000)
  * a - set transform type (from 0 to 6) (default di)
    - di (0)  - direct form I
    - dii (1)  - direct form II
    - tdi (2)  - transposed direct form I
    - tdii (3)  - transposed direct form II
    - latt (4)  - lattice-ladder form
    - svf (5)  - state variable filter form
    - zdf (6)  - zero-delay filter form

  * b - set the block size (from 0 to 32768) (default 0)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * r - set filtering precision (from -1 to 3) (default auto)
    - auto (-1)  - automatic
    - s16 (0)  - signed 16-bit
    - s32 (1)  - signed 32-bit
    - f32 (2)  - floating-point single
    - f64 (3)  - floating-point double

  * width - set width (from 0 to 99999) (default 0.5)
  * precision - set filtering precision (from -1 to 3) (default auto)
    - auto (-1)  - automatic
    - s16 (0)  - signed 16-bit
    - s32 (1)  - signed 32-bit
    - f32 (2)  - floating-point single
    - f64 (3)  - floating-point double

  * w - set width (from 0 to 99999) (default 0.5)
  * mix - set mix (from 0 to 1) (default 1)
  * n - normalize coefficients (default false)
  * transform - set transform type (from 0 to 6) (default di)
    - di (0)  - direct form I
    - dii (1)  - direct form II
    - tdi (2)  - transposed direct form I
    - tdii (3)  - transposed direct form II
    - latt (4)  - lattice-ladder form
    - svf (5)  - state variable filter form
    - zdf (6)  - zero-delay filter form

  * t - set filter-width type (from 1 to 5) (default q)
    - h (1)  - Hz
    - q (3)  - Q-Factor
    - o (2)  - octave
    - s (4)  - slope
    - k (5)  - kHz

  * channels - set channels to filter (default "all")
  * gain - set gain (from -900 to 900) (default 0)
  * poles - set number of poles (from 1 to 2) (default 2)
  * frequency - set central frequency (from 0 to 999999) (default 3000)
  * width_type - set filter-width type (from 1 to 5) (default q)
    - h (1)  - Hz
    - q (3)  - Q-Factor
    - o (2)  - octave
    - s (4)  - slope
    - k (5)  - kHz

  * blocksize - set the block size (from 0 to 32768) (default 0)
  * g - set gain (from -900 to 900) (default 0)

# `loudnorm`

```elixir
@spec loudnorm(FFix.Stream.t(),
  offset: float(),
  i: float(),
  tp: float(),
  I: float(),
  LRA: float(),
  lra: float(),
  TP: float(),
  measured_I: float(),
  measured_i: float(),
  measured_LRA: float(),
  measured_lra: float(),
  measured_TP: float(),
  measured_tp: float(),
  measured_thresh: float(),
  linear: boolean(),
  dual_mono: boolean(),
  print_format: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

EBU R128 loudness normalization

## Options

  * offset - set offset gain (from -99 to 99) (default 0)
  * i - set integrated loudness target (from -70 to -5) (default -24)
  * tp - set maximum true peak (from -9 to 0) (default -2)
  * I - set integrated loudness target (from -70 to -5) (default -24)
  * LRA - set loudness range target (from 1 to 50) (default 7)
  * lra - set loudness range target (from 1 to 50) (default 7)
  * TP - set maximum true peak (from -9 to 0) (default -2)
  * measured_I - measured IL of input file (from -99 to 0) (default 0)
  * measured_i - measured IL of input file (from -99 to 0) (default 0)
  * measured_LRA - measured LRA of input file (from 0 to 99) (default 0)
  * measured_lra - measured LRA of input file (from 0 to 99) (default 0)
  * measured_TP - measured true peak of input file (from -99 to 99) (default 99)
  * measured_tp - measured true peak of input file (from -99 to 99) (default 99)
  * measured_thresh - measured threshold of input file (from -99 to 0) (default -70)
  * linear - normalize linearly if possible (default true)
  * dual_mono - treat mono input as dual-mono (default false)
  * print_format - set print format for stats (from 0 to 2) (default none)
    - none (0) 
    - json (1) 
    - summary (2) 

# `lowpass`

```elixir
@spec lowpass(FFix.Stream.t(),
  normalize: boolean(),
  c: String.t(),
  p: integer(),
  m: float(),
  f: float(),
  a: integer() | String.t() | atom(),
  b: integer(),
  enable: String.t(),
  r: integer() | String.t() | atom(),
  width: float(),
  precision: integer() | String.t() | atom(),
  w: float(),
  mix: float(),
  n: boolean(),
  transform: integer() | String.t() | atom(),
  t: integer() | String.t() | atom(),
  channels: String.t(),
  poles: integer(),
  frequency: float(),
  width_type: integer() | String.t() | atom(),
  blocksize: integer()
) :: FFix.Stream.t()
```

Apply a low-pass filter with 3dB point frequency.

## Options

  * normalize - normalize coefficients (default false)
  * c - set channels to filter (default "all")
  * p - set number of poles (from 1 to 2) (default 2)
  * m - set mix (from 0 to 1) (default 1)
  * f - set frequency (from 0 to 999999) (default 500)
  * a - set transform type (from 0 to 6) (default di)
    - di (0)  - direct form I
    - dii (1)  - direct form II
    - tdi (2)  - transposed direct form I
    - tdii (3)  - transposed direct form II
    - latt (4)  - lattice-ladder form
    - svf (5)  - state variable filter form
    - zdf (6)  - zero-delay filter form

  * b - set the block size (from 0 to 32768) (default 0)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * r - set filtering precision (from -1 to 3) (default auto)
    - auto (-1)  - automatic
    - s16 (0)  - signed 16-bit
    - s32 (1)  - signed 32-bit
    - f32 (2)  - floating-point single
    - f64 (3)  - floating-point double

  * width - set width (from 0 to 99999) (default 0.707)
  * precision - set filtering precision (from -1 to 3) (default auto)
    - auto (-1)  - automatic
    - s16 (0)  - signed 16-bit
    - s32 (1)  - signed 32-bit
    - f32 (2)  - floating-point single
    - f64 (3)  - floating-point double

  * w - set width (from 0 to 99999) (default 0.707)
  * mix - set mix (from 0 to 1) (default 1)
  * n - normalize coefficients (default false)
  * transform - set transform type (from 0 to 6) (default di)
    - di (0)  - direct form I
    - dii (1)  - direct form II
    - tdi (2)  - transposed direct form I
    - tdii (3)  - transposed direct form II
    - latt (4)  - lattice-ladder form
    - svf (5)  - state variable filter form
    - zdf (6)  - zero-delay filter form

  * t - set filter-width type (from 1 to 5) (default q)
    - h (1)  - Hz
    - q (3)  - Q-Factor
    - o (2)  - octave
    - s (4)  - slope
    - k (5)  - kHz

  * channels - set channels to filter (default "all")
  * poles - set number of poles (from 1 to 2) (default 2)
  * frequency - set frequency (from 0 to 999999) (default 500)
  * width_type - set filter-width type (from 1 to 5) (default q)
    - h (1)  - Hz
    - q (3)  - Q-Factor
    - o (2)  - octave
    - s (4)  - slope
    - k (5)  - kHz

  * blocksize - set the block size (from 0 to 32768) (default 0)

# `lowshelf`

```elixir
@spec lowshelf(FFix.Stream.t(),
  normalize: boolean(),
  c: String.t(),
  p: integer(),
  m: float(),
  f: float(),
  a: integer() | String.t() | atom(),
  b: integer(),
  enable: String.t(),
  r: integer() | String.t() | atom(),
  width: float(),
  precision: integer() | String.t() | atom(),
  w: float(),
  mix: float(),
  n: boolean(),
  transform: integer() | String.t() | atom(),
  t: integer() | String.t() | atom(),
  channels: String.t(),
  gain: float(),
  poles: integer(),
  frequency: float(),
  width_type: integer() | String.t() | atom(),
  blocksize: integer(),
  g: float()
) :: FFix.Stream.t()
```

Apply a low shelf filter.

## Options

  * normalize - normalize coefficients (default false)
  * c - set channels to filter (default "all")
  * p - set number of poles (from 1 to 2) (default 2)
  * m - set mix (from 0 to 1) (default 1)
  * f - set central frequency (from 0 to 999999) (default 100)
  * a - set transform type (from 0 to 6) (default di)
    - di (0)  - direct form I
    - dii (1)  - direct form II
    - tdi (2)  - transposed direct form I
    - tdii (3)  - transposed direct form II
    - latt (4)  - lattice-ladder form
    - svf (5)  - state variable filter form
    - zdf (6)  - zero-delay filter form

  * b - set the block size (from 0 to 32768) (default 0)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * r - set filtering precision (from -1 to 3) (default auto)
    - auto (-1)  - automatic
    - s16 (0)  - signed 16-bit
    - s32 (1)  - signed 32-bit
    - f32 (2)  - floating-point single
    - f64 (3)  - floating-point double

  * width - set width (from 0 to 99999) (default 0.5)
  * precision - set filtering precision (from -1 to 3) (default auto)
    - auto (-1)  - automatic
    - s16 (0)  - signed 16-bit
    - s32 (1)  - signed 32-bit
    - f32 (2)  - floating-point single
    - f64 (3)  - floating-point double

  * w - set width (from 0 to 99999) (default 0.5)
  * mix - set mix (from 0 to 1) (default 1)
  * n - normalize coefficients (default false)
  * transform - set transform type (from 0 to 6) (default di)
    - di (0)  - direct form I
    - dii (1)  - direct form II
    - tdi (2)  - transposed direct form I
    - tdii (3)  - transposed direct form II
    - latt (4)  - lattice-ladder form
    - svf (5)  - state variable filter form
    - zdf (6)  - zero-delay filter form

  * t - set filter-width type (from 1 to 5) (default q)
    - h (1)  - Hz
    - q (3)  - Q-Factor
    - o (2)  - octave
    - s (4)  - slope
    - k (5)  - kHz

  * channels - set channels to filter (default "all")
  * gain - set gain (from -900 to 900) (default 0)
  * poles - set number of poles (from 1 to 2) (default 2)
  * frequency - set central frequency (from 0 to 999999) (default 100)
  * width_type - set filter-width type (from 1 to 5) (default q)
    - h (1)  - Hz
    - q (3)  - Q-Factor
    - o (2)  - octave
    - s (4)  - slope
    - k (5)  - kHz

  * blocksize - set the block size (from 0 to 32768) (default 0)
  * g - set gain (from -900 to 900) (default 0)

# `mcompand`

```elixir
@spec mcompand(
  FFix.Stream.t(),
  [{:args, String.t()}]
) :: FFix.Stream.t()
```

Multiband Compress or expand audio dynamic range.

## Options

  * args - set parameters for each band (default "0.005,0.1 6 -47/-40,-34/-34,-17/-33 100 | 0.003,0.05 6 -47/-40,-34/-34,-17/-33 400 | 0.000625,0.0125 6 -47/-40,-34/-34,-15/-33 1600 | 0.0001,0.025 6 -47/-40,-34/-34,-31/-31,-0/-30 6400 | 0,0.025 6 -38/-31,-28/-28,-0/-25 22000")

# `pan`

```elixir
@spec pan(
  FFix.Stream.t(),
  [{:args, String.t()}]
) :: FFix.Stream.t()
```

Remix channels with coefficients (panning).

## Options

  * args - 

# `replaygain`

```elixir
@spec replaygain(FFix.Stream.t(), track_gain: float(), track_peak: float()) ::
  FFix.Stream.t()
```

ReplayGain scanner.

## Options

  * track_gain - track gain (dB) (from -FLT_MAX to FLT_MAX) (default 0)
  * track_peak - track peak (from -FLT_MAX to FLT_MAX) (default 0)

# `rubberband`

```elixir
@spec rubberband(FFix.Stream.t(),
  phase: integer() | String.t() | atom(),
  channels: integer() | String.t() | atom(),
  pitch: float(),
  tempo: float(),
  transients: integer() | String.t() | atom(),
  detector: integer() | String.t() | atom(),
  window: integer() | String.t() | atom(),
  smoothing: integer() | String.t() | atom(),
  formant: integer() | String.t() | atom(),
  pitchq: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Apply time-stretching and pitch-shifting.

## Options

  * phase - set phase (from 0 to INT_MAX) (default laminar)
    - laminar (0) 
    - independent (8192) 

  * channels - set channels (from 0 to INT_MAX) (default apart)
    - apart (0) 
    - together (268435456) 

  * pitch - set pitch scale factor (from 0.01 to 100) (default 1)
  * tempo - set tempo scale factor (from 0.01 to 100) (default 1)
  * transients - set transients (from 0 to INT_MAX) (default crisp)
    - crisp (0) 
    - mixed (256) 
    - smooth (512) 

  * detector - set detector (from 0 to INT_MAX) (default compound)
    - compound (0) 
    - percussive (1024) 
    - soft (2048) 

  * window - set window (from 0 to INT_MAX) (default standard)
    - standard (0) 
    - short (1048576) 
    - long (2097152) 

  * smoothing - set smoothing (from 0 to INT_MAX) (default off)
    - off (0) 
    - on (8388608) 

  * formant - set formant (from 0 to INT_MAX) (default shifted)
    - shifted (0) 
    - preserved (16777216) 

  * pitchq - set pitch quality (from 0 to INT_MAX) (default speed)
    - quality (33554432) 
    - speed (0) 
    - consistency (67108864) 

# `sidechaincompress`

```elixir
@spec sidechaincompress(FFix.Stream.t(), FFix.Stream.t(),
  link: integer() | String.t() | atom(),
  mode: integer() | String.t() | atom(),
  threshold: float(),
  mix: float(),
  makeup: float(),
  ratio: float(),
  attack: float(),
  level_in: float(),
  release: float(),
  knee: float(),
  detection: integer() | String.t() | atom(),
  level_sc: float()
) :: FFix.Stream.t()
```

Sidechain compressor.

## Options

  * link - set link type (from 0 to 1) (default average)
    - average (0) 
    - maximum (1) 

  * mode - set mode (from 0 to 1) (default downward)
    - downward (0) 
    - upward (1) 

  * threshold - set threshold (from 0.000976563 to 1) (default 0.125)
  * mix - set mix (from 0 to 1) (default 1)
  * makeup - set make up gain (from 1 to 64) (default 1)
  * ratio - set ratio (from 1 to 20) (default 2)
  * attack - set attack (from 0.01 to 2000) (default 20)
  * level_in - set input gain (from 0.015625 to 64) (default 1)
  * release - set release (from 0.01 to 9000) (default 250)
  * knee - set knee (from 1 to 8) (default 2.82843)
  * detection - set detection (from 0 to 1) (default rms)
    - peak (0) 
    - rms (1) 

  * level_sc - set sidechain gain (from 0.015625 to 64) (default 1)

# `sidechaingate`

```elixir
@spec sidechaingate(FFix.Stream.t(), FFix.Stream.t(),
  link: integer() | String.t() | atom(),
  mode: integer() | String.t() | atom(),
  range: float(),
  enable: String.t(),
  threshold: float(),
  makeup: float(),
  ratio: float(),
  attack: float(),
  level_in: float(),
  release: float(),
  knee: float(),
  detection: integer() | String.t() | atom(),
  level_sc: float()
) :: FFix.Stream.t()
```

Audio sidechain gate.

## Options

  * link - set link (from 0 to 1) (default average)
    - average (0) 
    - maximum (1) 

  * mode - set mode (from 0 to 1) (default downward)
    - downward (0) 
    - upward (1) 

  * range - set max gain reduction (from 0 to 1) (default 0.06125)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * threshold - set threshold (from 0 to 1) (default 0.125)
  * makeup - set makeup gain (from 1 to 64) (default 1)
  * ratio - set ratio (from 1 to 9000) (default 2)
  * attack - set attack (from 0.01 to 9000) (default 20)
  * level_in - set input level (from 0.015625 to 64) (default 1)
  * release - set release (from 0.01 to 9000) (default 250)
  * knee - set knee (from 1 to 8) (default 2.82843)
  * detection - set detection (from 0 to 1) (default rms)
    - peak (0) 
    - rms (1) 

  * level_sc - set sidechain gain (from 0.015625 to 64) (default 1)

# `silencedetect`

```elixir
@spec silencedetect(FFix.Stream.t(),
  m: boolean(),
  d: term(),
  n: float(),
  noise: float(),
  duration: term(),
  mono: boolean()
) :: FFix.Stream.t()
```

Detect silence.

## Options

  * m - check each channel separately (default false)
  * d - set minimum duration in seconds (default 2)
  * n - set noise tolerance (from 0 to DBL_MAX) (default 0.001)
  * noise - set noise tolerance (from 0 to DBL_MAX) (default 0.001)
  * duration - set minimum duration in seconds (default 2)
  * mono - check each channel separately (default false)

# `silenceremove`

```elixir
@spec silenceremove(FFix.Stream.t(),
  timestamp: integer() | String.t() | atom(),
  enable: String.t(),
  start_mode: integer() | String.t() | atom(),
  stop_mode: integer() | String.t() | atom(),
  start_duration: term(),
  stop_duration: term(),
  detection: integer() | String.t() | atom(),
  window: term(),
  start_periods: integer(),
  start_threshold: float(),
  start_silence: term(),
  stop_periods: integer(),
  stop_threshold: float(),
  stop_silence: term()
) :: FFix.Stream.t()
```

Remove silence.

## Options

  * timestamp - set how every output frame timestamp is processed (from 0 to 1) (default write)
    - write (0)  - full timestamps rewrite, keep only the start time
    - copy (1)  - non-dropped frames are left with same timestamp

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * start_mode - set which channel will trigger trimming from start (from 0 to 1) (default any)
    - any (0) 
    - all (1) 

  * stop_mode - set which channel will trigger trimming from end (from 0 to 1) (default all)
    - any (0) 
    - all (1) 

  * start_duration - set start duration of non-silence part (default 0)
  * stop_duration - set stop duration of silence part (default 0)
  * detection - set how silence is detected (from 0 to 5) (default rms)
    - avg (0)  - use mean absolute values of samples
    - rms (1)  - use root mean squared values of samples
    - peak (2)  - use max absolute values of samples
    - median (3)  - use median of absolute values of samples
    - ptp (4)  - use absolute of max peak to min peak difference
    - dev (5)  - use standard deviation from values of samples

  * window - set duration of window for silence detection (default 0.02)
  * start_periods - set periods of silence parts to skip from start (from 0 to 9000) (default 0)
  * start_threshold - set threshold for start silence detection (from 0 to DBL_MAX) (default 0)
  * start_silence - set start duration of silence part to keep (default 0)
  * stop_periods - set periods of silence parts to skip from end (from -9000 to 9000) (default 0)
  * stop_threshold - set threshold for stop silence detection (from 0 to DBL_MAX) (default 0)
  * stop_silence - set stop duration of silence part to keep (default 0)

# `sofalizer`

```elixir
@spec sofalizer(FFix.Stream.t(),
  type: integer() | String.t() | atom(),
  normalize: boolean(),
  rotation: float(),
  interpolate: boolean(),
  gain: float(),
  radius: float(),
  sofa: String.t(),
  elevation: float(),
  speakers: String.t(),
  lfegain: float(),
  framesize: integer(),
  minphase: boolean(),
  anglestep: float(),
  radstep: float()
) :: FFix.Stream.t()
```

SOFAlizer (Spatially Oriented Format for Acoustics).

## Options

  * type - set processing (from 0 to 1) (default freq)
    - time (0)  - time domain
    - freq (1)  - frequency domain

  * normalize - normalize IRs (default true)
  * rotation - set rotation (from -360 to 360) (default 0)
  * interpolate - interpolate IRs from neighbors (default false)
  * gain - set gain in dB (from -20 to 40) (default 0)
  * radius - set radius (from 0 to 5) (default 1)
  * sofa - sofa filename
  * elevation - set elevation (from -90 to 90) (default 0)
  * speakers - set speaker custom positions
  * lfegain - set lfe gain (from -20 to 40) (default 0)
  * framesize - set frame size (from 1024 to 96000) (default 1024)
  * minphase - minphase IRs (default false)
  * anglestep - set neighbor search angle step (from 0.01 to 10) (default 0.5)
  * radstep - set neighbor search radius step (from 0.01 to 1) (default 0.01)

# `speechnorm`

```elixir
@spec speechnorm(FFix.Stream.t(),
  link: boolean(),
  raise: float(),
  c: float(),
  p: float(),
  i: boolean(),
  m: float(),
  f: float(),
  enable: String.t(),
  h: String.t(),
  r: float(),
  l: boolean(),
  threshold: float(),
  t: float(),
  channels: String.t(),
  e: float(),
  expansion: float(),
  peak: float(),
  compression: float(),
  fall: float(),
  invert: boolean(),
  rms: float()
) :: FFix.Stream.t()
```

Speech Normalizer.

## Options

  * link - set linked channels filtering (default false)
  * raise - set the expansion raising amount (from 0 to 1) (default 0.001)
  * c - set the max compression factor (from 1 to 50) (default 2)
  * p - set the peak value (from 0 to 1) (default 0.95)
  * i - set inverted filtering (default false)
  * m - set the RMS value (from 0 to 1) (default 0)
  * f - set the compression raising amount (from 0 to 1) (default 0.001)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * h - set channels to filter (default "all")
  * r - set the expansion raising amount (from 0 to 1) (default 0.001)
  * l - set linked channels filtering (default false)
  * threshold - set the threshold value (from 0 to 1) (default 0)
  * t - set the threshold value (from 0 to 1) (default 0)
  * channels - set channels to filter (default "all")
  * e - set the max expansion factor (from 1 to 50) (default 2)
  * expansion - set the max expansion factor (from 1 to 50) (default 2)
  * peak - set the peak value (from 0 to 1) (default 0.95)
  * compression - set the max compression factor (from 1 to 50) (default 2)
  * fall - set the compression raising amount (from 0 to 1) (default 0.001)
  * invert - set inverted filtering (default false)
  * rms - set the RMS value (from 0 to 1) (default 0)

# `stereotools`

```elixir
@spec stereotools(FFix.Stream.t(),
  mode: integer() | String.t() | atom(),
  base: float(),
  enable: String.t(),
  delay: float(),
  phase: float(),
  level_in: float(),
  level_out: float(),
  balance_in: float(),
  balance_out: float(),
  softclip: boolean(),
  mutel: boolean(),
  muter: boolean(),
  phasel: boolean(),
  phaser: boolean(),
  slev: float(),
  sbal: float(),
  mlev: float(),
  mpan: float(),
  sclevel: float(),
  bmode_in: integer() | String.t() | atom(),
  bmode_out: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Apply various stereo tools.

## Options

  * mode - set stereo mode (from 0 to 10) (default lr>lr)
    - lr>lr (0) 
    - lr>ms (1) 
    - ms>lr (2) 
    - lr>ll (3) 
    - lr>rr (4) 
    - lr>l+r (5) 
    - lr>rl (6) 
    - ms>ll (7) 
    - ms>rr (8) 
    - ms>rl (9) 
    - lr>l-r (10) 

  * base - set stereo base (from -1 to 1) (default 0)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * delay - set delay (from -20 to 20) (default 0)
  * phase - set stereo phase (from 0 to 360) (default 0)
  * level_in - set level in (from 0.015625 to 64) (default 1)
  * level_out - set level out (from 0.015625 to 64) (default 1)
  * balance_in - set balance in (from -1 to 1) (default 0)
  * balance_out - set balance out (from -1 to 1) (default 0)
  * softclip - enable softclip (default false)
  * mutel - mute L (default false)
  * muter - mute R (default false)
  * phasel - phase L (default false)
  * phaser - phase R (default false)
  * slev - set side level (from 0.015625 to 64) (default 1)
  * sbal - set side balance (from -1 to 1) (default 0)
  * mlev - set middle level (from 0.015625 to 64) (default 1)
  * mpan - set middle pan (from -1 to 1) (default 0)
  * sclevel - set S/C level (from 1 to 100) (default 1)
  * bmode_in - set balance in mode (from 0 to 2) (default balance)
    - balance (0) 
    - amplitude (1) 
    - power (2) 

  * bmode_out - set balance out mode (from 0 to 2) (default balance)
    - balance (0) 
    - amplitude (1) 
    - power (2) 

# `stereowiden`

```elixir
@spec stereowiden(FFix.Stream.t(),
  enable: String.t(),
  delay: float(),
  crossfeed: float(),
  feedback: float(),
  drymix: float()
) :: FFix.Stream.t()
```

Apply stereo widening effect.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * delay - set delay time (from 1 to 100) (default 20)
  * crossfeed - set cross feed (from 0 to 0.8) (default 0.3)
  * feedback - set feedback gain (from 0 to 0.9) (default 0.3)
  * drymix - set dry-mix (from 0 to 1) (default 0.8)

# `superequalizer`

```elixir
@spec superequalizer(FFix.Stream.t(),
  &quot;1b&quot;: float(),
  &quot;2b&quot;: float(),
  &quot;3b&quot;: float(),
  &quot;4b&quot;: float(),
  &quot;5b&quot;: float(),
  &quot;6b&quot;: float(),
  &quot;7b&quot;: float(),
  &quot;8b&quot;: float(),
  &quot;9b&quot;: float(),
  &quot;10b&quot;: float(),
  &quot;11b&quot;: float(),
  &quot;12b&quot;: float(),
  &quot;13b&quot;: float(),
  &quot;14b&quot;: float(),
  &quot;15b&quot;: float(),
  &quot;16b&quot;: float(),
  &quot;17b&quot;: float(),
  &quot;18b&quot;: float()
) :: FFix.Stream.t()
```

Apply 18 band equalization filter.

## Options

  * 1b - set 65Hz band gain (from 0 to 20) (default 1)
  * 2b - set 92Hz band gain (from 0 to 20) (default 1)
  * 3b - set 131Hz band gain (from 0 to 20) (default 1)
  * 4b - set 185Hz band gain (from 0 to 20) (default 1)
  * 5b - set 262Hz band gain (from 0 to 20) (default 1)
  * 6b - set 370Hz band gain (from 0 to 20) (default 1)
  * 7b - set 523Hz band gain (from 0 to 20) (default 1)
  * 8b - set 740Hz band gain (from 0 to 20) (default 1)
  * 9b - set 1047Hz band gain (from 0 to 20) (default 1)
  * 10b - set 1480Hz band gain (from 0 to 20) (default 1)
  * 11b - set 2093Hz band gain (from 0 to 20) (default 1)
  * 12b - set 2960Hz band gain (from 0 to 20) (default 1)
  * 13b - set 4186Hz band gain (from 0 to 20) (default 1)
  * 14b - set 5920Hz band gain (from 0 to 20) (default 1)
  * 15b - set 8372Hz band gain (from 0 to 20) (default 1)
  * 16b - set 11840Hz band gain (from 0 to 20) (default 1)
  * 17b - set 16744Hz band gain (from 0 to 20) (default 1)
  * 18b - set 20000Hz band gain (from 0 to 20) (default 1)

# `surround`

```elixir
@spec surround(FFix.Stream.t(),
  smooth: float(),
  fc_out: float(),
  win_size: integer(),
  bl_in: float(),
  bcx: float(),
  lfe_mode: integer() | String.t() | atom(),
  focus: float(),
  lfe_low: integer(),
  level_in: float(),
  srx: float(),
  sl_in: float(),
  lfe: boolean(),
  fr_out: float(),
  chl_in: term(),
  br_in: float(),
  fr_in: float(),
  br_out: float(),
  fly: float(),
  angle: float(),
  fl_out: float(),
  bcy: float(),
  win_func: integer() | String.t() | atom(),
  blx: float(),
  lfe_high: integer(),
  overlap: float(),
  fl_in: float(),
  bly: float(),
  lfe_out: float(),
  level_out: float(),
  fcx: float(),
  allx: float(),
  sr_in: float(),
  bl_out: float(),
  frx: float(),
  brx: float(),
  chl_out: term(),
  sly: float(),
  slx: float(),
  bc_in: float(),
  fcy: float(),
  flx: float(),
  fry: float(),
  sl_out: float(),
  lfe_in: float(),
  bry: float(),
  sry: float(),
  fc_in: float(),
  bc_out: float(),
  sr_out: float(),
  ally: float()
) :: FFix.Stream.t()
```

Apply audio surround upmix filter.

## Options

  * smooth - set temporal smoothness strength (from 0 to 1) (default 0)
  * fc_out - set front center channel output level (from 0 to 10) (default 1)
  * win_size - set window size (from 1024 to 65536) (default 4096)
  * bl_in - set back left channel input level (from 0 to 10) (default 1)
  * bcx - set back center channel x spread (from 0.06 to 15) (default 0.5)
  * lfe_mode - set LFE channel mode (from 0 to 1) (default add)
    - add (0)  - just add LFE channel
    - sub (1)  - subtract LFE channel with others

  * focus - set soundfield transform focus (from -1 to 1) (default 0)
  * lfe_low - LFE low cut off (from 0 to 256) (default 128)
  * level_in - set input level (from 0 to 10) (default 1)
  * srx - set side right channel x spread (from 0.06 to 15) (default 0.5)
  * sl_in - set side left channel input level (from 0 to 10) (default 1)
  * lfe - output LFE (default true)
  * fr_out - set front right channel output level (from 0 to 10) (default 1)
  * chl_in - set input channel layout (default "stereo")
  * br_in - set back right channel input level (from 0 to 10) (default 1)
  * fr_in - set front right channel input level (from 0 to 10) (default 1)
  * br_out - set back right channel output level (from 0 to 10) (default 1)
  * fly - set front left channel y spread (from 0.06 to 15) (default 0.5)
  * angle - set soundfield transform angle (from 0 to 360) (default 90)
  * fl_out - set front left channel output level (from 0 to 10) (default 1)
  * bcy - set back center channel y spread (from 0.06 to 15) (default 0.5)
  * win_func - set window function (from 0 to 20) (default hann)
    - rect (0)  - Rectangular
    - bartlett (4)  - Bartlett
    - hann (1)  - Hann
    - hanning (1)  - Hanning
    - hamming (2)  - Hamming
    - blackman (3)  - Blackman
    - welch (5)  - Welch
    - flattop (6)  - Flat-top
    - bharris (7)  - Blackman-Harris
    - bnuttall (8)  - Blackman-Nuttall
    - bhann (11)  - Bartlett-Hann
    - sine (9)  - Sine
    - nuttall (10)  - Nuttall
    - lanczos (12)  - Lanczos
    - gauss (13)  - Gauss
    - tukey (14)  - Tukey
    - dolph (15)  - Dolph-Chebyshev
    - cauchy (16)  - Cauchy
    - parzen (17)  - Parzen
    - poisson (18)  - Poisson
    - bohman (19)  - Bohman
    - kaiser (20)  - Kaiser

  * blx - set back left channel x spread (from 0.06 to 15) (default 0.5)
  * lfe_high - LFE high cut off (from 0 to 512) (default 256)
  * overlap - set window overlap (from 0 to 1) (default 0.5)
  * fl_in - set front left channel input level (from 0 to 10) (default 1)
  * bly - set back left channel y spread (from 0.06 to 15) (default 0.5)
  * lfe_out - set lfe channel output level (from 0 to 10) (default 1)
  * level_out - set output level (from 0 to 10) (default 1)
  * fcx - set front center channel x spread (from 0.06 to 15) (default 0.5)
  * allx - set all channel's x spread (from -1 to 15) (default -1)
  * sr_in - set side right channel input level (from 0 to 10) (default 1)
  * bl_out - set back left channel output level (from 0 to 10) (default 1)
  * frx - set front right channel x spread (from 0.06 to 15) (default 0.5)
  * brx - set back right channel x spread (from 0.06 to 15) (default 0.5)
  * chl_out - set output channel layout (default "5.1")
  * sly - set side left channel y spread (from 0.06 to 15) (default 0.5)
  * slx - set side left channel x spread (from 0.06 to 15) (default 0.5)
  * bc_in - set back center channel input level (from 0 to 10) (default 1)
  * fcy - set front center channel y spread (from 0.06 to 15) (default 0.5)
  * flx - set front left channel x spread (from 0.06 to 15) (default 0.5)
  * fry - set front right channel y spread (from 0.06 to 15) (default 0.5)
  * sl_out - set side left channel output level (from 0 to 10) (default 1)
  * lfe_in - set lfe channel input level (from 0 to 10) (default 1)
  * bry - set back right channel y spread (from 0.06 to 15) (default 0.5)
  * sry - set side right channel y spread (from 0.06 to 15) (default 0.5)
  * fc_in - set front center channel input level (from 0 to 10) (default 1)
  * bc_out - set back center channel output level (from 0 to 10) (default 1)
  * sr_out - set side right channel output level (from 0 to 10) (default 1)
  * ally - set all channel's y spread (from -1 to 15) (default -1)

# `tiltshelf`

```elixir
@spec tiltshelf(FFix.Stream.t(),
  normalize: boolean(),
  c: String.t(),
  p: integer(),
  m: float(),
  f: float(),
  a: integer() | String.t() | atom(),
  b: integer(),
  enable: String.t(),
  r: integer() | String.t() | atom(),
  width: float(),
  precision: integer() | String.t() | atom(),
  w: float(),
  mix: float(),
  n: boolean(),
  transform: integer() | String.t() | atom(),
  t: integer() | String.t() | atom(),
  channels: String.t(),
  gain: float(),
  poles: integer(),
  frequency: float(),
  width_type: integer() | String.t() | atom(),
  blocksize: integer(),
  g: float()
) :: FFix.Stream.t()
```

Apply a tilt shelf filter.

## Options

  * normalize - normalize coefficients (default false)
  * c - set channels to filter (default "all")
  * p - set number of poles (from 1 to 2) (default 2)
  * m - set mix (from 0 to 1) (default 1)
  * f - set central frequency (from 0 to 999999) (default 3000)
  * a - set transform type (from 0 to 6) (default di)
    - di (0)  - direct form I
    - dii (1)  - direct form II
    - tdi (2)  - transposed direct form I
    - tdii (3)  - transposed direct form II
    - latt (4)  - lattice-ladder form
    - svf (5)  - state variable filter form
    - zdf (6)  - zero-delay filter form

  * b - set the block size (from 0 to 32768) (default 0)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * r - set filtering precision (from -1 to 3) (default auto)
    - auto (-1)  - automatic
    - s16 (0)  - signed 16-bit
    - s32 (1)  - signed 32-bit
    - f32 (2)  - floating-point single
    - f64 (3)  - floating-point double

  * width - set width (from 0 to 99999) (default 0.5)
  * precision - set filtering precision (from -1 to 3) (default auto)
    - auto (-1)  - automatic
    - s16 (0)  - signed 16-bit
    - s32 (1)  - signed 32-bit
    - f32 (2)  - floating-point single
    - f64 (3)  - floating-point double

  * w - set width (from 0 to 99999) (default 0.5)
  * mix - set mix (from 0 to 1) (default 1)
  * n - normalize coefficients (default false)
  * transform - set transform type (from 0 to 6) (default di)
    - di (0)  - direct form I
    - dii (1)  - direct form II
    - tdi (2)  - transposed direct form I
    - tdii (3)  - transposed direct form II
    - latt (4)  - lattice-ladder form
    - svf (5)  - state variable filter form
    - zdf (6)  - zero-delay filter form

  * t - set filter-width type (from 1 to 5) (default q)
    - h (1)  - Hz
    - q (3)  - Q-Factor
    - o (2)  - octave
    - s (4)  - slope
    - k (5)  - kHz

  * channels - set channels to filter (default "all")
  * gain - set gain (from -900 to 900) (default 0)
  * poles - set number of poles (from 1 to 2) (default 2)
  * frequency - set central frequency (from 0 to 999999) (default 3000)
  * width_type - set filter-width type (from 1 to 5) (default q)
    - h (1)  - Hz
    - q (3)  - Q-Factor
    - o (2)  - octave
    - s (4)  - slope
    - k (5)  - kHz

  * blocksize - set the block size (from 0 to 32768) (default 0)
  * g - set gain (from -900 to 900) (default 0)

# `treble`

```elixir
@spec treble(FFix.Stream.t(),
  normalize: boolean(),
  c: String.t(),
  p: integer(),
  m: float(),
  f: float(),
  a: integer() | String.t() | atom(),
  b: integer(),
  enable: String.t(),
  r: integer() | String.t() | atom(),
  width: float(),
  precision: integer() | String.t() | atom(),
  w: float(),
  mix: float(),
  n: boolean(),
  transform: integer() | String.t() | atom(),
  t: integer() | String.t() | atom(),
  channels: String.t(),
  gain: float(),
  poles: integer(),
  frequency: float(),
  width_type: integer() | String.t() | atom(),
  blocksize: integer(),
  g: float()
) :: FFix.Stream.t()
```

Boost or cut upper frequencies.

## Options

  * normalize - normalize coefficients (default false)
  * c - set channels to filter (default "all")
  * p - set number of poles (from 1 to 2) (default 2)
  * m - set mix (from 0 to 1) (default 1)
  * f - set central frequency (from 0 to 999999) (default 3000)
  * a - set transform type (from 0 to 6) (default di)
    - di (0)  - direct form I
    - dii (1)  - direct form II
    - tdi (2)  - transposed direct form I
    - tdii (3)  - transposed direct form II
    - latt (4)  - lattice-ladder form
    - svf (5)  - state variable filter form
    - zdf (6)  - zero-delay filter form

  * b - set the block size (from 0 to 32768) (default 0)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * r - set filtering precision (from -1 to 3) (default auto)
    - auto (-1)  - automatic
    - s16 (0)  - signed 16-bit
    - s32 (1)  - signed 32-bit
    - f32 (2)  - floating-point single
    - f64 (3)  - floating-point double

  * width - set width (from 0 to 99999) (default 0.5)
  * precision - set filtering precision (from -1 to 3) (default auto)
    - auto (-1)  - automatic
    - s16 (0)  - signed 16-bit
    - s32 (1)  - signed 32-bit
    - f32 (2)  - floating-point single
    - f64 (3)  - floating-point double

  * w - set width (from 0 to 99999) (default 0.5)
  * mix - set mix (from 0 to 1) (default 1)
  * n - normalize coefficients (default false)
  * transform - set transform type (from 0 to 6) (default di)
    - di (0)  - direct form I
    - dii (1)  - direct form II
    - tdi (2)  - transposed direct form I
    - tdii (3)  - transposed direct form II
    - latt (4)  - lattice-ladder form
    - svf (5)  - state variable filter form
    - zdf (6)  - zero-delay filter form

  * t - set filter-width type (from 1 to 5) (default q)
    - h (1)  - Hz
    - q (3)  - Q-Factor
    - o (2)  - octave
    - s (4)  - slope
    - k (5)  - kHz

  * channels - set channels to filter (default "all")
  * gain - set gain (from -900 to 900) (default 0)
  * poles - set number of poles (from 1 to 2) (default 2)
  * frequency - set central frequency (from 0 to 999999) (default 3000)
  * width_type - set filter-width type (from 1 to 5) (default q)
    - h (1)  - Hz
    - q (3)  - Q-Factor
    - o (2)  - octave
    - s (4)  - slope
    - k (5)  - kHz

  * blocksize - set the block size (from 0 to 32768) (default 0)
  * g - set gain (from -900 to 900) (default 0)

# `tremolo`

```elixir
@spec tremolo(FFix.Stream.t(), f: float(), enable: String.t(), d: float()) ::
  FFix.Stream.t()
```

Apply tremolo effect.

## Options

  * f - set frequency in hertz (from 0.1 to 20000) (default 5)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * d - set depth as percentage (from 0 to 1) (default 0.5)

# `vibrato`

```elixir
@spec vibrato(FFix.Stream.t(), f: float(), enable: String.t(), d: float()) ::
  FFix.Stream.t()
```

Apply vibrato effect.

## Options

  * f - set frequency in hertz (from 0.1 to 20000) (default 5)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * d - set depth as percentage (from 0 to 1) (default 0.5)

# `virtualbass`

```elixir
@spec virtualbass(FFix.Stream.t(),
  enable: String.t(),
  cutoff: float(),
  strength: float()
) ::
  FFix.Stream.t()
```

Audio Virtual Bass.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * cutoff - set virtual bass cutoff (from 100 to 500) (default 250)
  * strength - set virtual bass strength (from 0.5 to 3) (default 3)

# `volume`

```elixir
@spec volume(FFix.Stream.t(),
  eval: integer() | String.t() | atom(),
  enable: String.t(),
  precision: integer() | String.t() | atom(),
  replaygain: integer() | String.t() | atom(),
  volume: String.t(),
  replaygain_preamp: float(),
  replaygain_noclip: boolean()
) :: FFix.Stream.t()
```

Change input volume.

## Options

  * eval - specify when to evaluate expressions (from 0 to 1) (default once)
    - once (0)  - eval volume expression once
    - frame (1)  - eval volume expression per-frame

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * precision - select mathematical precision (from 0 to 2) (default float)
    - fixed (0)  - select 8-bit fixed-point
    - float (1)  - select 32-bit floating-point
    - double (2)  - select 64-bit floating-point

  * replaygain - Apply replaygain side data when present (from 0 to 3) (default drop)
    - drop (0)  - replaygain side data is dropped
    - ignore (1)  - replaygain side data is ignored
    - track (2)  - track gain is preferred
    - album (3)  - album gain is preferred

  * volume - set volume adjustment expression (default "1.0")
  * replaygain_preamp - Apply replaygain pre-amplification (from -15 to 15) (default 0)
  * replaygain_noclip - Apply replaygain clipping prevention (default true)

# `volumedetect`

```elixir
@spec volumedetect(
  FFix.Stream.t(),
  []
) :: FFix.Stream.t()
```

Detect audio volume.

## Options

# `a3dscope`

```elixir
@spec a3dscope(FFix.Stream.t(),
  size: term(),
  length: integer(),
  s: term(),
  r: term(),
  rate: term(),
  fov: float(),
  roll: float(),
  pitch: float(),
  yaw: float(),
  xzoom: float(),
  yzoom: float(),
  zzoom: float(),
  xpos: float(),
  ypos: float(),
  zpos: float()
) :: FFix.Stream.t()
```

Convert input audio to 3d scope video output.

## Options

  * size - set video size (default "hd720")
  * length - set length (from 1 to 60) (default 15)
  * s - set video size (default "hd720")
  * r - set video rate (default "25")
  * rate - set video rate (default "25")
  * fov - set camera FoV (from 40 to 150) (default 90)
  * roll - set camera roll (from -180 to 180) (default 0)
  * pitch - set camera pitch (from -180 to 180) (default 0)
  * yaw - set camera yaw (from -180 to 180) (default 0)
  * xzoom - set camera zoom (from 0.01 to 10) (default 1)
  * yzoom - set camera zoom (from 0.01 to 10) (default 1)
  * zzoom - set camera zoom (from 0.01 to 10) (default 1)
  * xpos - set camera position (from -60 to 60) (default 0)
  * ypos - set camera position (from -60 to 60) (default 0)
  * zpos - set camera position (from -60 to 60) (default 0)

# `abitscope`

```elixir
@spec abitscope(FFix.Stream.t(),
  size: term(),
  mode: integer() | String.t() | atom(),
  m: integer() | String.t() | atom(),
  s: term(),
  r: term(),
  colors: String.t(),
  rate: term()
) :: FFix.Stream.t()
```

Convert input audio to audio bit scope video output.

## Options

  * size - set video size (default "1024x256")
  * mode - set output mode (from 0 to 1) (default bars)
    - bars (0) 
    - trace (1) 

  * m - set output mode (from 0 to 1) (default bars)
    - bars (0) 
    - trace (1) 

  * s - set video size (default "1024x256")
  * r - set video rate (default "25")
  * colors - set channels colors (default "red|green|blue|yellow|orange|lime|pink|magenta|brown")
  * rate - set video rate (default "25")

# `adrawgraph`

```elixir
@spec adrawgraph(FFix.Stream.t(),
  max: float(),
  min: float(),
  size: term(),
  mode: integer() | String.t() | atom(),
  s: term(),
  r: term(),
  slide: integer() | String.t() | atom(),
  rate: term(),
  m1: String.t(),
  fg1: String.t(),
  m2: String.t(),
  fg2: String.t(),
  m3: String.t(),
  fg3: String.t(),
  m4: String.t(),
  fg4: String.t(),
  bg: term()
) :: FFix.Stream.t()
```

Draw a graph using input audio metadata.

## Options

  * max - set maximal value (from INT_MIN to INT_MAX) (default 1)
  * min - set minimal value (from INT_MIN to INT_MAX) (default -1)
  * size - set graph size (default "900x256")
  * mode - set graph mode (from 0 to 2) (default line)
    - bar (0)  - draw bars
    - dot (1)  - draw dots
    - line (2)  - draw lines

  * s - set graph size (default "900x256")
  * r - set video rate (default "25")
  * slide - set slide mode (from 0 to 4) (default frame)
    - frame (0)  - draw new frames
    - replace (1)  - replace old columns with new
    - scroll (2)  - scroll from right to left
    - rscroll (3)  - scroll from left to right
    - picture (4)  - display graph in single frame

  * rate - set video rate (default "25")
  * m1 - set 1st metadata key (default "")
  * fg1 - set 1st foreground color expression (default "0xffff0000")
  * m2 - set 2nd metadata key (default "")
  * fg2 - set 2nd foreground color expression (default "0xff00ff00")
  * m3 - set 3rd metadata key (default "")
  * fg3 - set 3rd foreground color expression (default "0xffff00ff")
  * m4 - set 4th metadata key (default "")
  * fg4 - set 4th foreground color expression (default "0xffffff00")
  * bg - set background color (default "white")

# `agraphmonitor`

```elixir
@spec agraphmonitor(FFix.Stream.t(),
  flags: integer() | String.t() | atom() | [String.t() | atom()],
  size: term(),
  mode: integer() | String.t() | atom() | [String.t() | atom()],
  m: integer() | String.t() | atom() | [String.t() | atom()],
  f: integer() | String.t() | atom() | [String.t() | atom()],
  s: term(),
  r: term(),
  o: float(),
  rate: term(),
  opacity: float()
) :: FFix.Stream.t()
```

Show various filtergraph stats.

## Options

  * flags - set flags (default all+queue)
    - none
    - all
    - queue
    - frame_count_in
    - frame_count_out
    - frame_count_delta
    - pts
    - pts_delta
    - time
    - time_delta
    - timebase
    - format
    - size
    - rate
    - eof
    - sample_count_in
    - sample_count_out
    - sample_count_delta
    - disabled

  * size - set monitor size (default "hd720")
  * mode - set mode (default 0)
    - full
    - compact
    - nozero
    - noeof
    - nodisabled

  * m - set mode (default 0)
    - full
    - compact
    - nozero
    - noeof
    - nodisabled

  * f - set flags (default all+queue)
    - none
    - all
    - queue
    - frame_count_in
    - frame_count_out
    - frame_count_delta
    - pts
    - pts_delta
    - time
    - time_delta
    - timebase
    - format
    - size
    - rate
    - eof
    - sample_count_in
    - sample_count_out
    - sample_count_delta
    - disabled

  * s - set monitor size (default "hd720")
  * r - set video rate (default "25")
  * o - set video opacity (from 0 to 1) (default 0.9)
  * rate - set video rate (default "25")
  * opacity - set video opacity (from 0 to 1) (default 0.9)

# `ahistogram`

```elixir
@spec ahistogram(FFix.Stream.t(),
  size: term(),
  s: term(),
  r: term(),
  slide: integer() | String.t() | atom(),
  scale: integer() | String.t() | atom(),
  rate: term(),
  ascale: integer() | String.t() | atom(),
  dmode: integer() | String.t() | atom(),
  acount: integer(),
  rheight: float(),
  hmode: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Convert input audio to histogram video output.

## Options

  * size - set video size (default "hd720")
  * s - set video size (default "hd720")
  * r - set video rate (default "25")
  * slide - set sonogram sliding (from 0 to 1) (default replace)
    - replace (0)  - replace old rows with new
    - scroll (1)  - scroll from top to bottom

  * scale - set display scale (from 0 to 4) (default log)
    - log (3)  - logarithmic
    - sqrt (1)  - square root
    - cbrt (2)  - cubic root
    - lin (0)  - linear
    - rlog (4)  - reverse logarithmic

  * rate - set video rate (default "25")
  * ascale - set amplitude scale (from 0 to 1) (default log)
    - log (1)  - logarithmic
    - lin (0)  - linear

  * dmode - set method to display channels (from 0 to 1) (default single)
    - single (0)  - all channels use single histogram
    - separate (1)  - each channel have own histogram

  * acount - how much frames to accumulate (from -1 to 100) (default 1)
  * rheight - set histogram ratio of window height (from 0 to 1) (default 0.1)
  * hmode - set histograms mode (from 0 to 1) (default abs)
    - abs (0)  - use absolute samples
    - sign (1)  - use unchanged samples

# `avectorscope`

```elixir
@spec avectorscope(FFix.Stream.t(),
  ac: integer(),
  size: term(),
  gc: integer(),
  mode: integer() | String.t() | atom(),
  bc: integer(),
  m: integer() | String.t() | atom(),
  s: term(),
  r: term(),
  swap: boolean(),
  scale: integer() | String.t() | atom(),
  rate: term(),
  mirror: integer() | String.t() | atom(),
  draw: integer() | String.t() | atom(),
  rf: integer(),
  zoom: float(),
  rc: integer(),
  gf: integer(),
  bf: integer(),
  af: integer()
) :: FFix.Stream.t()
```

Convert input audio to vectorscope video output.

## Options

  * ac - set alpha contrast (from 0 to 255) (default 255)
  * size - set video size (default "400x400")
  * gc - set green contrast (from 0 to 255) (default 160)
  * mode - set mode (from 0 to 2) (default lissajous)
    - lissajous (0) 
    - lissajous_xy (1) 
    - polar (2) 

  * bc - set blue contrast (from 0 to 255) (default 80)
  * m - set mode (from 0 to 2) (default lissajous)
    - lissajous (0) 
    - lissajous_xy (1) 
    - polar (2) 

  * s - set video size (default "400x400")
  * r - set video rate (default "25")
  * swap - swap x axis with y axis (default true)
  * scale - set amplitude scale mode (from 0 to 3) (default lin)
    - lin (0)  - linear
    - sqrt (1)  - square root
    - cbrt (2)  - cube root
    - log (3)  - logarithmic

  * rate - set video rate (default "25")
  * mirror - mirror axis (from 0 to 3) (default none)
    - none (0)  - no mirror
    - x (1)  - mirror x
    - y (2)  - mirror y
    - xy (3)  - mirror both

  * draw - set draw mode (from 0 to 2) (default dot)
    - dot (0)  - draw dots
    - line (1)  - draw lines
    - aaline (2)  - draw anti-aliased lines

  * rf - set red fade (from 0 to 255) (default 15)
  * zoom - set zoom factor (from 0 to 10) (default 1)
  * rc - set red contrast (from 0 to 255) (default 40)
  * gf - set green fade (from 0 to 255) (default 10)
  * bf - set blue fade (from 0 to 255) (default 5)
  * af - set alpha fade (from 0 to 255) (default 5)

# `showcqt`

```elixir
@spec showcqt(FFix.Stream.t(),
  gamma2: float(),
  bar_v: String.t(),
  fcount: integer(),
  fontfile: String.t(),
  fontcolor: String.t(),
  cscheme: String.t(),
  count: integer(),
  sono_v: String.t(),
  fullhd: boolean(),
  axisfile: String.t(),
  fps: term(),
  tc: float(),
  volume2: String.t(),
  s: term(),
  sono_h: integer(),
  tlength: String.t(),
  font: String.t(),
  axis: boolean(),
  r: term(),
  basefreq: float(),
  text: boolean(),
  axis_h: integer(),
  bar_h: integer(),
  endfreq: float(),
  volume: String.t(),
  bar_t: float(),
  timeclamp: float(),
  size: term(),
  gamma: float(),
  sono_g: float(),
  rate: term(),
  csp: integer() | String.t() | atom(),
  attack: float(),
  bar_g: float(),
  coeffclamp: float()
) :: FFix.Stream.t()
```

Convert input audio to a CQT (Constant/Clamped Q Transform) spectrum video output.

## Options

  * gamma2 - set bargraph gamma (from 1 to 7) (default 1)
  * bar_v - set bargraph volume (default "sono_v")
  * fcount - set frequency count (from 0 to 10) (default 0)
  * fontfile - set axis font file
  * fontcolor - set font color (default "st(0, (midi(f)-59.5)/12);st(1, if(between(ld(0),0,1), 0.5-0.5*cos(2*PI*ld(0)), 0));r(1-ld(1)) + b(ld(1))")
  * cscheme - set color scheme (default "1|0.5|0|0|0.5|1")
  * count - set transform count (from 1 to 30) (default 6)
  * sono_v - set sonogram volume (default "16")
  * fullhd - set fullhd size (default true)
  * axisfile - set axis image
  * fps - set video rate (default "25")
  * tc - set timeclamp (from 0.002 to 1) (default 0.17)
  * volume2 - set bargraph volume (default "sono_v")
  * s - set video size (default "1920x1080")
  * sono_h - set sonogram height (from -1 to INT_MAX) (default -1)
  * tlength - set tlength (default "384*tc/(384+tc*f)")
  * font - set axis font
  * axis - draw axis (default true)
  * r - set video rate (default "25")
  * basefreq - set base frequency (from 10 to 100000) (default 20.0152)
  * text - draw axis (default true)
  * axis_h - set axis height (from -1 to INT_MAX) (default -1)
  * bar_h - set bargraph height (from -1 to INT_MAX) (default -1)
  * endfreq - set end frequency (from 10 to 100000) (default 20495.6)
  * volume - set sonogram volume (default "16")
  * bar_t - set bar transparency (from 0 to 1) (default 1)
  * timeclamp - set timeclamp (from 0.002 to 1) (default 0.17)
  * size - set video size (default "1920x1080")
  * gamma - set sonogram gamma (from 1 to 7) (default 3)
  * sono_g - set sonogram gamma (from 1 to 7) (default 3)
  * rate - set video rate (default "25")
  * csp - set color space (from 0 to INT_MAX) (default unspecified)
    - unspecified (2)  - unspecified
    - bt709 (1)  - bt709
    - fcc (4)  - fcc
    - bt470bg (5)  - bt470bg
    - smpte170m (6)  - smpte170m
    - smpte240m (7)  - smpte240m
    - bt2020ncl (9)  - bt2020ncl

  * attack - set attack time (from 0 to 1) (default 0)
  * bar_g - set bargraph gamma (from 1 to 7) (default 1)
  * coeffclamp - set coeffclamp (from 0.1 to 10) (default 1)

# `showcwt`

```elixir
@spec showcwt(FFix.Stream.t(),
  max: float(),
  min: float(),
  size: term(),
  mode: integer() | String.t() | atom(),
  s: term(),
  r: String.t(),
  rotation: float(),
  slide: integer() | String.t() | atom(),
  direction: integer() | String.t() | atom(),
  scale: integer() | String.t() | atom(),
  rate: String.t(),
  iscale: integer() | String.t() | atom(),
  imin: float(),
  imax: float(),
  logb: float(),
  deviation: float(),
  pps: integer(),
  bar: float()
) :: FFix.Stream.t()
```

Convert input audio to a CWT (Continuous Wavelet Transform) spectrum video output.

## Options

  * max - set maximum frequency (from 1 to 192000) (default 20000)
  * min - set minimum frequency (from 1 to 192000) (default 20)
  * size - set video size (default "640x512")
  * mode - set output mode (from 0 to 4) (default magnitude)
    - magnitude (0)  - magnitude
    - phase (1)  - phase
    - magphase (2)  - magnitude+phase
    - channel (3)  - color per channel
    - stereo (4)  - stereo difference

  * s - set video size (default "640x512")
  * r - set video rate (default "25")
  * rotation - set color rotation (from -1 to 1) (default 0)
  * slide - set slide mode (from 0 to 2) (default replace)
    - replace (0)  - replace
    - scroll (1)  - scroll
    - frame (2)  - frame

  * direction - set direction mode (from 0 to 3) (default lr)
    - lr (0)  - left to right
    - rl (1)  - right to left
    - ud (2)  - up to down
    - du (3)  - down to up

  * scale - set frequency scale (from 0 to 8) (default linear)
    - linear (0)  - linear
    - log (1)  - logarithmic
    - bark (2)  - bark
    - mel (3)  - mel
    - erbs (4)  - erbs
    - sqrt (5)  - sqrt
    - cbrt (6)  - cbrt
    - qdrt (7)  - qdrt
    - fm (8)  - fm

  * rate - set video rate (default "25")
  * iscale - set intensity scale (from 0 to 4) (default log)
    - linear (1)  - linear
    - log (0)  - logarithmic
    - sqrt (2)  - sqrt
    - cbrt (3)  - cbrt
    - qdrt (4)  - qdrt

  * imin - set minimum intensity (from 0 to 1) (default 0)
  * imax - set maximum intensity (from 0 to 1) (default 1)
  * logb - set logarithmic basis (from 0 to 1) (default 0.0001)
  * deviation - set frequency deviation (from 0 to 100) (default 1)
  * pps - set pixels per second (from 1 to 1024) (default 64)
  * bar - set bargraph ratio (from 0 to 1) (default 0)

# `showfreqs`

```elixir
@spec showfreqs(FFix.Stream.t(),
  data: integer() | String.t() | atom(),
  size: term(),
  mode: integer() | String.t() | atom(),
  s: term(),
  r: term(),
  colors: String.t(),
  rate: term(),
  overlap: float(),
  channels: String.t(),
  fscale: integer() | String.t() | atom(),
  win_func: integer() | String.t() | atom(),
  win_size: integer(),
  ascale: integer() | String.t() | atom(),
  averaging: integer(),
  cmode: integer() | String.t() | atom(),
  minamp: float()
) :: FFix.Stream.t()
```

Convert input audio to a frequencies video output.

## Options

  * data - set data mode (from 0 to 2) (default magnitude)
    - magnitude (0)  - show magnitude
    - phase (1)  - show phase
    - delay (2)  - show group delay

  * size - set video size (default "1024x512")
  * mode - set display mode (from 0 to 2) (default bar)
    - line (0)  - show lines
    - bar (1)  - show bars
    - dot (2)  - show dots

  * s - set video size (default "1024x512")
  * r - set video rate (default "25")
  * colors - set channels colors (default "red|green|blue|yellow|orange|lime|pink|magenta|brown")
  * rate - set video rate (default "25")
  * overlap - set window overlap (from 0 to 1) (default 1)
  * channels - set channels to draw (default "all")
  * fscale - set frequency scale (from 0 to 2) (default lin)
    - lin (0)  - linear
    - log (1)  - logarithmic
    - rlog (2)  - reverse logarithmic

  * win_func - set window function (from 0 to 20) (default hann)
    - rect (0)  - Rectangular
    - bartlett (4)  - Bartlett
    - hann (1)  - Hann
    - hanning (1)  - Hanning
    - hamming (2)  - Hamming
    - blackman (3)  - Blackman
    - welch (5)  - Welch
    - flattop (6)  - Flat-top
    - bharris (7)  - Blackman-Harris
    - bnuttall (8)  - Blackman-Nuttall
    - bhann (11)  - Bartlett-Hann
    - sine (9)  - Sine
    - nuttall (10)  - Nuttall
    - lanczos (12)  - Lanczos
    - gauss (13)  - Gauss
    - tukey (14)  - Tukey
    - dolph (15)  - Dolph-Chebyshev
    - cauchy (16)  - Cauchy
    - parzen (17)  - Parzen
    - poisson (18)  - Poisson
    - bohman (19)  - Bohman
    - kaiser (20)  - Kaiser

  * win_size - set window size (from 16 to 65536) (default 2048)
  * ascale - set amplitude scale (from 0 to 3) (default log)
    - lin (0)  - linear
    - sqrt (1)  - square root
    - cbrt (2)  - cubic root
    - log (3)  - logarithmic

  * averaging - set time averaging (from 0 to INT_MAX) (default 1)
  * cmode - set channel mode (from 0 to 1) (default combined)
    - combined (0)  - show all channels in same window
    - separate (1)  - show each channel in own window

  * minamp - set minimum amplitude (from FLT_MIN to 1e-06) (default 1e-06)

# `showspatial`

```elixir
@spec showspatial(FFix.Stream.t(),
  size: term(),
  s: term(),
  r: term(),
  rate: term(),
  win_func: integer() | String.t() | atom(),
  win_size: integer()
) :: FFix.Stream.t()
```

Convert input audio to a spatial video output.

## Options

  * size - set video size (default "512x512")
  * s - set video size (default "512x512")
  * r - set video rate (default "25")
  * rate - set video rate (default "25")
  * win_func - set window function (from 0 to 20) (default hann)
    - rect (0)  - Rectangular
    - bartlett (4)  - Bartlett
    - hann (1)  - Hann
    - hanning (1)  - Hanning
    - hamming (2)  - Hamming
    - blackman (3)  - Blackman
    - welch (5)  - Welch
    - flattop (6)  - Flat-top
    - bharris (7)  - Blackman-Harris
    - bnuttall (8)  - Blackman-Nuttall
    - bhann (11)  - Bartlett-Hann
    - sine (9)  - Sine
    - nuttall (10)  - Nuttall
    - lanczos (12)  - Lanczos
    - gauss (13)  - Gauss
    - tukey (14)  - Tukey
    - dolph (15)  - Dolph-Chebyshev
    - cauchy (16)  - Cauchy
    - parzen (17)  - Parzen
    - poisson (18)  - Poisson
    - bohman (19)  - Bohman
    - kaiser (20)  - Kaiser

  * win_size - set window size (from 1024 to 65536) (default 4096)

# `showspectrum`

```elixir
@spec showspectrum(FFix.Stream.t(),
  data: integer() | String.t() | atom(),
  size: term(),
  start: integer(),
  stop: integer(),
  mode: integer() | String.t() | atom(),
  s: term(),
  limit: float(),
  rotation: float(),
  slide: integer() | String.t() | atom(),
  color: integer() | String.t() | atom(),
  fps: String.t(),
  scale: integer() | String.t() | atom(),
  overlap: float(),
  fscale: integer() | String.t() | atom(),
  saturation: float(),
  win_func: integer() | String.t() | atom(),
  orientation: integer() | String.t() | atom(),
  gain: float(),
  legend: boolean(),
  drange: float(),
  opacity: float()
) :: FFix.Stream.t()
```

Convert input audio to a spectrum video output.

## Options

  * data - set data mode (from 0 to 2) (default magnitude)
    - magnitude (0) 
    - phase (1) 
    - uphase (2) 

  * size - set video size (default "640x512")
  * start - start frequency (from 0 to INT_MAX) (default 0)
  * stop - stop frequency (from 0 to INT_MAX) (default 0)
  * mode - set channel display mode (from 0 to 1) (default combined)
    - combined (0)  - combined mode
    - separate (1)  - separate mode

  * s - set video size (default "640x512")
  * limit - set upper limit in dBFS (from -100 to 100) (default 0)
  * rotation - color rotation (from -1 to 1) (default 0)
  * slide - set sliding mode (from 0 to 4) (default replace)
    - replace (0)  - replace old columns with new
    - scroll (1)  - scroll from right to left
    - fullframe (2)  - return full frames
    - rscroll (3)  - scroll from left to right
    - lreplace (4)  - replace from right to left

  * color - set channel coloring (from 0 to 14) (default channel)
    - channel (0)  - separate color for each channel
    - intensity (1)  - intensity based coloring
    - rainbow (2)  - rainbow based coloring
    - moreland (3)  - moreland based coloring
    - nebulae (4)  - nebulae based coloring
    - fire (5)  - fire based coloring
    - fiery (6)  - fiery based coloring
    - fruit (7)  - fruit based coloring
    - cool (8)  - cool based coloring
    - magma (9)  - magma based coloring
    - green (10)  - green based coloring
    - viridis (11)  - viridis based coloring
    - plasma (12)  - plasma based coloring
    - cividis (13)  - cividis based coloring
    - terrain (14)  - terrain based coloring

  * fps - set video rate (default "auto")
  * scale - set display scale (from 0 to 5) (default sqrt)
    - lin (0)  - linear
    - sqrt (1)  - square root
    - cbrt (2)  - cubic root
    - log (3)  - logarithmic
    - 4thrt (4)  - 4th root
    - 5thrt (5)  - 5th root

  * overlap - set window overlap (from 0 to 1) (default 0)
  * fscale - set frequency scale (from 0 to 1) (default lin)
    - lin (0)  - linear
    - log (1)  - logarithmic

  * saturation - color saturation multiplier (from -10 to 10) (default 1)
  * win_func - set window function (from 0 to 20) (default hann)
    - rect (0)  - Rectangular
    - bartlett (4)  - Bartlett
    - hann (1)  - Hann
    - hanning (1)  - Hanning
    - hamming (2)  - Hamming
    - blackman (3)  - Blackman
    - welch (5)  - Welch
    - flattop (6)  - Flat-top
    - bharris (7)  - Blackman-Harris
    - bnuttall (8)  - Blackman-Nuttall
    - bhann (11)  - Bartlett-Hann
    - sine (9)  - Sine
    - nuttall (10)  - Nuttall
    - lanczos (12)  - Lanczos
    - gauss (13)  - Gauss
    - tukey (14)  - Tukey
    - dolph (15)  - Dolph-Chebyshev
    - cauchy (16)  - Cauchy
    - parzen (17)  - Parzen
    - poisson (18)  - Poisson
    - bohman (19)  - Bohman
    - kaiser (20)  - Kaiser

  * orientation - set orientation (from 0 to 1) (default vertical)
    - vertical (0) 
    - horizontal (1) 

  * gain - set scale gain (from 0 to 128) (default 1)
  * legend - draw legend (default false)
  * drange - set dynamic range in dBFS (from 10 to 200) (default 120)
  * opacity - set opacity strength (from 0 to 10) (default 1)

# `showspectrumpic`

```elixir
@spec showspectrumpic(FFix.Stream.t(),
  size: term(),
  start: integer(),
  stop: integer(),
  mode: integer() | String.t() | atom(),
  s: term(),
  limit: float(),
  rotation: float(),
  color: integer() | String.t() | atom(),
  scale: integer() | String.t() | atom(),
  fscale: integer() | String.t() | atom(),
  saturation: float(),
  win_func: integer() | String.t() | atom(),
  orientation: integer() | String.t() | atom(),
  gain: float(),
  legend: boolean(),
  drange: float(),
  opacity: float()
) :: FFix.Stream.t()
```

Convert input audio to a spectrum video output single picture.

## Options

  * size - set video size (default "4096x2048")
  * start - start frequency (from 0 to INT_MAX) (default 0)
  * stop - stop frequency (from 0 to INT_MAX) (default 0)
  * mode - set channel display mode (from 0 to 1) (default combined)
    - combined (0)  - combined mode
    - separate (1)  - separate mode

  * s - set video size (default "4096x2048")
  * limit - set upper limit in dBFS (from -100 to 100) (default 0)
  * rotation - color rotation (from -1 to 1) (default 0)
  * color - set channel coloring (from 0 to 14) (default intensity)
    - channel (0)  - separate color for each channel
    - intensity (1)  - intensity based coloring
    - rainbow (2)  - rainbow based coloring
    - moreland (3)  - moreland based coloring
    - nebulae (4)  - nebulae based coloring
    - fire (5)  - fire based coloring
    - fiery (6)  - fiery based coloring
    - fruit (7)  - fruit based coloring
    - cool (8)  - cool based coloring
    - magma (9)  - magma based coloring
    - green (10)  - green based coloring
    - viridis (11)  - viridis based coloring
    - plasma (12)  - plasma based coloring
    - cividis (13)  - cividis based coloring
    - terrain (14)  - terrain based coloring

  * scale - set display scale (from 0 to 5) (default log)
    - lin (0)  - linear
    - sqrt (1)  - square root
    - cbrt (2)  - cubic root
    - log (3)  - logarithmic
    - 4thrt (4)  - 4th root
    - 5thrt (5)  - 5th root

  * fscale - set frequency scale (from 0 to 1) (default lin)
    - lin (0)  - linear
    - log (1)  - logarithmic

  * saturation - color saturation multiplier (from -10 to 10) (default 1)
  * win_func - set window function (from 0 to 20) (default hann)
    - rect (0)  - Rectangular
    - bartlett (4)  - Bartlett
    - hann (1)  - Hann
    - hanning (1)  - Hanning
    - hamming (2)  - Hamming
    - blackman (3)  - Blackman
    - welch (5)  - Welch
    - flattop (6)  - Flat-top
    - bharris (7)  - Blackman-Harris
    - bnuttall (8)  - Blackman-Nuttall
    - bhann (11)  - Bartlett-Hann
    - sine (9)  - Sine
    - nuttall (10)  - Nuttall
    - lanczos (12)  - Lanczos
    - gauss (13)  - Gauss
    - tukey (14)  - Tukey
    - dolph (15)  - Dolph-Chebyshev
    - cauchy (16)  - Cauchy
    - parzen (17)  - Parzen
    - poisson (18)  - Poisson
    - bohman (19)  - Bohman
    - kaiser (20)  - Kaiser

  * orientation - set orientation (from 0 to 1) (default vertical)
    - vertical (0) 
    - horizontal (1) 

  * gain - set scale gain (from 0 to 128) (default 1)
  * legend - draw legend (default true)
  * drange - set dynamic range in dBFS (from 10 to 200) (default 120)
  * opacity - set opacity strength (from 0 to 10) (default 1)

# `showvolume`

```elixir
@spec showvolume(FFix.Stream.t(),
  c: String.t(),
  p: float(),
  v: boolean(),
  m: integer() | String.t() | atom(),
  f: float(),
  b: integer(),
  s: integer(),
  h: integer(),
  r: term(),
  w: integer(),
  o: integer() | String.t() | atom(),
  t: boolean(),
  rate: term(),
  dm: float(),
  dmc: term(),
  ds: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Convert input audio volume to video output.

## Options

  * c - set volume color expression (default "PEAK*255+floor((1-PEAK)*255)*256+0xff000000")
  * p - set background opacity (from 0 to 1) (default 0)
  * v - display volume value (default true)
  * m - set mode (from 0 to 1) (default p)
    - p (0)  - peak
    - r (1)  - rms

  * f - set fade (from 0 to 1) (default 0.95)
  * b - set border width (from 0 to 5) (default 1)
  * s - set step size (from 0 to 5) (default 0)
  * h - set channel height (from 1 to 900) (default 20)
  * r - set video rate (default "25")
  * w - set channel width (from 80 to 8192) (default 400)
  * o - set orientation (from 0 to 1) (default h)
    - h (0)  - horizontal
    - v (1)  - vertical

  * t - display channel names (default true)
  * rate - set video rate (default "25")
  * dm - duration for max value display (from 0 to 9000) (default 0)
  * dmc - set color of the max value line (default "orange")
  * ds - set display scale (from 0 to 1) (default lin)
    - lin (0)  - linear
    - log (1)  - log

# `showwaves`

```elixir
@spec showwaves(FFix.Stream.t(),
  size: term(),
  mode: integer() | String.t() | atom(),
  s: term(),
  r: term(),
  colors: String.t(),
  n: term(),
  scale: integer() | String.t() | atom(),
  rate: term(),
  split_channels: boolean(),
  draw: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Convert input audio to a video output.

## Options

  * size - set video size (default "600x240")
  * mode - select display mode (from 0 to 3) (default point)
    - point (0)  - draw a point for each sample
    - line (1)  - draw a line for each sample
    - p2p (2)  - draw a line between samples
    - cline (3)  - draw a centered line for each sample

  * s - set video size (default "600x240")
  * r - set video rate (default "25")
  * colors - set channels colors (default "red|green|blue|yellow|orange|lime|pink|magenta|brown")
  * n - set how many samples to show in the same point (from 0 to INT_MAX) (default 0/1)
  * scale - set amplitude scale (from 0 to 3) (default lin)
    - lin (0)  - linear
    - log (1)  - logarithmic
    - sqrt (2)  - square root
    - cbrt (3)  - cubic root

  * rate - set video rate (default "25")
  * split_channels - draw channels separately (default false)
  * draw - set draw mode (from 0 to 1) (default scale)
    - scale (0)  - scale pixel values for each drawn sample
    - full (1)  - draw every pixel for sample directly

# `showwavespic`

```elixir
@spec showwavespic(FFix.Stream.t(),
  size: term(),
  filter: integer() | String.t() | atom(),
  s: term(),
  colors: String.t(),
  scale: integer() | String.t() | atom(),
  split_channels: boolean(),
  draw: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Convert input audio to a video output single picture.

## Options

  * size - set video size (default "600x240")
  * filter - set filter mode (from 0 to 1) (default average)
    - average (0)  - use average samples
    - peak (1)  - use peak samples

  * s - set video size (default "600x240")
  * colors - set channels colors (default "red|green|blue|yellow|orange|lime|pink|magenta|brown")
  * scale - set amplitude scale (from 0 to 3) (default lin)
    - lin (0)  - linear
    - log (1)  - logarithmic
    - sqrt (2)  - square root
    - cbrt (3)  - cubic root

  * split_channels - draw channels separately (default false)
  * draw - set draw mode (from 0 to 1) (default scale)
    - scale (0)  - scale pixel values for each drawn sample
    - full (1)  - draw every pixel for sample directly

# `spectrumsynth`

```elixir
@spec spectrumsynth(FFix.Stream.t(), FFix.Stream.t(),
  slide: integer() | String.t() | atom(),
  scale: integer() | String.t() | atom(),
  overlap: float(),
  sample_rate: integer(),
  channels: integer(),
  win_func: integer() | String.t() | atom(),
  orientation: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Convert input spectrum videos to audio output.

## Options

  * slide - set input sliding mode (from 0 to 3) (default fullframe)
    - replace (0)  - consume old columns with new
    - scroll (1)  - consume only most right column
    - fullframe (2)  - consume full frames
    - rscroll (3)  - consume only most left column

  * scale - set input amplitude scale (from 0 to 1) (default log)
    - lin (0)  - linear
    - log (1)  - logarithmic

  * overlap - set window overlap (from 0 to 1) (default 1)
  * sample_rate - set sample rate (from 15 to INT_MAX) (default 44100)
  * channels - set channels (from 1 to 8) (default 1)
  * win_func - set window function (from 0 to 20) (default rect)
    - rect (0)  - Rectangular
    - bartlett (4)  - Bartlett
    - hann (1)  - Hann
    - hanning (1)  - Hanning
    - hamming (2)  - Hamming
    - blackman (3)  - Blackman
    - welch (5)  - Welch
    - flattop (6)  - Flat-top
    - bharris (7)  - Blackman-Harris
    - bnuttall (8)  - Blackman-Nuttall
    - bhann (11)  - Bartlett-Hann
    - sine (9)  - Sine
    - nuttall (10)  - Nuttall
    - lanczos (12)  - Lanczos
    - gauss (13)  - Gauss
    - tukey (14)  - Tukey
    - dolph (15)  - Dolph-Chebyshev
    - cauchy (16)  - Cauchy
    - parzen (17)  - Parzen
    - poisson (18)  - Poisson
    - bohman (19)  - Bohman
    - kaiser (20)  - Kaiser

  * orientation - set orientation (from 0 to 1) (default vertical)
    - vertical (0) 
    - horizontal (1) 

# `acrossover`

```elixir
@spec acrossover(FFix.Stream.t(),
  split: String.t(),
  level: float(),
  precision: integer() | String.t() | atom(),
  order: integer() | String.t() | atom(),
  gain: String.t()
) :: [FFix.Stream.t()]
```

Split audio into per-bands streams.

## Options

  * split - set split frequencies (default "500")
  * level - set input gain (from 0 to 1) (default 1)
  * precision - set processing precision (from 0 to 2) (default auto)
    - auto (0)  - set auto processing precision
    - float (1)  - set single-floating point processing precision
    - double (2)  - set double-floating point processing precision

  * order - set filter order (from 0 to 9) (default 4th)
    - 2nd (0)  - 2nd order (12 dB/8ve)
    - 4th (1)  - 4th order (24 dB/8ve)
    - 6th (2)  - 6th order (36 dB/8ve)
    - 8th (3)  - 8th order (48 dB/8ve)
    - 10th (4)  - 10th order (60 dB/8ve)
    - 12th (5)  - 12th order (72 dB/8ve)
    - 14th (6)  - 14th order (84 dB/8ve)
    - 16th (7)  - 16th order (96 dB/8ve)
    - 18th (8)  - 18th order (108 dB/8ve)
    - 20th (9)  - 20th order (120 dB/8ve)

  * gain - set output bands gain (default "1.f")

# `afir`

```elixir
@spec afir([FFix.Stream.t()],
  size: term(),
  length: float(),
  enable: String.t(),
  response: boolean(),
  precision: integer() | String.t() | atom(),
  rate: term(),
  dry: float(),
  wet: float(),
  channel: integer(),
  gtype: integer() | String.t() | atom(),
  irnorm: float(),
  irlink: boolean(),
  irgain: float(),
  irfmt: integer() | String.t() | atom(),
  maxir: float(),
  minp: integer(),
  maxp: integer(),
  nbirs: integer(),
  ir: integer(),
  irload: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Apply Finite Impulse Response filter with supplied coefficients in additional stream(s).

## Options

  * size - set video size (default "hd720")
  * length - set IR length (from 0 to 1) (default 1)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * response - show IR frequency response (default false)
  * precision - set processing precision (from 0 to 2) (default auto)
    - auto (0)  - set auto processing precision
    - float (1)  - set single-floating point processing precision
    - double (2)  - set double-floating point processing precision

  * rate - set video rate (default "25")
  * dry - set dry gain (from 0 to 10) (default 1)
  * wet - set wet gain (from 0 to 10) (default 1)
  * channel - set IR channel to display frequency response (from 0 to 1024) (default 0)
  * gtype - set IR auto gain type (from -1 to 4) (default peak)
    - none (-1)  - without auto gain
    - peak (0)  - peak gain
    - dc (1)  - DC gain
    - gn (2)  - gain to noise
    - ac (3)  - AC gain
    - rms (4)  - RMS gain

  * irnorm - set IR norm (from -1 to 2) (default 1)
  * irlink - set IR link (default true)
  * irgain - set IR gain (from 0 to 1) (default 1)
  * irfmt - set IR format (from 0 to 1) (default input)
    - mono (0)  - single channel
    - input (1)  - same as input

  * maxir - set max IR length (from 0.1 to 60) (default 30)
  * minp - set min partition size (from 1 to 65536) (default 8192)
  * maxp - set max partition size (from 8 to 65536) (default 8192)
  * nbirs - set number of input IRs (from 1 to 32) (default 1)
  * ir - select IR (from 0 to 31) (default 0)
  * irload - set IR loading type (from 0 to 1) (default init)
    - init (0)  - load all IRs on init
    - access (1)  - load IR on access

# `aiir`

```elixir
@spec aiir(FFix.Stream.t(),
  process: integer() | String.t() | atom(),
  size: term(),
  format: integer() | String.t() | atom(),
  normalize: boolean(),
  p: String.t(),
  k: String.t(),
  f: integer() | String.t() | atom(),
  response: boolean(),
  r: integer() | String.t() | atom(),
  precision: integer() | String.t() | atom(),
  mix: float(),
  n: boolean(),
  z: String.t(),
  rate: term(),
  zeros: String.t(),
  poles: String.t(),
  gains: String.t(),
  dry: float(),
  wet: float(),
  e: integer() | String.t() | atom(),
  channel: integer()
) :: [FFix.Stream.t()]
```

Apply Infinite Impulse Response filter with supplied coefficients.

## Options

  * process - set kind of processing (from 0 to 2) (default s)
    - d (0)  - direct
    - s (1)  - serial
    - p (2)  - parallel

  * size - set video size (default "hd720")
  * format - set coefficients format (from -2 to 4) (default zp)
    - ll (-2)  - lattice-ladder function
    - sf (-1)  - analog transfer function
    - tf (0)  - digital transfer function
    - zp (1)  - Z-plane zeros/poles
    - pr (2)  - Z-plane zeros/poles (polar radians)
    - pd (3)  - Z-plane zeros/poles (polar degrees)
    - sp (4)  - S-plane zeros/poles

  * normalize - normalize coefficients (default true)
  * p - set A/denominator/poles/ladder coefficients (default "1+0i 1-0i")
  * k - set channels gains (default "1|1")
  * f - set coefficients format (from -2 to 4) (default zp)
    - ll (-2)  - lattice-ladder function
    - sf (-1)  - analog transfer function
    - tf (0)  - digital transfer function
    - zp (1)  - Z-plane zeros/poles
    - pr (2)  - Z-plane zeros/poles (polar radians)
    - pd (3)  - Z-plane zeros/poles (polar degrees)
    - sp (4)  - S-plane zeros/poles

  * response - show IR frequency response (default false)
  * r - set kind of processing (from 0 to 2) (default s)
    - d (0)  - direct
    - s (1)  - serial
    - p (2)  - parallel

  * precision - set filtering precision (from 0 to 3) (default dbl)
    - dbl (0)  - double-precision floating-point
    - flt (1)  - single-precision floating-point
    - i32 (2)  - 32-bit integers
    - i16 (3)  - 16-bit integers

  * mix - set mix (from 0 to 1) (default 1)
  * n - normalize coefficients (default true)
  * z - set B/numerator/zeros/reflection coefficients (default "1+0i 1-0i")
  * rate - set video rate (default "25")
  * zeros - set B/numerator/zeros/reflection coefficients (default "1+0i 1-0i")
  * poles - set A/denominator/poles/ladder coefficients (default "1+0i 1-0i")
  * gains - set channels gains (default "1|1")
  * dry - set dry gain (from 0 to 1) (default 1)
  * wet - set wet gain (from 0 to 1) (default 1)
  * e - set precision (from 0 to 3) (default dbl)
    - dbl (0)  - double-precision floating-point
    - flt (1)  - single-precision floating-point
    - i32 (2)  - 32-bit integers
    - i16 (3)  - 16-bit integers

  * channel - set IR channel to display frequency response (from 0 to 1024) (default 0)

# `ainterleave`

```elixir
@spec ainterleave([FFix.Stream.t()],
  n: integer(),
  nb_inputs: integer(),
  duration: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Temporally interleave audio inputs.

## Options

  * n - set number of inputs (from 1 to INT_MAX) (default 2)
  * nb_inputs - set number of inputs (from 1 to INT_MAX) (default 2)
  * duration - how to determine the end-of-stream (from 0 to 2) (default longest)
    - longest (0)  - Duration of longest input
    - shortest (1)  - Duration of shortest input
    - first (2)  - Duration of first input

# `amerge`

```elixir
@spec amerge([FFix.Stream.t()], [{:inputs, integer()}]) :: FFix.Stream.t()
```

Merge two or more audio streams into a single multi-channel stream.

## Options

  * inputs - specify the number of inputs (from 1 to 64) (default 2)

# `amix`

```elixir
@spec amix([FFix.Stream.t()],
  normalize: boolean(),
  inputs: integer(),
  duration: integer() | String.t() | atom(),
  weights: String.t(),
  dropout_transition: float()
) :: FFix.Stream.t()
```

Audio mixing.

## Options

  * normalize - Scale inputs (default true)
  * inputs - Number of inputs. (from 1 to 32767) (default 2)
  * duration - How to determine the end-of-stream. (from 0 to 2) (default longest)
    - longest (0)  - Duration of longest input.
    - shortest (1)  - Duration of shortest input.
    - first (2)  - Duration of first input.

  * weights - Set weight for each input. (default "1 1")
  * dropout_transition - Transition time, in seconds, for volume renormalization when an input stream ends. (from 0 to INT_MAX) (default 2)

# `anequalizer`

```elixir
@spec anequalizer(FFix.Stream.t(),
  size: term(),
  enable: String.t(),
  params: String.t(),
  colors: String.t(),
  curves: boolean(),
  fscale: integer() | String.t() | atom(),
  mgain: float()
) :: [FFix.Stream.t()]
```

Apply high-order audio parametric multi band equalizer.

## Options

  * size - set video size (default "hd720")
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * params - (default "")
  * colors - set channels curves colors (default "red|green|blue|yellow|orange|lime|pink|magenta|brown")
  * curves - draw frequency response curves (default false)
  * fscale - set frequency scale (from 0 to 1) (default log)
    - lin (0)  - linear
    - log (1)  - logarithmic

  * mgain - set max gain (from -900 to 900) (default 60)

# `aphasemeter`

```elixir
@spec aphasemeter(FFix.Stream.t(),
  size: term(),
  gc: integer(),
  bc: integer(),
  a: float(),
  s: term(),
  r: term(),
  d: term(),
  t: float(),
  video: boolean(),
  rate: term(),
  duration: term(),
  angle: float(),
  tolerance: float(),
  rc: integer(),
  mpc: String.t(),
  phasing: boolean()
) :: [FFix.Stream.t()]
```

Convert input audio to phase meter video output.

## Options

  * size - set video size (default "800x400")
  * gc - set green contrast (from 0 to 255) (default 7)
  * bc - set blue contrast (from 0 to 255) (default 1)
  * a - set angle threshold for out-of-phase detection (from 90 to 180) (default 170)
  * s - set video size (default "800x400")
  * r - set video rate (default "25")
  * d - set minimum mono or out-of-phase duration in seconds (default 2)
  * t - set phase tolerance for mono detection (from 0 to 1) (default 0)
  * video - set video output (default true)
  * rate - set video rate (default "25")
  * duration - set minimum mono or out-of-phase duration in seconds (default 2)
  * angle - set angle threshold for out-of-phase detection (from 90 to 180) (default 170)
  * tolerance - set phase tolerance for mono detection (from 0 to 1) (default 0)
  * rc - set red contrast (from 0 to 255) (default 2)
  * mpc - set median phase color (default "none")
  * phasing - set mono and out-of-phase detection output (default false)

# `asegment`

```elixir
@spec asegment(FFix.Stream.t(), timestamps: String.t(), samples: String.t()) :: [
  FFix.Stream.t()
]
```

Segment audio stream.

## Options

  * timestamps - timestamps of input at which to split input
  * samples - samples at which to split input

# `aselect`

```elixir
@spec aselect(FFix.Stream.t(),
  expr: String.t(),
  n: integer(),
  outputs: integer(),
  e: String.t()
) :: [
  FFix.Stream.t()
]
```

Select audio frames to pass in output.

## Options

  * expr - set an expression to use for selecting frames (default "1")
  * n - set the number of outputs (from 1 to INT_MAX) (default 1)
  * outputs - set the number of outputs (from 1 to INT_MAX) (default 1)
  * e - set an expression to use for selecting frames (default "1")

# `asplit`

```elixir
@spec asplit(
  FFix.Stream.t(),
  [{:outputs, integer()}]
) :: [FFix.Stream.t()]
```

Pass on the audio input to N audio outputs.

## Options

  * outputs - set number of outputs (from 1 to INT_MAX) (default 2)

# `astreamselect`

```elixir
@spec astreamselect([FFix.Stream.t()], map: String.t(), inputs: integer()) :: [
  FFix.Stream.t()
]
```

Select audio streams

## Options

  * map - input indexes to remap to outputs
  * inputs - number of input streams (from 2 to INT_MAX) (default 2)

# `bm3d`

```elixir
@spec bm3d([FFix.Stream.t()],
  block: integer(),
  group: integer(),
  range: integer(),
  enable: String.t(),
  ref: boolean(),
  planes: integer(),
  sigma: float(),
  bstep: integer(),
  mstep: integer(),
  thmse: float(),
  hdthr: float(),
  estim: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Block-Matching 3D denoiser.

## Options

  * block - set size of local patch (from 8 to 64) (default 16)
  * group - set maximal number of similar blocks (from 1 to 256) (default 1)
  * range - set block matching range (from 1 to INT_MAX) (default 9)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * ref - have reference stream (default false)
  * planes - set planes to filter (from 0 to 15) (default 7)
  * sigma - set denoising strength (from 0 to 99999.9) (default 1)
  * bstep - set sliding step for processing blocks (from 1 to 64) (default 4)
  * mstep - set step for block matching (from 1 to 64) (default 1)
  * thmse - set threshold of mean square error for block matching (from 0 to INT_MAX) (default 0)
  * hdthr - set hard threshold for 3D transfer domain (from 0 to INT_MAX) (default 2.7)
  * estim - set filtering estimation mode (from 0 to 1) (default basic)
    - basic (0)  - basic estimate
    - final (1)  - final estimate

# `channelsplit`

```elixir
@spec channelsplit(FFix.Stream.t(), channel_layout: term(), channels: String.t()) :: [
  FFix.Stream.t()
]
```

Split audio into per-channel streams.

## Options

  * channel_layout - Input channel layout. (default "stereo")
  * channels - Channels to extract. (default "all")

# `concat`

```elixir
@spec concat([FFix.Stream.t()],
  unsafe: boolean(),
  v: integer(),
  a: integer(),
  n: integer()
) :: [
  FFix.Stream.t()
]
```

Concatenate audio and video streams.

## Options

  * unsafe - enable unsafe mode (default false)
  * v - specify the number of video streams (from 0 to INT_MAX) (default 1)
  * a - specify the number of audio streams (from 0 to INT_MAX) (default 0)
  * n - specify the number of segments (from 1 to INT_MAX) (default 2)

# `decimate`

```elixir
@spec decimate([FFix.Stream.t()],
  cycle: integer(),
  mixed: boolean(),
  ppsrc: boolean(),
  scthresh: float(),
  chroma: boolean(),
  blockx: integer(),
  blocky: integer(),
  dupthresh: float()
) :: FFix.Stream.t()
```

Decimate frames (post field matching filter).

## Options

  * cycle - set the number of frame from which one will be dropped (from 2 to 25) (default 5)
  * mixed - set whether or not the input only partially contains content to be decimated (default false)
  * ppsrc - mark main input as a pre-processed input and activate clean source input stream (default false)
  * scthresh - set scene change threshold (from 0 to 100) (default 15)
  * chroma - set whether or not chroma is considered in the metric calculations (default true)
  * blockx - set the size of the x-axis blocks used during metric calculations (from 4 to 512) (default 32)
  * blocky - set the size of the y-axis blocks used during metric calculations (from 4 to 512) (default 32)
  * dupthresh - set duplicate threshold (from 0 to 100) (default 1.1)

# `ebur128`

```elixir
@spec ebur128(FFix.Stream.t(),
  size: term(),
  metadata: boolean(),
  range: float(),
  target: integer(),
  video: boolean(),
  scale: integer() | String.t() | atom(),
  peak: integer() | String.t() | atom() | [String.t() | atom()],
  meter: integer(),
  framelog: integer() | String.t() | atom(),
  dualmono: boolean(),
  panlaw: float(),
  gauge: integer() | String.t() | atom(),
  integrated: float(),
  lra_low: float(),
  lra_high: float(),
  sample_peak: float(),
  true_peak: float()
) :: [FFix.Stream.t()]
```

EBU R128 scanner.

## Options

  * size - set video size (default "640x480")
  * metadata - inject metadata in the filtergraph (default false)
  * range - loudness range (LU) (from -DBL_MAX to DBL_MAX) (default 0)
  * target - set a specific target level in LUFS (-23 to 0) (from -23 to 0) (default -23)
  * video - set video output (default false)
  * scale - sets display method for the stats (from 0 to 1) (default absolute)
    - absolute (0)  - display absolute values (LUFS)
    - LUFS (0)  - display absolute values (LUFS)
    - relative (1)  - display values relative to target (LU)
    - LU (1)  - display values relative to target (LU)

  * peak - set peak mode (default 0)
    - none - disable any peak mode
    - sample - enable peak-sample mode
    - true - enable true-peak mode

  * meter - set scale meter (+9 to +18) (from 9 to 18) (default 9)
  * framelog - force frame logging level (from INT_MIN to INT_MAX) (default -1)
    - quiet (-8)  - logging disabled
    - info (32)  - information logging level
    - verbose (40)  - verbose logging level

  * dualmono - treat mono input files as dual-mono (default false)
  * panlaw - set a specific pan law for dual-mono files (from -10 to 0) (default -3.0103)
  * gauge - set gauge display type (from 0 to 1) (default momentary)
    - momentary (0)  - display momentary value
    - m (0)  - display momentary value
    - shortterm (1)  - display short-term value
    - s (1)  - display short-term value

  * integrated - integrated loudness (LUFS) (from -DBL_MAX to DBL_MAX) (default 0)
  * lra_low - LRA low (LUFS) (from -DBL_MAX to DBL_MAX) (default 0)
  * lra_high - LRA high (LUFS) (from -DBL_MAX to DBL_MAX) (default 0)
  * sample_peak - sample peak (dBFS) (from -DBL_MAX to DBL_MAX) (default 0)
  * true_peak - true peak (dBFS) (from -DBL_MAX to DBL_MAX) (default 0)

# `extractplanes`

```elixir
@spec extractplanes(
  FFix.Stream.t(),
  [{:planes, integer() | String.t() | atom() | [String.t() | atom()]}]
) :: [FFix.Stream.t()]
```

Extract planes as grayscale frames.

## Options

  * planes - set planes (default r)
    - y - set luma plane
    - u - set u plane
    - v - set v plane
    - r - set red plane
    - g - set green plane
    - b - set blue plane
    - a - set alpha plane

# `fieldmatch`

```elixir
@spec fieldmatch([FFix.Stream.t()],
  mode: integer() | String.t() | atom(),
  field: integer() | String.t() | atom(),
  order: integer() | String.t() | atom(),
  y1: integer(),
  ppsrc: boolean(),
  mchroma: boolean(),
  y0: integer(),
  scthresh: float(),
  combmatch: integer() | String.t() | atom(),
  combdbg: integer() | String.t() | atom(),
  cthresh: integer(),
  chroma: boolean(),
  blockx: integer(),
  blocky: integer(),
  combpel: integer()
) :: FFix.Stream.t()
```

Field matching for inverse telecine.

## Options

  * mode - set the matching mode or strategy to use (from 0 to 5) (default pc_n)
    - pc (0)  - 2-way match (p/c)
    - pc_n (1)  - 2-way match + 3rd match on combed (p/c + u)
    - pc_u (2)  - 2-way match + 3rd match (same order) on combed (p/c + u)
    - pc_n_ub (3)  - 2-way match + 3rd match on combed + 4th/5th matches if still combed (p/c + u + u/b)
    - pcn (4)  - 3-way match (p/c/n)
    - pcn_ub (5)  - 3-way match + 4th/5th matches on combed (p/c/n + u/b)

  * field - set the field to match from (from -1 to 1) (default auto)
    - auto (-1)  - automatic (same value as 'order')
    - bottom (0)  - bottom field
    - top (1)  - top field

  * order - specify the assumed field order (from -1 to 1) (default auto)
    - auto (-1)  - auto detect parity
    - bff (0)  - assume bottom field first
    - tff (1)  - assume top field first

  * y1 - define an exclusion band which excludes the lines between y0 and y1 from the field matching decision (from 0 to INT_MAX) (default 0)
  * ppsrc - mark main input as a pre-processed input and activate clean source input stream (default false)
  * mchroma - set whether or not chroma is included during the match comparisons (default true)
  * y0 - define an exclusion band which excludes the lines between y0 and y1 from the field matching decision (from 0 to INT_MAX) (default 0)
  * scthresh - set scene change detection threshold (from 0 to 100) (default 12)
  * combmatch - set combmatching mode (from 0 to 2) (default sc)
    - none (0)  - disable combmatching
    - sc (1)  - enable combmatching only on scene change
    - full (2)  - enable combmatching all the time

  * combdbg - enable comb debug (from 0 to 2) (default none)
    - none (0)  - no forced calculation
    - pcn (1)  - calculate p/c/n
    - pcnub (2)  - calculate p/c/n/u/b

  * cthresh - set the area combing threshold used for combed frame detection (from -1 to 255) (default 9)
  * chroma - set whether or not chroma is considered in the combed frame decision (default false)
  * blockx - set the x-axis size of the window used during combed frame detection (from 4 to 512) (default 16)
  * blocky - set the y-axis size of the window used during combed frame detection (from 4 to 512) (default 16)
  * combpel - set the number of combed pixels inside any of the blocky by blockx size blocks on the frame for the frame to be detected as combed (from 0 to INT_MAX) (default 80)

# `guided`

```elixir
@spec guided([FFix.Stream.t()],
  mode: integer() | String.t() | atom(),
  sub: integer(),
  enable: String.t(),
  planes: integer(),
  radius: integer(),
  eps: float(),
  guidance: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Apply Guided filter.

## Options

  * mode - set filtering mode (0: basic mode; 1: fast mode) (from 0 to 1) (default basic)
    - basic (0)  - basic guided filter
    - fast (1)  - fast guided filter

  * sub - subsampling ratio for fast mode (from 2 to 64) (default 4)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * planes - set planes to filter (from 0 to 15) (default 1)
  * radius - set the box radius (from 1 to 20) (default 3)
  * eps - set the regularization parameter (with square) (from 0 to 1) (default 0.01)
  * guidance - set guidance mode (0: off mode; 1: on mode) (from 0 to 1) (default off)
    - off (0)  - only one input is enabled
    - on (1)  - two inputs are required

# `headphone`

```elixir
@spec headphone([FFix.Stream.t()],
  size: integer(),
  type: integer() | String.t() | atom(),
  map: String.t(),
  gain: float(),
  lfe: float(),
  hrir: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Apply headphone binaural spatialization with HRTFs in additional streams.

## Options

  * size - set frame size (from 1024 to 96000) (default 1024)
  * type - set processing (from 0 to 1) (default freq)
    - time (0)  - time domain
    - freq (1)  - frequency domain

  * map - set channels convolution mappings
  * gain - set gain in dB (from -20 to 40) (default 0)
  * lfe - set lfe gain in dB (from -20 to 40) (default 0)
  * hrir - set hrir format (from 0 to 1) (default stereo)
    - stereo (0)  - hrir files have exactly 2 channels
    - multich (1)  - single multichannel hrir file

# `hstack`

```elixir
@spec hstack([FFix.Stream.t()], shortest: boolean(), inputs: integer()) ::
  FFix.Stream.t()
```

Stack video inputs horizontally.

## Options

  * shortest - force termination when the shortest input terminates (default false)
  * inputs - set number of inputs (from 2 to INT_MAX) (default 2)

# `hstack_qsv`

```elixir
@spec hstack_qsv([FFix.Stream.t()],
  shortest: boolean(),
  inputs: integer(),
  height: integer()
) ::
  FFix.Stream.t()
```

"Quick Sync Video" hstack

## Options

  * shortest - Force termination when the shortest input terminates (default false)
  * inputs - Set number of inputs (from 2 to 65535) (default 2)
  * height - Set output height (0 to use the height of input 0) (from 0 to 65535) (default 0)

# `hstack_vaapi`

```elixir
@spec hstack_vaapi([FFix.Stream.t()],
  shortest: boolean(),
  inputs: integer(),
  height: integer()
) ::
  FFix.Stream.t()
```

"VA-API" hstack

## Options

  * shortest - Force termination when the shortest input terminates (default false)
  * inputs - Set number of inputs (from 2 to 65535) (default 2)
  * height - Set output height (0 to use the height of input 0) (from 0 to 65535) (default 0)

# `interleave`

```elixir
@spec interleave([FFix.Stream.t()],
  n: integer(),
  nb_inputs: integer(),
  duration: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Temporally interleave video inputs.

## Options

  * n - set number of inputs (from 1 to INT_MAX) (default 2)
  * nb_inputs - set number of inputs (from 1 to INT_MAX) (default 2)
  * duration - how to determine the end-of-stream (from 0 to 2) (default longest)
    - longest (0)  - Duration of longest input
    - shortest (1)  - Duration of shortest input
    - first (2)  - Duration of first input

# `join`

```elixir
@spec join([FFix.Stream.t()],
  map: String.t(),
  inputs: integer(),
  channel_layout: term()
) ::
  FFix.Stream.t()
```

Join multiple audio streams into multi-channel output.

## Options

  * map - A comma-separated list of channels maps in the format 'input_stream.input_channel-output_channel.
  * inputs - Number of input streams. (from 1 to INT_MAX) (default 2)
  * channel_layout - Channel layout of the output stream. (default "stereo")

# `ladspa`

```elixir
@spec ladspa([FFix.Stream.t()],
  file: String.t(),
  c: String.t(),
  p: String.t(),
  f: String.t(),
  s: integer(),
  d: term(),
  l: boolean(),
  n: integer(),
  latency: boolean(),
  duration: term(),
  nb_samples: integer(),
  sample_rate: integer(),
  plugin: String.t(),
  controls: String.t()
) :: FFix.Stream.t()
```

Apply LADSPA effect.

## Options

  * file - set library name or full path
  * c - set plugin options
  * p - set plugin name
  * f - set library name or full path
  * s - set sample rate (from 1 to INT_MAX) (default 44100)
  * d - set audio duration (default -0.000001)
  * l - enable latency compensation (default false)
  * n - set the number of samples per requested frame (from 1 to INT_MAX) (default 1024)
  * latency - enable latency compensation (default false)
  * duration - set audio duration (default -0.000001)
  * nb_samples - set the number of samples per requested frame (from 1 to INT_MAX) (default 1024)
  * sample_rate - set sample rate (from 1 to INT_MAX) (default 44100)
  * plugin - set plugin name
  * controls - set plugin options

# `libplacebo`

```elixir
@spec libplacebo([FFix.Stream.t()],
  smoothing_period: float(),
  pad_crop_ratio: float(),
  w: String.t(),
  upscaler: String.t(),
  crop_w: String.t(),
  force_divisible_by: integer(),
  custom_shader_bin: binary(),
  disable_builtin: boolean(),
  crop_y: String.t(),
  hue: float(),
  custom_shader_path: String.t(),
  contrast_recovery: float(),
  h: String.t(),
  dither_lut_size: integer(),
  inverse_tonemapping: boolean(),
  disable_fbos: boolean(),
  downscaler: String.t(),
  cones: integer() | String.t() | atom() | [String.t() | atom()],
  scene_threshold_low: float(),
  extra_opts: term(),
  deband: boolean(),
  contrast_smoothness: float(),
  pos_w: String.t(),
  fps: String.t(),
  pos_h: String.t(),
  tonemapping: integer() | String.t() | atom(),
  disable_linear: boolean(),
  color_trc: integer() | String.t() | atom(),
  frame_mixer: String.t(),
  deband_iterations: integer(),
  saturation: float(),
  inputs: integer(),
  skip_aa: boolean(),
  corner_rounding: float(),
  format: String.t(),
  peak_detect: boolean(),
  pos_x: String.t(),
  antiringing: float(),
  color_primaries: integer() | String.t() | atom(),
  range: integer() | String.t() | atom(),
  tonemapping_param: float(),
  &quot;cone-strength&quot;: float(),
  force_dither: boolean(),
  colorspace: integer() | String.t() | atom(),
  apply_filmgrain: boolean(),
  sigmoid: boolean(),
  brightness: float(),
  scene_threshold_high: float(),
  polar_cutoff: float(),
  pos_y: String.t(),
  apply_dolbyvision: boolean(),
  gamut_mode: integer() | String.t() | atom(),
  dithering: integer() | String.t() | atom(),
  deband_threshold: float(),
  normalize_sar: boolean(),
  dither_temporal: boolean(),
  gamma: float(),
  contrast: float(),
  crop_h: String.t(),
  tonemapping_lut_size: integer(),
  percentile: float(),
  fillcolor: String.t(),
  force_original_aspect_ratio: integer() | String.t() | atom(),
  lut_entries: integer(),
  deband_grain: float(),
  deband_radius: float(),
  minimum_peak: float(),
  crop_x: String.t()
) :: FFix.Stream.t()
```

Apply various GPU filters from libplacebo

## Options

  * smoothing_period - Peak detection smoothing period (from 0 to 1000) (default 100)
  * pad_crop_ratio - ratio between padding and cropping when normalizing SAR (0=pad, 1=crop) (from 0 to 1) (default 0)
  * w - Output video frame width (default "iw")
  * upscaler - Upscaler function (default "spline36")
  * crop_w - Input video crop w (default "iw")
  * force_divisible_by - enforce that the output resolution is divisible by a defined integer when force_original_aspect_ratio is used (from 1 to 256) (default 1)
  * custom_shader_bin - Custom user shader as binary (mpv .hook format)
  * disable_builtin - Disable built-in scalers (default false)
  * crop_y - Input video crop y (default "(ih-ch)/2")
  * hue - Hue shift (from -3.14159 to 3.14159) (default 0)
  * custom_shader_path - Path to custom user shader (mpv .hook format)
  * contrast_recovery - HDR contrast recovery strength (from 0 to 3) (default 0.3)
  * h - Output video frame height (default "ih")
  * dither_lut_size - Dithering LUT size (from 1 to 8) (default 6)
  * inverse_tonemapping - Inverse tone mapping (range expansion) (default false)
  * disable_fbos - Force-disable FBOs (default false)
  * downscaler - Downscaler function (default "mitchell")
  * cones - Colorblindness adaptation model (default 0)
    - l - L cone
    - m - M cone
    - s - S cone

  * scene_threshold_low - Scene change low threshold (from -1 to 100) (default 5.5)
  * extra_opts - Pass extra libplacebo-specific options using a :-separated list of key=value pairs
  * deband - Enable debanding (default false)
  * contrast_smoothness - HDR contrast recovery smoothness (from 1 to 32) (default 3.5)
  * pos_w - Output video placement w (default "ow")
  * fps - Output video frame rate (default "none")
  * pos_h - Output video placement h (default "oh")
  * tonemapping - Tone-mapping algorithm (from 0 to 11) (default auto)
    - auto (0)  - Automatic selection
    - clip (1)  - No tone mapping (clip
    - st2094-40 (2)  - SMPTE ST 2094-40
    - st2094-10 (3)  - SMPTE ST 2094-10
    - bt.2390 (4)  - ITU-R BT.2390 EETF
    - bt.2446a (5)  - ITU-R BT.2446 Method A
    - spline (6)  - Single-pivot polynomial spline
    - reinhard (7)  - Reinhard
    - mobius (8)  - Mobius
    - hable (9)  - Filmic tone-mapping (Hable)
    - gamma (10)  - Gamma function with knee
    - linear (11)  - Perceptually linear stretch

  * disable_linear - Disable linear scaling (default false)
  * color_trc - select color transfer (from -1 to 18) (default auto)
    - auto (-1)  - keep the same color transfer
    - bt709 (1) 
    - unknown (2) 
    - bt470m (4) 
    - bt470bg (5) 
    - smpte170m (6) 
    - smpte240m (7) 
    - linear (8) 
    - iec61966-2-4 (11) 
    - bt1361e (12) 
    - iec61966-2-1 (13) 
    - bt2020-10 (14) 
    - bt2020-12 (15) 
    - smpte2084 (16) 
    - arib-std-b67 (18) 

  * frame_mixer - Frame mixing function (default "none")
  * deband_iterations - Deband iterations (from 0 to 16) (default 1)
  * saturation - Saturation gain (from 0 to 16) (default 1)
  * inputs - Number of inputs (from 1 to INT_MAX) (default 1)
  * skip_aa - Skip anti-aliasing (default false)
  * corner_rounding - Corner rounding radius (from 0 to 1) (default 0)
  * format - Output video format
  * peak_detect - Enable dynamic peak detection for HDR tone-mapping (default true)
  * pos_x - Output video placement x (default "(ow-pw)/2")
  * antiringing - Antiringing strength (for non-EWA filters) (from 0 to 1) (default 0)
  * color_primaries - select color primaries (from -1 to 22) (default auto)
    - auto (-1)  - keep the same color primaries
    - bt709 (1) 
    - unknown (2) 
    - bt470m (4) 
    - bt470bg (5) 
    - smpte170m (6) 
    - smpte240m (7) 
    - film (8) 
    - bt2020 (9) 
    - smpte428 (10) 
    - smpte431 (11) 
    - smpte432 (12) 
    - jedec-p22 (22) 
    - ebu3213 (22) 

  * range - select color range (from -1 to 2) (default auto)
    - auto (-1)  - keep the same color range
    - unspecified (0) 
    - unknown (0) 
    - limited (1) 
    - tv (1) 
    - mpeg (1) 
    - full (2) 
    - pc (2) 
    - jpeg (2) 

  * tonemapping_param - Tunable parameter for some tone-mapping functions (from 0 to 100) (default 0)
  * cone-strength - Colorblindness adaptation strength (from 0 to 10) (default 0)
  * force_dither - Force dithering (default false)
  * colorspace - select colorspace (from -1 to 17) (default auto)
    - auto (-1)  - keep the same colorspace
    - gbr (0) 
    - bt709 (1) 
    - unknown (2) 
    - bt470bg (5) 
    - smpte170m (6) 
    - smpte240m (7) 
    - ycgco (8) 
    - bt2020nc (9) 
    - bt2020c (10) 
    - ictcp (14) 

  * apply_filmgrain - Apply film grain metadata (default true)
  * sigmoid - Enable sigmoid upscaling (default true)
  * brightness - Brightness boost (from -1 to 1) (default 0)
  * scene_threshold_high - Scene change high threshold (from -1 to 100) (default 10)
  * polar_cutoff - Polar LUT cutoff (from 0 to 1) (default 0)
  * pos_y - Output video placement y (default "(oh-ph)/2")
  * apply_dolbyvision - Apply Dolby Vision metadata (default true)
  * gamut_mode - Gamut-mapping mode (from 0 to 8) (default perceptual)
    - clip (0)  - Hard-clip (RGB per-channel)
    - perceptual (1)  - Colorimetric soft clipping
    - relative (2)  - Relative colorimetric clipping
    - saturation (3)  - Saturation mapping (RGB -> RGB)
    - absolute (4)  - Absolute colorimetric clipping
    - desaturate (5)  - Colorimetrically desaturate colors towards white
    - darken (6)  - Colorimetric clip with bias towards darkening image to fit gamut
    - warn (7)  - Highlight out-of-gamut colors
    - linear (8)  - Linearly reduce chromaticity to fit gamut

  * dithering - Dither method to use (from -1 to 3) (default blue)
    - none (-1)  - Disable dithering
    - blue (0)  - Blue noise
    - ordered (1)  - Ordered LUT
    - ordered_fixed (2)  - Fixed function ordered
    - white (3)  - White noise

  * deband_threshold - Deband threshold (from 0 to 1024) (default 4)
  * normalize_sar - force SAR normalization to 1:1 by adjusting pos_x/y/w/h (default false)
  * dither_temporal - Enable temporal dithering (default false)
  * gamma - Gamma adjustment (from 0 to 16) (default 1)
  * contrast - Contrast gain (from 0 to 16) (default 1)
  * crop_h - Input video crop h (default "ih")
  * tonemapping_lut_size - Tone-mapping LUT size (from 2 to 1024) (default 256)
  * percentile - Peak detection percentile (from 0 to 100) (default 99.995)
  * fillcolor - Background fill color (default "black")
  * force_original_aspect_ratio - decrease or increase w/h if necessary to keep the original AR (from 0 to 2) (default disable)
    - disable (0) 
    - decrease (1) 
    - increase (2) 

  * lut_entries - Number of scaler LUT entries (from 0 to 256) (default 0)
  * deband_grain - Deband grain (from 0 to 1024) (default 6)
  * deband_radius - Deband radius (from 0 to 1024) (default 16)
  * minimum_peak - Peak detection minimum peak (from 0 to 100) (default 1)
  * crop_x - Input video crop x (default "(iw-cw)/2")

# `limitdiff`

```elixir
@spec limitdiff([FFix.Stream.t()],
  reference: boolean(),
  enable: String.t(),
  threshold: float(),
  planes: integer(),
  elasticity: float()
) :: FFix.Stream.t()
```

Apply filtering with limiting difference.

## Options

  * reference - enable reference stream (default false)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * threshold - set the threshold (from 0 to 1) (default 0.00392157)
  * planes - set the planes to filter (from 0 to 15) (default 15)
  * elasticity - set the elasticity (from 0 to 10) (default 2)

# `lv2`

```elixir
@spec lv2([FFix.Stream.t()],
  c: String.t(),
  p: String.t(),
  s: integer(),
  d: term(),
  n: integer(),
  duration: term(),
  nb_samples: integer(),
  sample_rate: integer(),
  plugin: String.t(),
  controls: String.t()
) :: FFix.Stream.t()
```

Apply LV2 effect.

## Options

  * c - set plugin options
  * p - set plugin uri
  * s - set sample rate (from 1 to INT_MAX) (default 44100)
  * d - set audio duration (default -0.000001)
  * n - set the number of samples per requested frame (from 1 to INT_MAX) (default 1024)
  * duration - set audio duration (default -0.000001)
  * nb_samples - set the number of samples per requested frame (from 1 to INT_MAX) (default 1024)
  * sample_rate - set sample rate (from 1 to INT_MAX) (default 44100)
  * plugin - set plugin uri
  * controls - set plugin options

# `mergeplanes`

```elixir
@spec mergeplanes([FFix.Stream.t()],
  format: term(),
  mapping: integer(),
  map0s: integer(),
  map0p: integer(),
  map1s: integer(),
  map1p: integer(),
  map2s: integer(),
  map2p: integer(),
  map3s: integer(),
  map3p: integer()
) :: FFix.Stream.t()
```

Merge planes.

## Options

  * format - set output pixel format (default yuva444p)
  * mapping - set input to output plane mapping (from -1 to 8.58993e+08) (default -1)
  * map0s - set 1st input to output stream mapping (from 0 to 3) (default 0)
  * map0p - set 1st input to output plane mapping (from 0 to 3) (default 0)
  * map1s - set 2nd input to output stream mapping (from 0 to 3) (default 0)
  * map1p - set 2nd input to output plane mapping (from 0 to 3) (default 0)
  * map2s - set 3rd input to output stream mapping (from 0 to 3) (default 0)
  * map2p - set 3rd input to output plane mapping (from 0 to 3) (default 0)
  * map3s - set 4th input to output stream mapping (from 0 to 3) (default 0)
  * map3p - set 4th input to output plane mapping (from 0 to 3) (default 0)

# `mix`

```elixir
@spec mix([FFix.Stream.t()],
  enable: String.t(),
  inputs: integer(),
  scale: float(),
  duration: integer() | String.t() | atom(),
  weights: String.t(),
  planes: term()
) :: FFix.Stream.t()
```

Mix video inputs.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * inputs - set number of inputs (from 2 to 32767) (default 2)
  * scale - set scale (from 0 to 32767) (default 0)
  * duration - how to determine end of stream (from 0 to 2) (default longest)
    - longest (0)  - Duration of longest input
    - shortest (1)  - Duration of shortest input
    - first (2)  - Duration of first input

  * weights - set weight for each input (default "1 1")
  * planes - set what planes to filter (default F)

# `premultiply`

```elixir
@spec premultiply([FFix.Stream.t()],
  inplace: boolean(),
  enable: String.t(),
  planes: integer()
) ::
  FFix.Stream.t()
```

PreMultiply first stream with first plane of second stream.

## Options

  * inplace - enable inplace mode (default false)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * planes - set planes (from 0 to 15) (default 15)

# `program_opencl`

```elixir
@spec program_opencl([FFix.Stream.t()],
  size: term(),
  kernel: String.t(),
  s: term(),
  source: String.t(),
  shortest: boolean(),
  inputs: integer(),
  eof_action: integer() | String.t() | atom(),
  repeatlast: boolean(),
  ts_sync_mode: integer() | String.t() | atom()
) :: FFix.Stream.t()
```

Filter video using an OpenCL program

## Options

  * size - Video size
  * kernel - Kernel name in program
  * s - Video size
  * source - OpenCL program source file
  * shortest - force termination when the shortest input terminates (default false)
  * inputs - Number of inputs (from 1 to INT_MAX) (default 1)
  * eof_action - Action to take when encountering EOF from secondary input  (from 0 to 2) (default repeat)
    - repeat (0)  - Repeat the previous frame.
    - endall (1)  - End both streams.
    - pass (2)  - Pass through the main input.

  * repeatlast - extend last frame of secondary streams beyond EOF (default true)
  * ts_sync_mode - How strictly to sync streams based on secondary input timestamps (from 0 to 1) (default default)
    - default (0)  - Frame from secondary input with the nearest lower or equal timestamp to the primary input frame
    - nearest (1)  - Frame from secondary input with the absolute nearest timestamp to the primary input frame

# `segment`

```elixir
@spec segment(FFix.Stream.t(), frames: String.t(), timestamps: String.t()) :: [
  FFix.Stream.t()
]
```

Segment video stream.

## Options

  * frames - frames at which to split input
  * timestamps - timestamps of input at which to split input

# `select`

```elixir
@spec select(FFix.Stream.t(),
  expr: String.t(),
  n: integer(),
  outputs: integer(),
  e: String.t()
) :: [
  FFix.Stream.t()
]
```

Select video frames to pass in output.

## Options

  * expr - set an expression to use for selecting frames (default "1")
  * n - set the number of outputs (from 1 to INT_MAX) (default 1)
  * outputs - set the number of outputs (from 1 to INT_MAX) (default 1)
  * e - set an expression to use for selecting frames (default "1")

# `signature`

```elixir
@spec signature([FFix.Stream.t()],
  filename: String.t(),
  format: integer() | String.t() | atom(),
  nb_inputs: integer(),
  detectmode: integer() | String.t() | atom(),
  th_d: integer(),
  th_dc: integer(),
  th_xh: integer(),
  th_di: integer(),
  th_it: float()
) :: FFix.Stream.t()
```

Calculate the MPEG-7 video signature

## Options

  * filename - filename for output files (default "")
  * format - set output format (from 0 to 1) (default binary)
    - binary (0) 
    - xml (1) 

  * nb_inputs - number of inputs (from 1 to INT_MAX) (default 1)
  * detectmode - set the detectmode (from 0 to 2) (default off)
    - off (0) 
    - full (1) 
    - fast (2) 

  * th_d - threshold to detect one word as similar (from 1 to INT_MAX) (default 9000)
  * th_dc - threshold to detect all words as similar (from 1 to INT_MAX) (default 60000)
  * th_xh - threshold to detect frames as similar (from 1 to INT_MAX) (default 116)
  * th_di - minimum length of matching sequence in frames (from 0 to INT_MAX) (default 0)
  * th_it - threshold for relation of good to all frames (from 0 to 1) (default 0.5)

# `split`

```elixir
@spec split(
  FFix.Stream.t(),
  [{:outputs, integer()}]
) :: [FFix.Stream.t()]
```

Pass on the input to N video outputs.

## Options

  * outputs - set number of outputs (from 1 to INT_MAX) (default 2)

# `streamselect`

```elixir
@spec streamselect([FFix.Stream.t()], map: String.t(), inputs: integer()) :: [
  FFix.Stream.t()
]
```

Select video streams

## Options

  * map - input indexes to remap to outputs
  * inputs - number of input streams (from 2 to INT_MAX) (default 2)

# `unpremultiply`

```elixir
@spec unpremultiply([FFix.Stream.t()],
  inplace: boolean(),
  enable: String.t(),
  planes: integer()
) ::
  FFix.Stream.t()
```

UnPreMultiply first stream with first plane of second stream.

## Options

  * inplace - enable inplace mode (default false)
  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * planes - set planes (from 0 to 15) (default 15)

# `vstack`

```elixir
@spec vstack([FFix.Stream.t()], shortest: boolean(), inputs: integer()) ::
  FFix.Stream.t()
```

Stack video inputs vertically.

## Options

  * shortest - force termination when the shortest input terminates (default false)
  * inputs - set number of inputs (from 2 to INT_MAX) (default 2)

# `vstack_qsv`

```elixir
@spec vstack_qsv([FFix.Stream.t()],
  width: integer(),
  shortest: boolean(),
  inputs: integer()
) ::
  FFix.Stream.t()
```

"Quick Sync Video" vstack

## Options

  * width - Set output width (0 to use the width of input 0) (from 0 to 65535) (default 0)
  * shortest - Force termination when the shortest input terminates (default false)
  * inputs - Set number of inputs (from 2 to 65535) (default 2)

# `vstack_vaapi`

```elixir
@spec vstack_vaapi([FFix.Stream.t()],
  width: integer(),
  shortest: boolean(),
  inputs: integer()
) ::
  FFix.Stream.t()
```

"VA-API" vstack

## Options

  * width - Set output width (0 to use the width of input 0) (from 0 to 65535) (default 0)
  * shortest - Force termination when the shortest input terminates (default false)
  * inputs - Set number of inputs (from 2 to 65535) (default 2)

# `xmedian`

```elixir
@spec xmedian([FFix.Stream.t()],
  enable: String.t(),
  shortest: boolean(),
  inputs: integer(),
  planes: integer(),
  eof_action: integer() | String.t() | atom(),
  repeatlast: boolean(),
  ts_sync_mode: integer() | String.t() | atom(),
  percentile: float()
) :: FFix.Stream.t()
```

Pick median pixels from several video inputs.

## Options

  * enable - timeline expression evaluated before each frame; the filter is enabled when non-zero
  * shortest - force termination when the shortest input terminates (default false)
  * inputs - set number of inputs (from 3 to 255) (default 3)
  * planes - set planes to filter (from 0 to 15) (default 15)
  * eof_action - Action to take when encountering EOF from secondary input  (from 0 to 2) (default repeat)
    - repeat (0)  - Repeat the previous frame.
    - endall (1)  - End both streams.
    - pass (2)  - Pass through the main input.

  * repeatlast - extend last frame of secondary streams beyond EOF (default true)
  * ts_sync_mode - How strictly to sync streams based on secondary input timestamps (from 0 to 1) (default default)
    - default (0)  - Frame from secondary input with the nearest lower or equal timestamp to the primary input frame
    - nearest (1)  - Frame from secondary input with the absolute nearest timestamp to the primary input frame

  * percentile - set percentile (from 0 to 1) (default 0.5)

# `xstack`

```elixir
@spec xstack([FFix.Stream.t()],
  shortest: boolean(),
  inputs: integer(),
  layout: String.t(),
  grid: term(),
  fill: String.t()
) :: FFix.Stream.t()
```

Stack video inputs into custom layout.

## Options

  * shortest - force termination when the shortest input terminates (default false)
  * inputs - set number of inputs (from 2 to INT_MAX) (default 2)
  * layout - set custom layout
  * grid - set fixed size grid layout
  * fill - set the color for unused pixels (default "none")

# `xstack_qsv`

```elixir
@spec xstack_qsv([FFix.Stream.t()],
  shortest: boolean(),
  inputs: integer(),
  layout: String.t(),
  grid: term(),
  grid_tile_size: term(),
  fill: String.t()
) :: FFix.Stream.t()
```

"Quick Sync Video" xstack

## Options

  * shortest - Force termination when the shortest input terminates (default false)
  * inputs - Set number of inputs (from 2 to 65535) (default 2)
  * layout - Set custom layout
  * grid - set fixed size grid layout
  * grid_tile_size - set tile size in grid layout
  * fill - Set the color for unused pixels (default "none")

# `xstack_vaapi`

```elixir
@spec xstack_vaapi([FFix.Stream.t()],
  shortest: boolean(),
  inputs: integer(),
  layout: String.t(),
  grid: term(),
  grid_tile_size: term(),
  fill: String.t()
) :: FFix.Stream.t()
```

"VA-API" xstack

## Options

  * shortest - Force termination when the shortest input terminates (default false)
  * inputs - Set number of inputs (from 2 to 65535) (default 2)
  * layout - Set custom layout
  * grid - set fixed size grid layout
  * grid_tile_size - set tile size in grid layout
  * fill - Set the color for unused pixels (default "none")

# `abuffersink`

```elixir
@spec abuffersink(FFix.Stream.t(),
  sample_fmts: binary(),
  sample_rates: binary(),
  ch_layouts: String.t(),
  all_channel_counts: boolean()
) :: FFix.Terminal.t()
```

Buffer audio frames, and make them available to the end of the filter graph.

## Options

  * sample_fmts - set the supported sample formats
  * sample_rates - set the supported sample rates
  * ch_layouts - set a '|'-separated list of supported channel layouts
  * all_channel_counts - accept all channel counts (default false)

# `anullsink`

```elixir
@spec anullsink(
  FFix.Stream.t(),
  []
) :: FFix.Terminal.t()
```

Do absolutely nothing with the input audio.

## Options

# `buffersink`

```elixir
@spec buffersink(FFix.Stream.t(),
  pix_fmts: binary(),
  color_spaces: binary(),
  color_ranges: binary()
) ::
  FFix.Terminal.t()
```

Buffer video frames, and make them available to the end of the filter graph.

## Options

  * pix_fmts - set the supported pixel formats
  * color_spaces - set the supported color spaces
  * color_ranges - set the supported color ranges

# `nullsink`

```elixir
@spec nullsink(
  FFix.Stream.t(),
  []
) :: FFix.Terminal.t()
```

Do absolutely nothing with the input video.

## Options

---

*Consult [api-reference.md](api-reference.md) for complete listing*
