This is an old revision of the document!


  • mode
    • 0 / send_frame - Output one frame for each frame (default)
    • 1 / send_field - Output one frame for each field (my preferred method)
    • 2 / send_frame_nospatial - Like send_frame, but it skips the spatial interlacing check.
    • 3 / send_field_nospatial - Like send_field, but it skips the spatial interlacing check.
The picture field parity assumed for the input interlaced video. It accepts one of the following values:

0, tff
Assume the top field is first.

1, bff
Assume the bottom field is first.

-1, auto
Enable automatic detection of field parity.

The default value is auto. If the interlacing is unknown or the decoder does not export this information, top field first will be assumed.

Specify which frames to deinterlace. Accept one of the following values:

0, all
Deinterlace all frames.

1, interlaced
Only deinterlace frames marked as interlaced.

The default value is all.

The best description I've seen of the filter options is here:

I use yadif on DVDs that have interlacing, and detelecine filters are not cleaning it up – among my collection, it's pretty rare. Only two cartoon series, and three live action.

Command line for its default options:

ffmpeg ... -vf yadif=mode=send_frame:parity=auto:deint=all ...

Using BeyBlade as a source.

Default for mode is send_frame, which will output one frame for each frame; the output frame rate is constant at 30000/1001 (29.97, NTSC).

If I set it to create a frame for each field (mode=send_field), it will come out at 60000/1001 constant instead (59.94).

Running defaults, or, just using -vf yadif, the same frames in sequence:

I'm also not caring about video encoding quality right here, it's just default x265 settings.