[FFmpeg-user] ffmpeg architecture question

Edward Park kumowoon1025 at gmail.com
Mon Apr 20 13:20:01 EEST 2020


Hey,

>> I don't understand what you mean by "recursively".
> 
> Haven't you heard? There's no recursion. There's no problem. The 'blend' filter just has some fun undocumented features. Hours and hours, days and days of fun. So much fun I just can't stand it. Too much fun.

There's no recursion because a filtergraph is typically supposed to be a directed acyclic graph, there is no hierarchy to traverse. Blend not specifying which of the two input frames it takes the timestamps from is true enough, except the only reason it poses a problem is because it leads to another filter getting two frames with the exact same timestamp, as they were split earlier on in the digraph. And it's not obvious by any means, but you can sort of deduce that blend will take the timestamps from the first input stream, blend having a "top" and "bottom" stream (I mean on the z-axis, lest this cause any more confusion) kind of implies similar operation to the overlay filter applied on the two inputs that each go through some other filter, with an added alpha channel, and the description for the overlay filter says the first input is the "main" that the second "overlay" is composited on.

On a different note, in the interest of making the flow of frames within the filtergraph something simple enough to picture using my rather simple brain, this is my attempt at simplifying a filtergraph you posted a while ago, I'm not sure if it's accurate, but I can't tell if I'm reproducing the same result even when frame stepping (because to compare frame by frame, I had to compare it to another telecine, and the only one I'd seen is the 3-2 pulldown. And I really cannot tell the difference when playing at speed, I can tell them apart if I step frame by frame, but not identify which is which, had to draw a label on them)

Could you see if it actually does do the same thing? 
telecine=pattern=5,select='n=2:e=ifnot(mod(mod(n,5)+1,3),1,2)'[C],split[AB_DE],select='not(mod(n+3,4))'[B],[C][B]blend[B/C],[AB_DE][B/C]interleave

The pads are labeled according to an ABCDE pattern at the telecine, I don't know if that makes sense or is correct at all.
It does make it possible to 4up 1920x1080 streams with different filters and compare them in real time without falling below ~60fps. I think the fact that "split" actually copies a stream, while "select" splits a stream is kind of confusing now. "Select" also adds another stream of video but I think splitting then using select with boolean expressions to discard the not selected frames has to be wasteful.

Regards,
Ted Park


More information about the ffmpeg-user mailing list