[FFmpeg-user] Judder-free, 60 FPS telecine (?)

Mark Filipak markfilipak.windows+ffmpeg at gmail.com
Sun Mar 29 09:03:22 EEST 2020


UPDATE

Well, I guess the fieldmatch filter doesn't copy (cpnbu) fields. It instead makes tries at decombing 
based on a cpnbu menu (passed as a parameter).

Does ffmpeg have a mechanism to *copy* fields based on the same cpnbu criteria that fieldmatch employs?

 From a video architecture standpoint, what I'm trying to do is take a 30 FPS stream (2-3-2-3), 
double it to 60 FPS (4-6-4-6) by simple frame repeat, then process the 60 FPS stream by reshuffling 
the fields according to A cpnbu template string (ccbcpupccc) that is, in this case, 10 frames long 
(in other words, a 10 frame repeat).

You might ask: Why do I want to do this? To eliminate judder that's present when original 24 FPS 
streams are displayed on 60Hz TVs.

You know how having a 120Hz TV makes for straightforward 24 FPS and 30 FPS display without judder? I 
thought about that for a long time and I think the same should be possible with a 60 FPS stream, but 
at the field level instead of at the frame level. After all, 60 FPS has 120 fields per second, does 
it not? "120" is the magic number, is it not?

A 30 FPS telecine has 3 progressive frames + 2 interlaced frames per 1/6 second as follows:
  P   P   I   I   P   @ 30 FPS.
A 60 FPS telecine would have 8 progressive frames + 2 interlaced frames per 1/6 second as follows:
P P I P P P P I P P  @ 60 FPS.
Note the differences in interlaced frame grouping, interlaced frame frequency, and interlaced frame 
duration. The 60 FPS would be superior in every respect and, due to the extremely brief period of 
interlace, probably wouldn't need any subsequent decombing.

ORIGINAL MESSAGE

Objective:
Create a telecine that is judder free.

(I've tried to adjust text wrapping so that the lines don't wrap. I hope it works.)

Mental Preparation:
Here are the 2 flavors of telecines (which I call "t30")

p24  = [A/a__________][B/b__________][C/c__________][D/d__________]
t30e = [A/a_______][B/b_______][B/c_______][C/d_______][D/d_______]   ...2-3 pull-down
t30o = [A/a_______][A/b_______][B/c_______][C/c_______][D/d_______]   ...3-2 pull-down
        |<--------------------------1/6s-------------------------->|
(I hope you see what my peculiar notation is trying to convey.)


Action:
Starting with t30e (i.e., 2-3 pull-down), make a 60 FPS that's judder free.

t30e = [A/a_______][B/b_______][B/c_______][C/d_______][D/d_______]   ...2-3-2-3
t60e = [A/a_][A/a_][B/b_][B/b_][B/c_][B/c_][C/d_][C/d_][D/d_][D/d_]   ...2x FPS
         (c)   (c)   (b)   (c)   (p)   (u)   (p)   (c)   (c)   (c)     ...fieldmatch, top matching
t60  = [A/a_][A/a_][A/b_][B/b_][B/b_][C/c_][C/c_][C/d_][D/d_][D/d_]   ...5-5-5-5 result

As you can see, applying the (ccbcpupccc) top fieldmatch filter, the result should be judder-free.


Action:
Starting with t30o (i.e., 3-2 pull-down), make a 60 FPS that's judder free.

t30o = [A/a_______][A/b_______][B/c_______][C/c_______][D/d_______]   ...3-2-3-2
t60o = [A/a_][A/a_][A/b_][A/b_][B/c_][B/c_][C/c_][C/c_][D/d_][D/d_]   ...2x FPS
         (c)   (c)   (c)   (u)   (p)   (u)   (c)   (n)   (c)   (c)     ...fieldmatch, top matching
t60  = [A/a_][A/a_][A/b_][B/b_][B/b_][C/c_][C/c_][C/d_][D/d_][D/d_]   ...5-5-5-5

As you can see, applying the (cccupucncc) top fieldmatch filter, the result should be judder-free.


So using the appropriate fieldmatch, judder-free 60 FPS can be achieved from either t30e or t30o.

I assume this has not been tried before.

Can someone try it or help me to construct the appropriate command line?

Regards,
Mark.

PS: If this works, I'll next try to apply it (or something similar) to a 30 FPS stream that is a mix 
of telecine & NTSC interlace (such as found in "Making of" movie extras).


More information about the ffmpeg-user mailing list