How to Use FFmpeg Pullup Filter for Inverse Telecine

This guide explains how to use the pullup filter in FFmpeg to perform field-matching and inverse telecine (IVTC) on telecined video content. You will learn the mechanics behind the pullup filter, its essential configuration parameters, and how to construct commands that restore 29.97 fps telecined material back to its original 23.976 fps progressive format.


Understanding the Pullup Filter

The pullup filter is a field-matching filter designed for inverse telecine. Unlike simple deinterlacers that discard fields or interpolate scanlines, pullup analyzes adjacent interlaced fields and combines matching pairs to reconstruct the original progressive frames.

Because pullup only matches fields and does not drop the resulting duplicate frames, it must be paired with a frame-rate reduction filter—typically fps or decimate—to achieve a true inverse telecine output.


Basic Pullup Syntax

A standard 3:2 pulldown converts 24p (23.976 fps) film to 60i (29.97 fps) NTSC broadcast video. To reverse this, apply pullup followed by fps=24000/1001:

ffmpeg -i input_telecined.mkv -vf "pullup,fps=24000/1001" -c:v libx264 -crf 18 -c:a copy output_progressive.mp4
  • pullup: Analyzes incoming fields and recombines matching fields into progressive frames.
  • fps=24000/1001: Sets the output framerate to 23.976 fps, cleanly dropping the duplicate frames generated by field matching.

Configuring Pullup Parameters

Analog sources (such as VHS or telecined LaserDisc captures) often contain head-switching noise, edge artifacts, or border discoloration that interfere with field-matching metrics. The pullup filter includes parameters to ignore these problematic areas:

  • jl, jr, jt, jb (Junk Left, Right, Top, Bottom): Number of pixels to ignore at each edge when calculating field differences. Defaults to 0. Must be multiples of 2.
  • strict: Sets the strictness of the matching engine.
    • -1: Allows matching across scene breaks (useful for poorly edited telecine).
    • 0: Default balanced mode.
    • 1: Strict matching; prevents matching across different scenes, reducing risk of blending frames at cut points.
  • mp (Metric Plane): Specifies which color plane to use for calculations. Defaults to 0 (Luma/Y plane), which is the most reliable for telecine detection.

Example with Edge Masking

If an analog NTSC capture has noise on the bottom 8 pixels and along the sides:

ffmpeg -i analog_tape.ts -vf "pullup=jl=8:jr=8:jt=0:jb=8,fps=24000/1001" -c:v libx265 -crf 20 -c:a flac output.mkv

Alternative: Using Pullup with Decimate

In workflows where variable framerate (VFR) or complex cadences are present, combining pullup with the decimate filter can be used instead of forcing a fixed framerate with fps:

ffmpeg -i input.vob -vf "pullup,decimate" -c:v libx264 -crf 17 -c:a copy output.mp4

The decimate filter drops 1 duplicate frame out of every 5 frames, natively achieving the 4/5 reduction required for standard 3:2 pulldown removal.