[FFmpeg-user] fieldmatch "marked as interlaced" -- doesn't work
Mark Filipak (ffmpeg)
markfilipak at bog.us
Thu Mar 18 08:54:09 EET 2021
On 2021-03-18 01:55, pdr0 wrote:
> Mark Filipak (ffmpeg) wrote
>> I hoped that "marked as interlaced" [1] meant that
>>
>> 'select=expr=not(eq(interlace_type\,TOPFIRST)+eq(interlace_type\,BOTTOMFIRST))'
>> [2]
>>
>> would work. However, the 'select' doesn't work. I'm counting on the
>> 'select' working -- not working
>> is a complete show stopper.
>>
>> Is there some other species of "marked as interlaced" that will make the
>> 'select' work?
>>
>> Thanks,
>> Mark.
>>
>> [1] From https://ffmpeg.org/ffmpeg-filters.html#fieldmatch
>> "The separation of the field matching and the decimation is notably
>> motivated by the possibility of inserting a de-interlacing filter
>> fallback between the two. If the source has mixed telecined and real
>> interlaced content, fieldmatch will not be able to match fields for
>> the interlaced parts. But these remaining combed frames will be
>> *marked as interlaced*, and thus can be de-interlaced by a later
>> filter such as yadif before decimation."
>>
>> [2] From https://ffmpeg.org/ffmpeg-filters.html#select_002c-aselect
>> "interlace_type (video only)
>> " The frame interlace type. It can assume one of the following values:
>> " PROGRESSIVE
>> " The frame is progressive (not interlaced).
>> " TOPFIRST
>> " The frame is top-field-first.
>> " BOTTOMFIRST
>> " The frame is bottom-field-first."
>
> Try using combmatch=full for fieldmatch
Really? ...I didn't think of that. The default is 'combmatch=sc'. I assumed that added scene change
logic to 'full'.
> In this zip file is a sample test video "cadence.mp4". It has 23.976p
> content, 29.97i (59.94 fields/sec interlaced) content, and 29.97p content,
> all in a 29.97i stream. (There are many others cadences, but those are the 3
> most common)
> https://www.mediafire.com/file/m46kc4p1uvt7ae3/cadence_tests.zip/file
Thanks! That was very kind of you! I'll give it a look.
My current test video is very mixed (and mixed-up) content:
29.970fps(24pps) ...telecined (movie clips)
+ 29.970fps(59.940sps) ...scan-interlaced (interviews)
+ 29.970fps(29.970pps) ...progressive (interviews)
+ 29.970fps(mutt) ...[1] (location shots)
[1] A mess of nearly random combed, progressive, and repeated frames (amazingly, it looks quite good
on-screen).
The video is from an actual Blu-ray -- would you believe it?
Here is my current filter complex (awaiting methods to 'split' the stream into secondary streams):
settb=expr=1/720000,setpts=N*24024,fps=30000/1001,
fieldmatch,split=3[1][2][3],
[1]select=expr=eq(interlace_type\,TOPFIRST)+eq(interlace_type\,BOTTOMFIRST),yadif,telecine=pattern=8[4],
[2]select=?????,telecine=pattern=8[5],
[3]select=expr=not(eq(interlace_type\,TOPFIRST)+eq(interlace_type\,BOTTOMFIRST)),decimate,telecine=pattern=2,telecine=pattern=55[6],
[4][5][6]interleave=nb_inputs=3
> In this example for -vf select after fieldmatch, the 2 branches are
> "progressive" and "not progressive". You can experiment with split and
> various processing with interleave in the filter chain
Really?! I tried 'eq(interlace_type\,PROGRESSIVE)' in my first attempt and, when that didn't work,
went with functions of 'TOPFIRST' & 'BOTTOMFIRST'. Hmmm... I guess it's time to download the latest
ffmpeg git and try again.
BTW, Tonight I submitted Subject: "'streampatterns' -- a proposed stream structure filter". I think
it would make for an excellent, general purpose solution. I'm eager to read what the folks think of
it. I could do all the algorithm coding but I don't write 'C' (only 'C' syntax), so have never
compiled 'C' and don't know how to use structs. I'd need help with the integration.
Thanks Again,
Mark.
--
Robotics will make bitcoin worthless. Why? Visualize millions of solar powered, self-replicating
bitcoin miners. How much would they be worth? Bitcoin maintains marginal value solely via built-in
inflation. That essentially makes bitcoin a Ponzi scheme, and it will be shut down by governments.
More information about the ffmpeg-user
mailing list