For this scenario (and any like it), I strongly recommend to not start with 
code. Even for my own coding projects I do not start with code. Start with 
Shotcut or Kdenlive and use the tool to visually achieve what you want. After 
you get the result that you are looking for in the graphical tool, examine the 
resulting MLT file to learn about how various properties interact.
~Brian

    On Wednesday, January 5, 2022, 04:44:33 PM CST, José María García Pérez 
<josemaria.alk...@gmail.com> wrote:  
 
 I managed to do it thanks to wikipedia where it clearly explains the 
difference between SAR, DAR and PAR. 
https://en.wikipedia.org/wiki/Pixel_aspect_ratio
For the record, in case this can help others:SAR= 720/360 = 2 (calculated with 
the resolution)
DAR=16/9 (how we want the image to be displayed)PAR=DAR/SAR = 16/18 (pixel 
aspect ratio is the "sample aspect")

I had to adjust the sample aspect.  profile.setWidth(width1) 
profile.setHeight(height1 + height2) profile.setSampleAspect(16,18) 
profile.setDisplayAspect(16,18) 
The result: https://i.imgur.com/upS5pjC.png


El mié, 5 ene 2022 a las 22:13, José María García Pérez 
(<josemaria.alk...@gmail.com>) escribió:

Thanks Péter. 
I think my issue is more related with the "aspect ratio" and/or "display ratio" 
of the profile, producer (the video itself) and the consumer. 
With this: profile.setWidth(width1) profile.setHeight(height1 + height2) 
profile.setWidth(profile.width) profile.setHeight(profile.height)  
profile.setSampleAspect(1,1) profile.setDisplayAspect(16,18) 
I am getting: https://i.imgur.com/UidhlNX.png
I am using now a smaller video (720x360) with display aspect ratio 16:9 and 
25fps. 


El mié, 5 ene 2022 a las 21:02, Péter Hudoba (<hudi1...@gmail.com>) escribió:

Hi!
I am a noob, but I think the problem: if you use "hdv_720_50p" profile in your 
main function and create a consumer with that profile, you won't have a big 
enough consumer.
https://www.mltframework.org/docs/profiles/

Best regards,Hudi
José María García Pérez <josemaria.alk...@gmail.com> ezt írta (időpont: 2022. 
jan. 5., Sze, 20:54):

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: p2. Create producer: video1 (with profile p)3. Create 
producer: video2 (with profile p)4. Read the frame sizes5. Create a new profile 
with the size of both videos stacked vertically6. Create the consumer with that 
new profile
So far I am getting funny sizes.
I declared the following function: 1. Creates a new profile2. Resize the 
profile with the size of both videos3. 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 profile3. I create an SDL2 base on the new profile4. 
Connect the tractor to SDLproc 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



_______________________________________________
Mlt-devel mailing list
Mlt-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mlt-devel
  
_______________________________________________
Mlt-devel mailing list
Mlt-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mlt-devel

Reply via email to