FFmpeg Telecine: Progressive to Interlaced Conversion
This guide explains how to convert progressive-scan video into an
interlaced broadcast standard using FFmpeg's telecine video
filter. You will learn the correct command syntax, understand the
pulldown pattern options, and configure encoding flags to ensure your
target video players and broadcast equipment recognize the resulting
output as true interlaced video.
Understanding the Telecine Filter
The telecine filter simulates the classical telecine
process, which takes progressive frames and splits them across
interlaced fields. It is most commonly used for "3:2 pulldown," which
converts 24 fps (or 23.976 fps) progressive film into 29.97 fps (59.94
fields per second) interlaced video for NTSC broadcast.
The filter accepts two primary parameters:
first_field: Determines whether the top field (toport) or bottom field (bottomorb) is presented first. Most modern HD formats prefer top-field-first (top).pattern: A sequence of numbers defining how many fields each progressive input frame produces. A standard 3:2 pulldown is represented as23(or32), meaning the first frame generates 2 fields, the next generates 3 fields, and the pattern repeats.
Basic 3:2 Pulldown Command (24p to 60i)
To convert a 23.976 fps or 24 fps progressive video into a 29.97 fps interlaced video using H.264 encoding:
ffmpeg -i input_24p.mp4 -vf "telecine=first_field=top:pattern=23" -c:v libx264 -flags +ildct+ilme -top 1 output_interlaced.mp4Breakdown of Options:
-vf "telecine=first_field=top:pattern=23": Applies the telecine filter, setting the field dominance to top-field-first and applying the standard 3:2 pulldown pattern.-c:v libx264: Sets the video encoder to H.264.-flags +ildct+ilme: Instructs the encoder to use interlaced discrete cosine transform (DCT) and interlaced motion estimation. This ensures the macroblocks are compressed specifically for interlaced display.-top 1: Explicitly sets the output stream metadata to indicate top-field-first (1for top,0for bottom).
25p to 50i Conversion (PAL)
If you are working in PAL and need to split 25 fps progressive video
into 50 interlaced fields per second without altering the playback speed
or duration, you need each frame to generate exactly two fields. In
FFmpeg, this uses a 11 or 22 pattern (where
each input frame produces 2 fields, 1 top and 1 bottom):
ffmpeg -i input_25p.mp4 -vf "telecine=first_field=top:pattern=11" -c:v libx264 -flags +ildct+ilme -top 1 output_50i.mp4ProRes Broadcast Export Example
For professional mastering where an interlaced Apple ProRes output is required:
ffmpeg -i input_24p.mov -vf "telecine=first_field=top:pattern=23" -c:v prores_ks -profile:v 3 -flags +ildct+ilme -field_order tt output_prores_60i.mov-profile:v 3: Encodes using ProRes 422 HQ.-field_order tt: Informs the ProRes container and encoder that the content is Top Field First (tt). Usebbfor Bottom Field First.
Verifying the Output
To verify that the resulting file is recognized as interlaced, run
ffprobe:
ffprobe -v error -select_streams v:0 -show_entries stream=field_order,r_frame_rate -of default=noprint_wrappers=1 output_interlaced.mp4The output should show field_order=tt (or
tb) and a frame rate reflecting the interlaced frame
delivery standard (e.g., 30000/1001 for 29.97 fps /
59.94i).