2011-09-14 13 views
1

私は、点滅することなく、あるクリップから次のクリップまでスムーズに再生するビデオが必要な、珍しいプログラムを作成しようとしています。この時点で、ストリームの終わりに、次のクリップへのパスを変更し、再び再生するように設定します。間に小さな瞬きを除いて、これはうまくいきますが、これは最適ではありません。GStreamerのビデオ上のトランジション?

私はビデオクリップ間のトランジションを作成することでこれを取り除くことができます。しかし、Python用のGStreamerチュートリアルが欠けているので...どうすればいいですか?

私はPython 2.7、PyGTK 2.24、およびGStreamerを使用しています。ここで

は私の現在のコードです:

import pygtk 
pygtk.require('2.0') 
import gtk, pango 
import pygst 
pygst.require('0.10') 
import gst 
import Trailcrest 
import os, sys 

class Video: 

    def __init__(self): 

     def on_message(bus, message): 
      if message.type == gst.MESSAGE_EOS: 
       # End of Stream 
       player.set_state(gst.STATE_NULL) 
       player.set_property("uri", "file://" + os.getcwd() + "/VID/BGA-AMB-HABT-001.ogv") 
       player.set_state(gst.STATE_PLAYING) 
      elif message.type == gst.MESSAGE_ERROR: 
       player.set_state(gst.STATE_NULL) 
       (err, debug) = message.parse_error() 
       print "Error: %s" % err, debug 

     def on_sync_message(bus, message): 
      if message.structure is None: 
       return False 
      if message.structure.get_name() == "prepare-xwindow-id": 
       gtk.gdk.threads_enter() 
       gtk.gdk.display_get_default().sync() 
       win_id = videowidget.window.xid 
       imagesink = message.src 
       imagesink.set_property("force-aspect-ratio", True) 
       imagesink.set_xwindow_id(win_id) 
       gtk.gdk.threads_leave() 

     win = gtk.Window() 
     win.set_resizable(False) 
     win.set_has_frame(False) 
     win.set_position(gtk.WIN_POS_CENTER) 

     fixed = gtk.Fixed() 
     win.add(fixed) 
     fixed.show() 

     pixbuf = gtk.gdk.pixbuf_new_from_file_at_size("IMG/IMG-AMB-HABT-001.png", 640, 480) 
     pixbuf = pixbuf.scale_simple(640, 480, gtk.gdk.INTERP_BILINEAR) 
     pixmap, mask = pixbuf.render_pixmap_and_mask() 
     img = gtk.Image() 
     img.set_from_pixmap(pixmap, mask) 
     fixed.put(img, 0, 0) 
     img.show() 

     videowidget = gtk.DrawingArea() 
     fixed.put(videowidget, 0, 0) 
     videowidget.set_size_request(640, 480) 
     videowidget.show() 

     # Setup GStreamer 
     player = gst.element_factory_make("playbin", "MultimediaPlayer") 
     bus = player.get_bus() 
     bus.add_signal_watch() 
     bus.enable_sync_message_emission() 
     #used to get messages that GStreamer emits 
     bus.connect("message", on_message) 
     #used for connecting video to your application 
     bus.connect("sync-message::element", on_sync_message) 
     player.set_property("uri", "file://" + os.getcwd() + "/VID/BGA-AMB-HABT-001.ogv") 
     player.set_state(gst.STATE_PLAYING) 

     win.show() 

def main(): 
    gtk.gdk.threads_init() 
    gtk.main() 
    return 0 

if __name__ == "__main__": 
    Video() 
    main() 
+1

なぜ* python *チュートリアルが必要ですか?私はそれがちょうどライブラリの周りの小さなPythonラッパーだと思います。 –

+0

トレンドがそのまま続くならば、Pythonは本質的にCとは非常に異なっているため、またPyGSTはときどきさまざまなやり方をしているため、Pythonベースのチュートリアルが必要になります。 – CodeMouse92

+0

さらに、私はPyGTKとの関連でそれを必要とします。 – CodeMouse92

答えて

関連する問題