Configure Pullup Pattern in FFmpeg Telecine Filter

This guide explains how to configure the pullup cadence and field order using FFmpeg’s telecine video filter. You will learn the mechanics behind the pattern parameter, how it maps progressive input frames to interlaced output fields, and how to construct specific telecine cadences—such as classic 3:2, 2:3:3:2, and European telecine—for standard-definition and high-definition broadcast workflows.

Telecine Filter Syntax

The basic syntax for the telecine filter in FFmpeg is:

-vf "telecine=first_field=FIELD:pattern=PATTERN"

The filter accepts two primary parameters:

  • first_field: Dictates which field is output first. Accepts top (or t) for top-field-first (TFF), and bottom (or b) for bottom-field-first (BFF). The default is top.
  • pattern: A sequence of digits defining how many fields each sequential progressive input frame contributes to the interlaced output stream. The default is 23.

Understanding the pattern Parameter

The pattern string defines the cadence of the telecine conversion. Each digit in the string corresponds to an input frame in sequential order and represents the number of fields generated from that frame.

Because an interlaced video frame consists of 2 fields, the sum of all digits in a complete pattern cycle divided by 2 gives the number of interlaced frames generated.

For example, to convert 24 fps to 29.97 fps (or 30 fps), every 4 progressive input frames must be expanded into 10 fields (5 interlaced frames):

  • Frame 1 contributes 2 fields.
  • Frame 2 contributes 3 fields.
  • Frame 3 contributes 2 fields.
  • Frame 4 contributes 3 fields.

This sequence produces the standard 23 pattern (representing alternating 2-field and 3-field frames).

Common Pulldown Patterns and Configurations

1. Standard 3:2 Pulldown (NTSC 24p to 60i)

The most common conversion for film-to-video transfers. Frame A outputs 2 fields, Frame B outputs 3 fields (the third field is repeated from the first field of that frame), and the cycle repeats.

  • Filter String: pattern=23 (or pattern=32)
  • Command Example:
ffmpeg -i input_24p.mp4 -vf "telecine=first_field=top:pattern=23" -r 30000/1001 -c:v libx264 -flags +ilme+ildct output_60i.mp4

2. Advanced 2:3:3:2 Pulldown

Commonly used in digital acquisition formats like Panasonic DVX100 (24p Advanced). In this pattern, only the middle frame shares fields across frames, making inverse telecine (reconstruction back to 24p) cleaner since only one interlaced frame contains mixed temporal data.

  • Filter String: pattern=2332
  • Command Example:
ffmpeg -i input_24p.mp4 -vf "telecine=first_field=top:pattern=2332" -r 30000/1001 -c:v libx264 -flags +ilme+ildct output_advanced.mp4

3. Euro-Telecine (24p to 50i / 25 fps Interlaced)

When converting 24 fps progressive film to 50i European PAL broadcast without pitch-shifting or speeding up the audio to 25 fps, 2 fields must be inserted every second (48 fields become 50 fields). This requires a 24-frame repeating cycle where 22 frames generate 2 fields each and 2 frames generate 3 fields each.

  • Filter String: pattern=222222222223222222222223
  • Command Example:
ffmpeg -i input_24p.mp4 -vf "telecine=first_field=top:pattern=222222222223222222222223" -r 25 -c:v libx264 -flags +ilme+ildct output_50i.mp4

4. Progressive Interlaced (2:2 Pulldown)

If the input is 25p or 30p and needs to be marked and formatted as 50i or 60i without altering frame pacing, each progressive frame simply splits into 2 fields.

  • Filter String: pattern=2
  • Command Example:
ffmpeg -i input_25p.mp4 -vf "telecine=first_field=top:pattern=2" -r 25 -c:v libx264 -flags +ilme+ildct output_50i.mp4

Encoding Flags for Interlaced Compatibility

When using the telecine filter with H.264 (libx264), pass standard interlacing flags to ensure container and codec-level headers match the field structure generated by the filter:

  • -flags +ilme+ildct: Enables interlaced motion estimation and discrete cosine transform.
  • -top 1: Sets the top-field-first flag in the bitstream (use -top 0 for bottom-field-first).
  • -r [rate]: Explicitly sets the container output frame rate (e.g., 30000/1001 for NTSC 29.97 fps, 25 for PAL).