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()
なぜ* python *チュートリアルが必要ですか?私はそれがちょうどライブラリの周りの小さなPythonラッパーだと思います。 –
トレンドがそのまま続くならば、Pythonは本質的にCとは非常に異なっているため、またPyGSTはときどきさまざまなやり方をしているため、Pythonベースのチュートリアルが必要になります。 – CodeMouse92
さらに、私はPyGTKとの関連でそれを必要とします。 – CodeMouse92