FFmpeg Telecine Filter: How to Apply 3:2 Pulldown
This guide explains how to convert progressive 24 fps (or 23.976 fps)
video into 29.97 fps interlaced video using the telecine
video filter in FFmpeg. You will learn the mechanics of the 3:2 pulldown
cadence, the essential parameters required by the filter, and how to
execute a complete encoding command that outputs a broadcast-compliant
interlaced stream.
Understanding 3:2 Pulldown in FFmpeg
The 3:2 pulldown process adapts 24-frame-per-second film material to
standard 29.97 fps (59.94 fields per second) television systems. The
telecine filter achieves this by breaking progressive
frames into fields and alternating their display duration. One frame is
displayed across two fields, and the subsequent frame is displayed
across three fields, creating the standard "2-3-2-3" cadence.
The Telecine Filter Syntax
The FFmpeg filter uses two primary parameters:
first_field: Sets the field dominance. Usetop(ort) for top-field first, orbottom(orb) for bottom-field first. Top-field first is standard for HD and modern broadcast workflows.pattern: Specifies the cadence sequence of field lengths. The value23creates standard 3:2 pulldown (alternating 2 fields and 3 fields).
The basic filter call is:
telecine=first_field=top:pattern=23
Full Encoding Command
When applying the telecine filter, you must also
instruct your video encoder to preserve and properly flag the interlaced
structure.
Here is a standard command using the libx264
encoder:
ffmpeg -i input_24p.mp4 -vf "telecine=first_field=top:pattern=23" -c:v libx264 -flags +ilme+ildct -top 1 -c:a copy output_2997i.mp4Parameter Breakdown
-i input_24p.mp4: Specifies the progressive 23.976 fps or 24 fps input source.-vf "telecine=first_field=top:pattern=23": Executes the 3:2 pulldown, expanding the frame rate to 29.97 fps (if input is 23.976 fps) or 30 fps (if input is 24 fps).-c:v libx264: Selects the H.264 video codec.-flags +ilme+ildct: Forces interlaced motion estimation and interlaced discrete cosine transform, preventing the encoder from smoothing away interlaced field boundaries.-top 1: Flags the encoded video stream metadata as top-field first (TFF). Set to0for bottom-field first (BFF).-c:a copy: Copies the audio stream without re-encoding.
Verifying the Stream
Confirm that the output has the correct frame rate and interlaced
field flagging using ffprobe:
ffprobe -v error -select_streams v:0 -show_entries stream=r_frame_rate,field_order output_2997i.mp4The output should confirm an r_frame_rate of
30000/1001 (for standard NTSC 29.97 fps) and a
field_order of tt (top-coded,
top-displayed).