#!/usr/bin/python # gstreamer = 0.10.9 # gnonlin = 0.10.8 import gst import pygst import gobject # init the threads gobject.threads_init() # the main loop myMainloop = gobject.MainLoop() # the callbacks def 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 files file1 = '/Library/Music/file1.mp3' file2 = '/Library/Music/file2.mp3' # the output file outfile = '/tmp/outfile.ogg' # the pipeline myPipeline = gst.Pipeline() myBus = myPipeline.get_bus() myBus.add_signal_watch() myBus.connect('message::eos', eos_cb) # the pipeline elements myComposition = 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 sources source1 = gst.element_factory_make('gnlfilesource', 'source1') source2 = gst.element_factory_make('gnlfilesource', 'source2') # setup the filesink mySink.set_property('location', outfile) # setup the composition pad myComposition.connect('pad-added', on_pad_add) # setup the composistion sources source1.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 * gst.SECOND) source2.set_property('duration', 120 * gst.SECOND) source2.set_property('media-start', 0) source2.set_property('media-duration', 120 * gst.SECOND) # add composition sources myComposition.add(source1) myComposition.add(source2) # add the elements to the pipeline myPipeline.add(myComposition) myPipeline.add(myConverter) myPipeline.add(myEncoder) myPipeline.add(myMux) myPipeline.add(mySink) # link elements gst.element_link_many(myConverter, myEncoder, myMux, mySink) # lets do it myPipeline.set_state(gst.STATE_PLAYING) myMainloop.run()