I have tried without success the following aproaches: First attempt: 1. Creating an Affine transform: https://mltframework.org/plugins/TransitionAffine/ 2. Setting a new filter property named "transition" with the content of transition properties (I modify before hand the rotation value: var aff = newFactoryFilter(p, "affine") var transition = newFactoryTransition(p, "affine") transition["fix_rotate_x"] = 100.0 aff.setProperties("transition", transition)
Other approach that I tried was: 1. creating some custom properties 2. setting that properties var aff = newFactoryFilter(p, "affine") var ap:Properties ap.data = mlt_properties_new() ap.set("fix_rotate_x", 100.0) aff.setProperties("transition", ap) Other approach: 1. Setting the property as follows var aff = newFactoryFilter(p, "affine") aff["transition.fix_rotate_x"] = 100.0 Could you modify the C language example that I posted to turn the image a number of degrees so that I can reproduce the approach in Nim? El sáb, 1 ene 2022 a las 17:43, Brian Matherly (<brian.mathe...@yahoo.com>) escribió: > The affine filter does not set any of the "transition.*" or > "use_normalized" properties when it is initialized. You need to set them > yourself: > > https://github.com/mltframework/mlt/blob/master/src/modules/plus/filter_affine.c#L157 > > In the absence of setting the "transition.*" properties, the encapsulated > affine transition will use its own default parameters. But those are not > reflected by the affine filter automatically: > > https://github.com/mltframework/mlt/blob/master/src/modules/plus/transition_affine.c#L694 > > In the absence of setting the "use_normalized" property, the properties > object will return "0" (false): > > https://github.com/mltframework/mlt/blob/9c3bb7d997a78fed3142c2ef95988623d21dce15/src/modules/plus/filter_affine.c#L98 > > ~Brian > > > > On Saturday, January 1, 2022, 10:10:25 AM CST, José María García Pérez < > josemaria.alk...@gmail.com> wrote: > > > I managed to write a pure C example, and I am getting something similar to > what I get with NIm: > // $ gcc ex02.c -I/usr/include/mlt-7 -lmlt-7 -o ex02 > // Inspired by: > https://stackoverflow.com/questions/62983626/how-to-compile-a-simple-mlt-example-in-c > #include <stdio.h> > #include <unistd.h> > #include <framework/mlt.h> > > int main( int argc, char *argv[] ) > { > // Initialise the factory > if ( mlt_factory_init( "/usr/lib/mlt-7" ) > 0 ) > { > mlt_profile p = mlt_profile_init("hdv_720_50p"); > // Create the default consumer > mlt_consumer hello = mlt_factory_consumer( p, "sdl2", NULL ); > mlt_properties_set_int(mlt_consumer_properties(hello), > "terminate_on_pause", 1); > > // Create via the default producer > mlt_producer world = mlt_factory_producer( p, NULL, argv[ 1 ] ); > > // Create filter > mlt_filter aff = mlt_factory_filter( p, "affine", NULL ); > > mlt_properties affprop = mlt_filter_properties(aff); > for(int i=0; i<mlt_properties_count(affprop); ++i) { > printf( "%d %s",i, mlt_properties_get_name(affprop, i ) ); > printf("\n"); > } > > // if (mlt_properties_exists(mlt_filter_properties(aff), "background") > > 0) { > // printf("background exists\n"); > // } > int res = mlt_service_attach(mlt_producer_service(world), aff); > > > // Connect the producer to the consumer > mlt_consumer_connect( hello, mlt_producer_service( world ) ); > > // Start the consumer > mlt_consumer_start( hello ); > > > // Wait for the consumer to terminate > while( !mlt_consumer_is_stopped( hello ) ) > sleep( 1 ); > > // Close the consumer > mlt_consumer_close( hello ); > > // Close the producer > mlt_producer_close( world ); > > // Close the factory > mlt_factory_close( ); > } > else > { > // Report an error during initialisation > fprintf( stderr, "Unable to locate factory modules\n" ); > } > > // End of program > return 0; > } > > With this example I get: > $ gcc ex02.c -I/usr/include/mlt-7 -lmlt-7 -o ex02 > $ ./ex02 example.mp4 > 0 _events > 1 mlt_type > 2 in > 3 out > 4 background > 5 _unique_id > 6 mlt_service > 7 _profile > > As I said, I cannot see neither "transition" nor "use_normalised". What > do I need to do in C language to make them appear? > > Kind regards, > José M. > > El vie, 31 dic 2021 a las 9:24, José María García Pérez (< > josemaria.alk...@gmail.com>) escribió: > > I think that my problem is that I am not handling properly nested > properties, but before that I don't see the keys a would expect for the > "affine" filter: > > When I print the keys for the affine filter, I get the following: > > _events > mlt_type > in > out > background > _unique_id > mlt_service > _profile > > I am not seeing neither "transition" nor "use_normalised" keys that I > would expect in accordance with > https://www.mltframework.org/plugins/FilterAffine/#transition. > > Any clue about what might be going on? > > > El jue, 30 dic 2021 a las 19:53, José María García Pérez (< > josemaria.alk...@gmail.com>) escribió: > > I was expecting a rotated image. The output was the video unmodified. > > El jue, 30 dic 2021 a las 19:52, Brian Matherly (<brian.mathe...@yahoo.com>) > escribió: > > > My first attempt wasn't very successful > > What result did you expect, and what was the actual result? > > On Thursday, December 30, 2021, 12:28:42 PM CST, José María García Pérez < > josemaria.alk...@gmail.com> wrote: > > > I wasn't aware about Shotcut doing so. Good to know. > > My first attempt wasn't very successful. I did the following: > # nim c --threads:on -r ex23_loader_video > import mlt > import os > let f = initFactory("/usr/lib/mlt-7") > > # Create the consumer > let p = newProfile("hdv_720_50p") > var sdl = newFactoryConsumer(p, "sdl2") > > sdl["terminate_on_pause"] = 1 # Stop the consumer when finished > > # Create via the default producer > var clip1 = p.newMedia( "./resources/sygic.mp4") > > > var filter = newFactoryFilter(p, "affine") > filter["transition.fill"] = 1 > filter["transition.distort"] = 0 > filter["transition.rect"] = "339.703 126.468 1430.3 953.532 1" > filter["transition.valign"] = "middle" > filter["transition.halign"] = "center" > filter["transition.threads"] = 0 > filter["transition.fix_rotate_x"] = 340.0 > > #[ > <property name="background">color:#00000000</property> > <property name="mlt_service">affine</property> > <property name="shotcut:filter">affineSizePosition</property> > <property name="transition.fill">1</property> > <property name="transition.distort">0</property> > <property name="transition.rect">339.703 126.468 1430.3 953.532 > 1</property> > <property name="transition.valign">middle</property> > <property name="transition.halign">center</property> > <property name="shotcut:animIn">00:00:00.000</property> > <property name="shotcut:animOut">00:00:00.000</property> > <property name="transition.threads">0</property> > <property name="transition.fix_rotate_x">340.304</property> > > ]# > clip1.attach(filter) > clip1 > sdl > > sdl.start # Start the consumer > > while not sdl.stopped: > sleep(1) > > Do you spot something obvious that might be wrong? > > El jue, 30 dic 2021 a las 18:52, Dan Dennedy (<d...@dennedy.org>) escribió: > > You can use a tool like Shotcut and study it’s XML output to understand > the properties for a filter. The affine filter is called Size, Position & > Rotate. To get the XML use File > Save. > > On Thu, Dec 30, 2021 at 9:47 AM José María García Pérez < > josemaria.alk...@gmail.com> wrote: > > I don't understand how to use the affine filter: > https://www.mltframework.org/plugins/FilterAffine/#transition > > Could you post a basic C example using it? It would be nice to cover both > the static and an animation case. > > I had the following example about using a filter using Nim: > import mlt, os > var f = initFactory() > > # Create the default consumer > var p = newProfile() > var sdl = newFactoryConsumer(p, "sdl2") > > # Create via the default producer > var clip = newFactoryProducer(p, resource = > "avformat:/home/jose/Descargas/sygic.mp4") > > var filter = newFactoryFilter(p, "frei0r.pixeliz0r") > filter["BlockSizeX"] = 0.1 > filter["BlockSizeY"] = 0.2 > > clip.attach( filter ) > clip > sdl > > # Start the consumer > sdl.start > > while not sdl.stopped: > sleep(1) > _______________________________________________ > 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