How to convert 1080@50i -> 720@50p using ffmpeg?
Just like interlacing progressive content divides each frame into 2 fields, thus doubling the frame rate, the common method of deinterlacing is to combine each 2 fields into 1 frame, which reduces the rate by 2, thus taking 50 into 25fps. You can of course double each final frame, but that does not provide any benefit.
First, we can read not to use -deinterlace, and yadif instead (which you already do):
- deinterlace This option is deprecated since the deinterlacing is very low quality. Use the yadif filter with -filter:v yadif.
You'll probably find the the yadif section of the FFMPEG documentation pretty interesting:
Deinterlace the input video ("yadif" means "yet another deinterlacing filter").
It accepts the optional parameters: mode:parity:auto.
MODE specifies the interlacing mode to adopt, accepts one of the following values:
‘0’
output 1 frame for each frame
‘1’
output 1 frame for each field
‘2’
like 0 but skips spatial interlacing check
‘3’
like 1 but skips spatial interlacing check
Default value is 0.
PARITY default value is -1.
AUTO default value is 0.
Notice how the default MODE is 0, which instructs FFMPEG to ouput 1 frame for each 2 fields, thus halving the fps. I think what you're looking for is MODE 1: one frame per field. I'm not too sure how to use these optional parameters but perhaps something like
-filter:v yadif 1:-1:0 -s "1280x720" -r 50