import sys import gi gi.require_version('Gst', '1.0') gi.require_version('GES', '1.0') gi.require_version('GstPlayer', '1.0') gi.require_version('GLib', '2.0') from gi.repository import Gst, GES, GLib, GstPlayer if __name__ == "__main__": if len(sys.argv) < 2: print("You must specify a file URI") sys.exit(-1) Gst.init(None) GES.init() timeline = GES.Timeline.new_audio_video() layer = timeline.append_layer() start = 0 for uri in sys.argv[1:]: if not Gst.uri_is_valid(uri): uri = Gst.filename_to_uri(uri) clip = GES.UriClip.new(uri) clip.props.start = start layer.add_clip(clip) start += clip.props.duration player = GstPlayer player = GstPlayer.Player.new(None, GstPlayer.PlayerGMainContextSignalDispatcher.new(None)) player.set_uri("ges://") player.get_pipeline().connect("source-setup", lambda playbin, source: source.set_property("timeline", timeline)) loop = GLib.MainLoop() player.connect("end-of-stream", lambda x: loop.quit()) def error(player, err): loop.quit() print("Got error: %s" % err) sys.exit(1) player.connect("error", error) player.play() loop.run()