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.mp4

Parameter Breakdown

  • -vf "telecine=...: This activates the telecine video filter.
    • first_field: Specifies which field to output first. You can set this to top (or t) for Top Field First (TFF), or bottom (or b) for Bottom Field First (BFF). Broadcast standards typically require Top Field First.
    • pattern: Defines the pulldown pattern. The value 32 represents the standard NTSC 3:2 pulldown. This pattern pulls 5 frames of interlaced video from every 4 frames of progressive video. Other patterns include 22 (for 2:2 pulldown, often used for PAL) and 2332 (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.mp4

By 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.