Convert Progressive to Interlaced with FFmpeg Telecine
This article explains how to use the telecine filter in
FFmpeg to convert progressive video files into an interlaced format. You
will learn the basic command syntax, key parameters for applying
telecine patterns, and how to properly configure your encoder to output
a broadcast-compliant interlaced video stream.
The telecine process is commonly used to convert 24 frames per second (fps) progressive film content into a 29.97 fps (or 30 fps) interlaced video format, which is the standard for NTSC television broadcasts. This is achieved by distributing the progressive frames across alternating top and bottom video fields using a specific pulldown pattern.
The Basic Telecine Command
To apply a standard 3:2 pulldown (the most common pattern for
converting 24p to 30i), use the telecine video filter.
Below is the fundamental FFmpeg command:
ffmpeg -i input_24p.mp4 -vf "telecine=first_field=top:pattern=32" -c:v libx264 -flags +ildct+ilme output_30i.mp4Parameter Breakdown
-vf "telecine=...: This activates the telecine video filter.first_field: Specifies which field to output first. You can set this totop(ort) for Top Field First (TFF), orbottom(orb) for Bottom Field First (BFF). Broadcast standards typically require Top Field First.pattern: Defines the pulldown pattern. The value32represents the standard NTSC 3:2 pulldown. This pattern pulls 5 frames of interlaced video from every 4 frames of progressive video. Other patterns include22(for 2:2 pulldown, often used for PAL) and2332(for 2:3:3:2 pulldown).
-flags +ildct+ilme: This is a critical step when encoding to formats like H.264 (libx264). It instructs the encoder to use interlaced discrete cosine transform (DCT) and interlaced motion estimation. Without these flags, the encoder will treat the interlaced frames as progressive, resulting in compression artifacts and poor playback quality.
Selecting the Right Pixel Format
For broadcast compatibility, interlaced video often requires a
specific chroma subsampling format, such as YUV 4:2:2. You can force
this output by adding the -pix_fmt flag to your
command:
ffmpeg -i input_24p.mp4 -vf "telecine=first_field=top:pattern=32" -c:v libx264 -pix_fmt yuv422p -flags +ildct+ilme output_30i.mp4By combining the telecine filter with interlaced
encoding flags, FFmpeg will successfully structure and flag the output
file as interlaced, making it ready for hardware and software player
environments that require interlaced signals.