How to Use FFmpeg Telecine Filter for 3:2 Pulldown

This guide explains how to use the telecine filter in FFmpeg to apply a 3:2 pulldown, a process used to convert 24 frames per second (fps) video into a 29.97 fps NTSC-compatible format. You will learn the basic command syntax, how the filter options work, and how to execute this conversion to create standard interlaced video from progressive sources.

Understanding the Telecine Filter

The telecine process converts progressive 24 fps (or 23.976 fps) footage into 30 fps (or 29.97 fps) interlaced video by splitting frames into fields and repeating them in a specific pattern. The FFmpeg telecine filter automates this process by generating the necessary interlaced fields.

Basic Command Syntax

To apply a standard 3:2 pulldown using the telecine filter, use the following command template:

ffmpeg -i input_24fps.mp4 -vf "telecine=first_field=t:pattern=23" -c:v libx264 -flags +ildct+ilme output_30fps.mp4

Parameter Breakdown

  • -vf "telecine=...": This invokes the video filtergraph and applies the telecine filter.
  • first_field (or ff): Specifies which field is output first.
    • t or top: Top field first (TFF) (Default and most common for HD video).
    • b or bottom: Bottom field first (BFF).
  • pattern (or p): Defines the pulldown pattern.
    • 23: This is the standard NTSC 3:2 pulldown pattern (FFmpeg refers to it as 23 based on the frame-to-field mapping ratio). It stretches 4 progressive frames into 5 interlaced frames (10 fields).
  • -flags +ildct+ilme: These flags instruct the encoder (like libx264) to use interlaced discrete cosine transform (DCT) and interlaced motion estimation. This ensures the interlaced structure created by the telecine filter is preserved correctly during compression.

Verifying the Output

Once the command finishes running, you can verify that the frame rate has increased from 23.976 fps to 29.97 fps (or 24 fps to 30 fps) by analyzing the output file with ffprobe:

ffprobe -v error -select_streams v:0 -show_entries stream=r_frame_rate -of default=noprint_wrappers=1 output_30fps.mp4