What is Interlacing?

Interlaced video splits each frame into its odd lines (field 1) and its even lines (field 2) and shows them one after the other. TV broadcasts (NTSC, PAL) and DV camera recordings often use it.

Computer and phone screens are progressive: they show each frame whole. If you play interlaced video on them as it is, you see combing, thin horizontal stripes along the edges of moving things.

Basic Command

ffmpeg -i input.mp4 -vf yadif output.mp4

With no options, yadif runs in mode=0: one output frame for each input frame.

The mode Option

ffmpeg -i input.mp4 -vf "yadif=mode=0" output.mp4
mode Behavior Frame rate
0 Output one frame per input frame Unchanged
1 Output one frame per field Doubled
2 Like mode=0, but skips the spatial interlacing check Unchanged
3 Like mode=1, but skips the spatial interlacing check Doubled

mode=0 is usually enough. Use mode=1 to turn 60i into 60p. To process only the frames marked as interlaced, set deint=1; the mode does not control this.

60i → 30p

For Japanese TV broadcasts (1080i at 60Hz), mode=0 is all you need. It keeps the number of frames, so the output is 30p (29.97p, to be exact):

ffmpeg -i input.mp4 -vf "yadif=mode=0" output.mp4

60i → 60p

ffmpeg -i input.mp4 -vf "yadif=mode=1" output.mp4

mode=1 outputs one frame per field, so you get 60fps progressive video.

The parity Option (Field Order)

ffmpeg -i input.mp4 -vf "yadif=mode=0:parity=0" output.mp4

parity tells yadif which of the two fields comes first.

parity Description
-1 Auto-detect (default, recommended)
0 TFF (Top Field First) — common in 1080i HD video
1 BFF (Bottom Field First) — common in DV camcorder footage (both NTSC and PAL)

-1 (auto) is usually right.

How to Tell if Video is Interlaced

ffprobe shows the field order:

ffprobe -v quiet -show_streams -select_streams v:0 input.mp4 | grep field_order

If it prints tt (TFF), bb (BFF), tb or bt, the video is interlaced. progressive only means the file is labelled that way; combing can still be baked into the picture. If you see combing, check the picture itself with idet (see the FAQ below).

Higher-Quality Alternative to yadif

bwdif (Bob Weaver Deinterlacing Filter) is based on yadif and gives better quality. By default it runs in mode=1 (one frame per field), which doubles the frame rate. To get one frame per input frame, as with yadif’s basic command, add mode=0:

ffmpeg -i input.mp4 -vf bwdif=mode=0 output.mp4

Measured: time and size

This is the command that was measured:

ffmpeg -i input.mp4 -vf yadif=mode=0:parity=-1 -c:v libx264 -crf 23 -preset medium -an output.mp4
Measured
Wall-clock time 14 s (8.57x real time)
Output size 67.94 MB
Size vs. the no-filter re-encode -21.2%

Rig: Core i9-14900KF (32 threads), FFmpeg 8.1 (gyan.dev), 2026-09-05, one command at a time. The source clip is 1920x1080, 30 fps, 120 s, 351.4 MB (Big Buck Bunny, looped, CC BY 3.0). For this run, that clip was first made into interlaced 1080i with FFmpeg’s interlace filter and re-encoded, and the interlaced file was the input. interlace combines every two frames into one, so that file runs at 15 fps and has 1,800 frames. For comparison, re-encoding the original 30 fps clip (3,600 frames) with no filter (-c:v libx264 -crf 23 -preset medium, no -vf) took 27.97 s and produced 86.26 MB. Full data is in the dataset.

Why the number lands where it does

This run took about half as long as the no-filter re-encode (14 s against 27.97 s) because it encoded half as many frames. yadif in mode=0 outputs one frame per input frame, so the output is also 15 fps with 1,800 frames. Per frame, both took about 7.8 ms (27.97 s / 3,600 without the filter, 14 s / 1,800 with yadif). Adding yadif barely changed the time.

The file is 21.2% smaller for the same reason: it has half as many frames. Per frame, it holds about 1.6 times as much data as the no-filter re-encode.

You cannot deinterlace with -c copy (copying the streams without re-encoding). In the same measurement run, operations that did not re-encode the video finished in 0.41 s (stream mapping), 0.49 s (moving the moov atom) and 1.03 s (an audio fade that copies the video and re-encodes only the audio). Re-encoding the video took 27.97 s with no filter and 729.16 s for a conversion to VP9. A video filter always means re-encoding the video, so the job can no longer finish in about a second as a copy does.

These figures are for mode=0 only. mode=1 outputs one frame per field, so it writes more frames and the figures above do not apply to it.

To check the result, look at the edges of fast-moving things: scrolling titles, arms, a ball in sports footage, or a horizontal camera pan. If the field order is wrong, motion seems to jump back and forth. In that case, try a short section with parity=0 and with parity=1 and compare.

Frequently Asked Questions

yadif vs bwdif vs nnedi — which deinterlacer is best?

bwdif is an improved deinterlacer based on yadif. nnedi uses a neural network and gives the cleanest result, but it is much slower. yadif is fine when you need to process many files quickly.

Should I deinterlace 60i to 30p or 60p?

60p (mode=1, one progressive frame per field) keeps motion smooth. 30p (mode=0) has half the frame rate and looks choppier, but it suits typical web delivery.

Can I detect whether a video is interlaced first?

Yes. ffmpeg -i in.mp4 -filter:v idet -frames:v 200 -f null - analyses the first 200 frames and reports how many it judged BFF, TFF and progressive. Deinterlace only when the interlaced counts are higher than the progressive count.

Will deinterlacing harm progressive footage?

Slightly. Deinterlacers blur or duplicate fields they cannot find. Run idet first and deinterlace only video that it confirms is interlaced.

Does deinterlacing change the resolution?

No. The output has the same width and height as the input; only the way the fields are combined changes. A 1080i source (1920×1080 interlaced) gives a 1920×1080 progressive output.