> For sure this is due to my poor understanding of profile's behavior. It is also due to your low understanding of the MLT framework in general. Studying the XML is not just to learn the properties of a filter. It also helps you understand the coordination of MLT framework services. You are working from an assumption that MLT objects can have different profiles. But MLT is not designed for that. Look at any MLT XML file - there is one profile defined at the beginning and all services use that profile. > I'd like to apply the target profile at the very end of the process. I think you are going to have a difficult time with this approach. You might be able to get something to work for you, but MLT is not designed/tested to be used this way and there may not be many people who are interested in helping you use it outside of its original design intent. ~Brian On Friday, January 7, 2022, 09:16:52 AM CST, José María García Pérez <josemaria.alk...@gmail.com> wrote: Thanks Brian. My use case is explained in my prior message, https://sourceforge.net/p/mlt/mailman/message/37413387/ As I said, what I am aiming for is for creating functions where I can compose what I do with videos. My final profile will be something standard: 16:9 720p or 1080p with 25 or 50 fps. But I am looking for some freedom about how I create intermediate videos in the process. For example, I load a video (720x360 16:9). I stack them vertically (so I get 720x720 16:18). I'd like this to be feel by the consumer as complete new video with that information (720x720 16:18) so that I can add it to the final consumer with the standard profile (lets say 720p and 16:9), but the "original" video (720x720 16:18) is properly rescaled. Let me show with an example, the sort of problems that I am facing. The following code:1. Loads twice the same video2. Applies grayscale to one of them3. Stack both videos vertically returning the tractor's producer in this example4. I aim to show it with the profile: hdv_720p_25```nimimport mlt proc main = var f = initFactory() var p = newProfile() var v1 = p.newMedia("./resources/big_buck_bunny_360p.mp4") var v2 = p.newMedia("./resources/big_buck_bunny_360p.mp4") var gray = p.newFactoryFilter("grayscale") v2.attach(gray) # Call the function to stack vertically two videos. var v = stackVertically( v1, v2 ) # Consumer using the new calculated profile var profile = newProfile("hdv_720p_25") var sdl = profile.newFactoryConsumer( "sdl2" ) sdl["terminate_on_pause"] = 1 # From tractor to SDL2 v > sdl # Start the consumer sdl.run main()``` The result is: https://i.imgur.com/b5ASEJg.pngwhere the videos are properly stacked, but the profile for SDL (720p 16:9) is not honored as I would expect. For sure this is due to my poor understanding of profile's behavior. I'd like to apply the target profile at the very end of the process.
El vie, 7 ene 2022 a las 3:00, Brian Matherly (<brian.mathe...@yahoo.com>) escribió: I would suggest: 1) Create a producer to open V1 (it does not matter the profile)2) Query V1 for the size3) Close V1 (delete the producer)4) Create a producer to open V2 (it does not matter the profile)5) Query V2 for the size6) Close V2(delete the producer)7) Calculate the profile that you want based on the size you queried from V1 and V28) Create a profile with the new calculated profile9) Proceed to create producers, tractors and consumers all using the same profile I do not understand the use case you are working under. Typically people have a target profile that is driven by the device, platform, quality or player that the file will be used on. And then they work everything else to fit within that profile. But your profile is being calculated from arbitrary sized sources. Maybe this does not apply to you because any non-standard profile will work for you. But this is uncommon in my experience. ~Brian On Thursday, January 6, 2022, 03:53:40 AM CST, José María García Pérez <josemaria.alk...@gmail.com> wrote: Right now, when I stack videos vertically, I output the Tractor and the Profile: "tuple[tr:Tractor; p:Profile] "proc stackVertically*( v1,v2:Producer ):tuple[tr:Tractor; p:Profile] Later I apply the returned profile to the consumer: # Call the function to stack vertically two videos. # The tractor and new profile are returned var (newProducer, profile) = stackVertically( v1, v2 ) # Consumer using the new calculated profile var sdl = profile.newFactoryConsumer( "sdl2" ) sdl["terminate_on_pause"] = 1 # From tractor to SDL2 newProducer > sdl What I would like to do is to apply the profile to the tractor. Like moving the consumer within the stackVertically function and then using that consumer as a producer. I see that there is this plugin to use a consumer as a producer: https://www.mltframework.org/plugins/ProducerConsumer/ but it is not very clear how I should use it and if it is appropriate for this purpose. On the other hand, I wonder if I should get the producer from the tractor and set "width", "height", "aspect_ratio". I am trying this last option without success. Any suggestion is welcomed. _______________________________________________ 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