Honestly I don't understand that comment. The documentation is clearly insufficient. The framework design just gives you a glimpse of the ideas; it doesn't even mention the word profile https://mltframework.org/docs/framework/. The demos are more oriented to the usage of melt. melt.c is not the best learning source either.
So honestly I am bit confused, and this is the reason why I am asking for help. I am not asking for the code solution, but for some direction about the approach to follow. El mié, 5 ene 2022 a las 20:43, Dan Dennedy (<d...@dennedy.org>) escribió: > I am not going to help further. You need to learn more outside of the code. > > On Wed, Jan 5, 2022 at 11:06 AM José María García Pérez < > josemaria.alk...@gmail.com> wrote: > >> Could you explain a bit further? >> >> I mean: >> 1. Create profile: p >> 2. Create producer: video1 (with profile p) >> 3. Create producer: video2 (with profile p) >> 4. Read the frame sizes >> 5. Create a new profile with the size of both videos stacked vertically >> 6. Create the consumer with that new profile >> >> So far I am getting funny sizes. >> >> I declared the following function: >> 1. Creates a new profile >> 2. Resize the profile with the size of both videos >> 3. Creates a new tractor and adds the videos as two separated tracks. >> 4. I use an affine filter and applies "oy=height1" to the second track. >> 5. I apply the transition "addition" in order to make both videos visible. >> proc stackVertically( v1,v2:Producer ):tuple[tr:Tractor; p:Profile] = >> # Get an appropriate profile >> var profile = newProfile() >> >> var frame1 = v1.getFrame(0) >> var (width1,height1) = frame1.getImage() >> var frame2 = v2.getFrame(0) >> var (width2,height2) = frame2.getImage() >> profile.setWidth(width1 + width2) >> profile.setHeight(height1 + height2) >> >> # Create the tractor >> var tr = newTractor() >> >> tr.connect( v1, 0 ) # We use the playlist as track0 >> tr.connect( v2, 1 ) >> var aff = newFactoryFilter(profile, "affine") >> aff["transition.oy"] = height1 >> tr.plant(aff, 1) >> >> var compose = profile.newFactoryTransition("frei0r.addition") >> tr.plant(compose, 0, 1) >> return (tr, profile) >> >> >> In order to use this function I do the following: >> 1. Read two videos (in this case I use the same video) >> 2. stack them vertically: the result is the tractor as a producer and the >> new profile >> 3. I create an SDL2 base on the new profile >> 4. Connect the tractor to SDL >> proc main = >> var f = initFactory() >> var p = newProfile("hdv_720_50p") >> var v1 = p.newMedia("./resources/big_buck_bunny_720p_2mb.mp4") >> var v2 = p.newMedia("./resources/big_buck_bunny_720p_2mb.mp4") >> >> var (newProducer, profile) = stackVertically( v1,v2 ) >> >> # Consumer >> var sdl = profile.newFactoryConsumer( "sdl2" ) >> sdl["terminate_on_pause"] = 1 >> >> # From tractor to SDL2 >> #v1.attach(aff1) >> newProducer > sdl >> >> # Start the consumer >> sdl.run >> >> >> The result is: https://i.imgur.com/eESDdJg.jpg >> >> >> El mié, 5 ene 2022 a las 18:28, Dan Dennedy (<d...@dennedy.org>) escribió: >> >>> >>> On Wed, Jan 5, 2022 at 9:22 AM José María García Pérez < >>> josemaria.alk...@gmail.com> wrote: >>> >>>> What is the proper way of stacking videos vertically? >>>> >>>> For example: >>>> video1 >>>> --------- >>>> video2 >>>> >>>> so that I can later scale it and move it around in the profile. >>>> >>>> Right now I am using affine (scaling down and then positioning it >>>> vertically). But the result is something like: >>>> video1 | black >>>> ------------------ >>>> video2 | black >>>> >>>> Basically I am looking how to get a new video which is: (width) x >>>> (2*height) >>>> >>>> You need to make a custom profile. >>> >>
_______________________________________________ Mlt-devel mailing list Mlt-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mlt-devel