Convert Progressive to Interlaced with FFmpeg tinterlace

This article explains how to convert high-frame-rate progressive video into standard interlaced video using the FFmpeg tinterlace filter. By applying temporal decimation, you can take a 50p or 60p progressive source and generate a broadcast-compliant 25i or 30i interlaced output where alternate progressive frames are merged into alternating fields to preserve fluid motion.

Understanding Temporal Decimation with tinterlace

Interlacing via temporal decimation halves the frame rate by taking consecutive full frames and interleaving them into a single frame. Instead of dropping frames, odd lines from one frame and even lines from the next are combined.

  • Input: Progressive video at double the target interlaced frame rate (e.g., 50 fps or 59.94 fps).
  • Output: Interlaced video at standard frame rate (e.g., 25 fps or 29.97 fps) containing 50 or 59.94 fields per second.

Selecting the Field Order

The tinterlace filter uses the mode parameter to define how lines are combined:

  • Top Field First (TFF): mode=interleave_top (or mode=0). Takes the top field (even lines) from the first frame and the bottom field (odd lines) from the subsequent frame.
  • Bottom Field First (BFF): mode=interleave_bottom (or mode=1). Takes the bottom field from the first frame and the top field from the subsequent frame.

Basic Command Syntax

To convert a 60p progressive file to 30i (Top Field First), use the following basic filter configuration:

ffmpeg -i input_60p.mp4 -vf "tinterlace=mode=interleave_top,setfield=tff" -c:v libx264 -flags +ildct+ilme output_30i.mp4

Complete Practical Examples

Example 1: Top Field First H.264 Encoding

Broadcast standards such as 1080i50 or 1080i59.94 typically require Top Field First (TFF).

ffmpeg -i input_50p.mp4 -vf "tinterlace=mode=interleave_top,setfield=tff" -c:v libx264 -flags +ildct+ilme -top 1 -c:a copy output_25i.mp4
  • tinterlace=mode=interleave_top: Interleaves consecutive frames into fields and halves the output frame rate.
  • setfield=tff: Tags the internal video frames as Top Field First.
  • -flags +ildct+ilme: Enables interlaced Discrete Cosine Transform (DCT) and interlaced Motion Estimation (ME) in the video encoder.
  • -top 1: Sets the container/codec-level field order flag to Top Field First (-top 0 sets Bottom Field First).

Example 2: Interlacing to Apple ProRes for Broadcast Delivery

For editing and mezzanine archive workflows, interlaced ProRes is frequently required:

ffmpeg -i input_5994p.mov -vf "tinterlace=mode=interleave_top,setfield=tff" -c:v prores_ks -profile:v 3 -flags +ildct+ilme -c:a copy output_2997i.mov

Example 3: Bottom Field First (DV Standards)

If producing content for legacy formats such as standard-definition DV, specify Bottom Field First:

ffmpeg -i input_5994p.mp4 -vf "tinterlace=mode=interleave_bottom,setfield=bff" -c:v libx264 -flags +ildct+ilme -top 0 -c:a copy output_bff.mp4

Verification

To verify that the resulting file contains interlaced frames and accurate metadata, run ffprobe:

ffprobe -v error -select_streams v:0 -show_entries stream=field_order,r_frame_rate output_30i.mp4

The output should report the halved frame rate (e.g., 30/1 or 25/1) and the specified field order (tt for Top Field First, bb for Bottom Field First).