[FFmpeg-user] Decombing via screening - 'tblend' bug (?)
Paul B Mahol
onemda at gmail.com
Wed Apr 15 13:16:12 EEST 2020
On 4/15/20, Mark Filipak <markfilipak.windows+ffmpeg at gmail.com> wrote:
> On 04/15/2020 05:38 AM, Paul B Mahol wrote:
>> On 4/15/20, Mark Filipak <markfilipak.windows+ffmpeg at gmail.com> wrote:
>>> On 04/15/2020 05:00 AM, Paul B Mahol wrote:
>>>> 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.
>>>
>>> Are you even looking at the command lines?
>>>
>>> #2
>>> telecine -> split -> select (n+1%5!=3) ---------------------------->
>>> interleave
>>> -> select (n+1%5==3) -> separatefields...tblend ->
>>>
>>> 'telecine' input (IN) is A B C...
>>> 'telecine' output is A A AB B B ... (modulo 5) ...frame 2 is
>>> combed
>>> upper 'select' output is A A __ B B (n+1%5!=3) ...progressive
>>> frames
>>> lower 'select' output is _ _ AB _ _ (n+1%5==3) ...combed frame
>>> 'separatefields' output is AB AB ...2 frames (1/2
>>> height)
>>> 'scale=height=2*in_h' output is AB AB ...2 frames (full
>>> height)
>>> 'tblend' output is supposed to be AB ...1 frame
>>> OUT is supposed to be A A AB B B ...598 frames
>>> OUT is A A AB AB B B ...716 frames
>>> Conclusion: 'tblend' is outputting 2 frames instead of 1 frame.
>>
>> And that is completely correct for filter to do.
>>
>> If you not happy with that, write own code instead.
>
> From here: https://ffmpeg.org/ffmpeg-filters.html#blend
> "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."
>
> Seems to me that 'tblend' is supposed to output 1 frame.
Nope.
Enjoy living in your own world.
More information about the ffmpeg-user
mailing list