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 (top or t) or bottom field (bottom or b) 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 as 23 (or 32), 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.mp4

Breakdown 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 (1 for top, 0 for 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.mp4

ProRes 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). Use bb for 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.mp4

The 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).