rendered paste body#!/usr/bin/python# gstreamer = 0.10.9# gnonlin = 0.10.8import gstimport pygstimport gobject# init the threadsgobject.threads_init()# the main loopmyMainloop = gobject.MainLoop()# the callbacksdef eos_cb(bus, msg): print '* END OF STREAM' myMainloop.quit() def on_pad_add(composition, pad): converterpad = myConverter.get_compatible_pad(pad, pad.get_caps()) pad.link(converterpad) # the source audio filesfile1 = '/Library/Music/file1.mp3'file2 = '/Library/Music/file2.mp3'# the output fileoutfile = '/tmp/outfile.ogg'# the pipelinemyPipeline = gst.Pipeline()myBus = myPipeline.get_bus()myBus.add_signal_watch()myBus.connect('message::eos', eos_cb)# the pipeline elementsmyComposition = gst.element_factory_make('gnlcomposition')myConverter = gst.element_factory_make('audioconvert')myEncoder = gst.element_factory_make('vorbisenc')myMux = gst.element_factory_make('oggmux')mySink = gst.element_factory_make('filesink')# composition sourcessource1 = gst.element_factory_make('gnlfilesource', 'source1')source2 = gst.element_factory_make('gnlfilesource', 'source2')# setup the filesinkmySink.set_property('location', outfile)# setup the composition padmyComposition.connect('pad-added', on_pad_add)# setup the composistion sourcessource1.set_property('location', file1)source1.set_property('start', 0)source1.set_property('duration', 120 * gst.SECOND)source1.set_property('media-start', 0)source1.set_property('media-duration', 120 * gst.SECOND)source2.set_property('location', file2)source2.set_property('start', 120)source2.set_property('duration', 120 * gst.SECOND)source2.set_property('media-start', 0)source2.set_property('media-duration', 120 * gst.SECOND)# add composition sourcesmyComposition.add(source1)myComposition.add(source2)# add the elements to the pipelinemyPipeline.add(myComposition)myPipeline.add(myConverter)myPipeline.add(myEncoder)myPipeline.add(myMux)myPipeline.add(mySink)# link elementsgst.element_link_many(myConverter, myEncoder, myMux, mySink)# lets do itmyPipeline.set_state(gst.STATE_PLAYING)myMainloop.run()