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

Reply via email to