[FFmpeg-user] Decombing via screening - 'tblend' bug (?)

Paul B Mahol onemda at gmail.com
Wed Apr 15 12:00:44 EEST 2020


On 4/15/20, Mark Filipak <markfilipak.windows+ffmpeg at gmail.com> wrote:
> On 04/15/2020 04:25 AM, Paul B Mahol wrote:
>> On 4/15/20, Mark Filipak <markfilipak.windows+ffmpeg at gmail.com> wrote:
>>> Request for bug confirmation is included.
>>>
>>> Correction: I had datascope in #2 just 1 time. I don't know how it got
>>> into
>>> the original post twice.
>>> Sorry. - M.
>>>
>>> On 04/14/2020 10:24 AM, Paul B Mahol wrote:
>>>> On 4/14/20, Mark Filipak <markfilipak.windows+ffmpeg at gmail.com> wrote:
>>>>> In the command line below,
>>>>>                   I will eventually insert a screen maker --+
>>>>>                                                             ¦
>>>>> separatefields,scale=height=2*in_h:sws_flags=neighbor,--HERE--,tblend=normal[D]
>>>>>
>>>>> but first, I need to persuade 'tblend' to accept the 2 frames made by
>>>>> 'separatefields' (and scaled
>>>>> by 'scale').
>>>>> But as you can see in the next section (extracted from the log), though
>>>>> the
>>>>> 'height=2*in_h'
>>>>> directive works (i.e., the 1920x540 frames from 'separatefields' are
>>>>> scaled
>>>>> to 1920x1080), ffmpeg is
>>>>> not happy. Is it because the SARs don't match? How can I overcome that?
>>>>> Thanks!
>>>>
>>>> Insert setsar=1 after scale?
>>>
>>> Thank you, Paul. It works. I apologize for not finding that solution on
>>> my
>>> own ...how embarrassing.
>>>
>>> Next problem: 'tblend' appears to be malfunctioning.
>>>
>>> "The tblend (time blend) filter takes two consecutive frames from one
>>> single
>>> stream, and outputs the
>>> result obtained by blending the new frame on top of the old frame."
>>>
>>> #1 - This works as expected:
>>> ffmpeg -i IN -filter_complex "telecine=pattern=5, split[A][B],
>>> [A]select='not(eq(mod(n+1\,5)\,3))'[C], [B]select='eq(mod(n+1\,5)\,3)',
>>> datascope=size=1920x1080:x=45:y=340:mode=color2[D], [C][D]interleave" OUT
>>>
>>> #2 - This malfunctions:
>>> ffmpeg -i IN -filter_complex "telecine=pattern=5, split[A][B],
>>> [A]select='not(eq(mod(n+1\,5)\,3))'[C], [B]select='eq(mod(n+1\,5)\,3)',
>>> separatefields,
>>> scale=height=2*in_h:sws_flags=neighbor, setsar=1, tblend,
>>> datascope=size=1920x1080:x=45:y=340:mode=color2, [C][D]interleave" OUT
>>>
>>> #1 brings up datascope in frames (n, zero-based): 2 7 12 17 etc., as
>>> expected.
>>> #2 brings up datascope in frames (n, zero-based): 4 7 10 13 etc.
>>>
>>> Another clue is:
>>> #1 OUT has 598 frames.
>>> #2 OUT has 716 frames.
>>>
>>> Would someone who has the latest nightly build kindly confirm this. I can
>>> supply the test video --
>>> contact me off-list.
>>
>> You still can not read documentation? Why?
>>
>> interleave filter simply picks frames from several streams.
>> This is obviously explained in documentation.
>> tblend filter blend successive frames, this is obviously different
>> from interlace filter as that will not drop any frame like interlace
>> does.
>
> Look at my command lines again. Here, I'll give you filtergraphs:
>
> #1
> telecine -> split -> select (n+1%5!=3) ---------------------------->
> interleave
>                    -> select (n+1%5==3) ---------------------------->
> 598 frames (correct)
>
> #2
> telecine -> split -> select (n+1%5!=3) ---------------------------->
> interleave
>                    -> select (n+1%5==3) -> separatefields...tblend ->
> 716 frames (malfunction)
>
> 598*4/5 = 478 frames (upper 'select')
> 598*1/5 = 119 frames (lower 'select')
> 119*2 = 238 frames (output of 'separatefields')
> 238/2 = 119 frames (what output of 'tblend' is supposed to be)
> 238 frames (what output of 'tblend' actually is)
> 478+238 = 716 frames (output of 'interleave' showing that 'tblend'
> malfunctions)
>

tblend works fine, you obviously do not know what you doing.

Given frames: A B C D E F G:

tblend gives this output: AB BC CD DE EF FG, so original number of
frames in input minus one.


More information about the ffmpeg-user mailing list