[FFmpeg-user] Seeking smart decomb filter

Mark Filipak (ffmpeg) markfilipak at bog.us
Thu Jan 21 15:55:01 EET 2021

On 01/21/2021 07:53 AM, Paul B Mahol wrote:
> On Thu, Jan 21, 2021 at 1:31 PM Paul B Mahol <onemda at gmail.com> wrote:
>> On Thu, Jan 21, 2021 at 12:51 PM Mark Filipak (ffmpeg) <markfilipak at bog.us>
>> wrote:
>>> On 01/20/2021 04:50 PM, Paul B Mahol wrote:
>>>> On Wed, Jan 20, 2021 at 10:45 PM Mark Filipak (ffmpeg) <
>>> markfilipak at bog.us>
>>>> wrote:
>>>>> On 01/20/2021 06:17 AM, Paul B Mahol wrote:
>>>>>> Motion compensation does not work that way.
>>>>> Thank you, Paul. Yes, I knew that. I'm not seeking motion compensation.
>>>>> Kindly reread my filter
>>>>> features and suggest what comes closest. What I seek simply works on
>>>>> pixels. I'm relying on your
>>>>> experience (and perhaps the experiences of others here).
>>>> Have you tried nnedi or estdif filters? Both are intra only
>>> deinterlacers.
>>> Thank you for the guidance. I'm trying estdif first because it seems
>>> simpler, but it doesn't do the
>>> good thing. It does decomb very effectively, but it does it by aligning
>>> (shifting) the edges in
>>> field'2' to the edges in field'1' (which are not shifted). Aligning with
>>> field'1' produces judder
>>> (or in my case, doesn't eliminate judder). What I want it to do is align
>>> both field'1' edges and
>>> field'2' edges to the median (i.e. half way between the input's edges). I
>>> do realize that such a
>>> method would introduce combing along the edges of the frame, but that's
>>> okay.
>>> Here's the command I used to transcode 24FPS to 60FPS:
>>> ffmpeg -i 24[1][2].mkv -map 0 -filter_complex "telecine=pattern=5,
>>> split[1][2],
>>> [1]select=not(eq(mod(n\,5)\,2))[3], [2]select=eq(mod(n\,5)\,2),
>>> estdif=mode=frame[4],
>>> [3][4]interleave" -codec:v libx265 -x265-params "crf=16:qcomp=0.60"
>>> -codec:a copy -codec:s copy
>>> 24[1][2]-to-60[1][1][estdif=mode=frame(1~2)][2][2].mkv
>>> I'll try nnedi. Perhaps I can figure it out.
>> Do not even try.
>> Mentioned filters work only with interlaced frames, while your use case is
>> completely invalid and frowned upon.
>> I deeply regret replying to this thread.
> Also, the only way to "invent" new frames is to use either motion
> interpolation via optical flow or via blocks interpolation like with
> minterpolate filter.

There was some reason why I didn't try minterpolate but I can't recall what it was. I will give it a 
try. I assume I don't need to use '-filter_complex' or 'select'. Just something like '-vf 
minterpolate=fps=60000/1001:mi_mode=blend' for the 1st try.

Do you have any insight about minterpolate you'd care to share?


>>> Thanks again,
>>> Mark.
>>>>> Regards,
>>>>> Mark.
>>>>>> On Wed, Jan 20, 2021 at 2:45 AM Mark Filipak (ffmpeg) <
>>>>> markfilipak at bog.us>
>>>>>> wrote:
>>>>>>> Hello All,
>>>>>>> I seek a decomb filter that operates on H/2 number of line pairs:
>>> lines
>>>>> i
>>>>>>> & i+1 (where i=0..H/2-1),
>>>>>>> by aligning edges in the two lines at x = delta-x(edge)/2 (i.e. the
>>>>>>> median). The ideal filter would
>>>>>>> differentiate overall motion due to panning versus local motion due
>>> to
>>>>>>> local object motion.
>>>>>>> Pan-combing on the left & right edges is acceptable but it would be a
>>>>>>> great bonus if the filter
>>>>>>> performed blend on those edges with the blending radius equal to
>>>>> one-half
>>>>>>> the pan-comb.
>>>>>>> Vertical, line-pair-to-line-pair processing is not needed or desired.
>>>>>>> Frame-to-frame processing is not needed or desired.
>>>>>>> I have been trying a great number of filters based on their names and
>>>>> what
>>>>>>> is in the documentation.
>>>>>>> The best I've found so far is pp=linblenddeint but it obviously
>>> doesn't
>>>>>>> align edges via the edge
>>>>>>> median and it obviously isn't aware of pan-combing versus
>>>>>>> object-motion-combing.
>>>>>>> Any suggestions are very welcome. If I find this filter I will post a
>>>>> link
>>>>>>> to a 60FPS telecined
>>>>>>> video that will amaze everyone -- better than anything that Cuda can
>>> do.
>>>>>>> -Mark.

More information about the ffmpeg-user mailing list