How to Use the FFmpeg Pullup Filter

This guide explains how to use the pullup filter in FFmpeg to perform inverse telecine (IVTC) on telecined video files. You will learn what the pullup filter does, why it is often preferred over other detelecining methods, and how to write the correct FFmpeg commands to restore your 29.97 fps telecined video back to its original, progressive 23.976 fps format.

What is the Pullup Filter?

The pullup filter is a high-quality inverse telecine filter. Unlike the standard detelecine filter, which expects a rigid, repeating pattern of fields (like a 3:2 pulldown), pullup is heuristic-based. It analyzes the video frames dynamically, looking at past and future fields to decide how to combine them back into progressive frames. This makes it highly effective for videos with broken pulldown patterns, mixed content, or edited telecined footage.

Basic Usage Command

To use the pullup filter, you must apply the filter to merge the fields and then adjust the output frame rate to drop the resulting duplicate frames.

Here is the standard command to convert a 29.97 fps telecined video to 23.976 fps progressive video:

ffmpeg -i input.mp4 -vf "pullup,fps=24000/1001" -c:a copy output.mp4

In this command: * -vf "pullup,fps=24000/1001": Applies the pullup filter first to combine the fields. It then pipes the video into the fps filter set to 24000/1001 (which is approximately 23.976 fps) to drop the duplicate frames created by the pullup process. * -c:a copy: Copies the audio stream without re-encoding to preserve quality and save processing time.

Handling Overscan and Noise (Junk Parameters)

Telecined video—especially when digitized from analog sources like VHS or Betacam—often contains static, head-clog, or black bars at the edges of the frame. This “junk” can confuse the pullup filter’s analysis engine.

To prevent this, you can tell the filter to ignore a specific number of pixels on the left, right, top, or bottom of the frame using the junk parameters: jl (junk left), jr (junk right), jt (junk top), and jb (junk bottom).

For example, to ignore 8 pixels on all sides during the analysis, use this command:

ffmpeg -i input.mp4 -vf "pullup=jl=8:jr=8:jt=8:jb=8,fps=24000/1001" -c:a copy output.mp4

Note: These parameters only ignore the specified pixels during the filter’s internal calculation phase; they do not actually crop the output video.

When to Use Pullup

Use the pullup filter when: * You are dealing with NTSC DVDs or digitized VHS tapes. * The video has undergone “dirty” edits where the 3:2 pulldown pattern breaks at scene cuts. * The standard detelecine filter results in stuttering, interlacing artifacts, or ghosting.