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
<[email protected]> 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
(<[email protected]>) 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 (<[email protected]>) 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 <[email protected]> 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 (<[email protected]>) 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
<[email protected]> 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 (<[email protected]>) escribió:
On Wed, Jan 5, 2022 at 9:22 AM José María García Pérez
<[email protected]> 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
[email protected]
https://lists.sourceforge.net/lists/listinfo/mlt-devel
_______________________________________________
Mlt-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mlt-devel
_______________________________________________
Mlt-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mlt-devel