GStreamer Python Playbin несколько видео-фильтров
Я использую playbin
с помощью gst-python
:
player = Gst.ElementFactory.make("playbin", None)
player.set_property("uri", "file:///tmp/big_buck_bunny_720p_30mb.mp4")
Теперь я добавлю несколько видео-фильтров:
videocrop = Gst.ElementFactory.make('videocrop', None)
videocrop.set_property('top', 300)
Это красиво обрезает видео. Я также могу сделать это с videoflip
, Тем не менее, когда я пытаюсь применить несколько фильтров, используя Bin
у меня конвейер не работает. Код, который я использую:
video_filters = Gst.Bin("video_filters")
videocrop = Gst.ElementFactory.make('videocrop', None)
videocrop.set_property('top', 300)
video_filters.add(videocrop)
videoflip = Gst.ElementFactory.make('videoflip', None)
videoflip.set_property('method', 'clockwise')
video_filters.add(videoflip)
videocrop.link(videoflip)
player.set_property('video-filter', video_filters)
Трубопровод не будет играть. Что я делаю неправильно?
1 ответ
Привет, поэтому я сомневаюсь, что это самое оптимальное решение, но у меня сработало что-то вроде следующего.
video_filters = Gst.Bin("video_filters")
videocrop = Gst.ElementFactory.make('videocrop', None)
videocrop.set_property('top', 300)
video_filters.add(videocrop)
videoflip = Gst.ElementFactory.make('videoflip', None)
videoflip.set_property('method', 'clockwise')
video_filters.add(videoflip)
videocrop.link(videoflip)
sink_pad = videocrop.sinkpad
source_pad = videoflip.srcpad
ghostpad_sink = Gst.GhostPad.new("sink", sink_pad)
ghostpad_source = Gst.GhostPad.new("src", source_pad)
video_filters.add_pad(ghostpad_sink)
video_filters.add_pad(ghostpad_source)
player.set_property('video-filter', video_filters)
В журнале отладки что-то говорится о том, что панель-призрак не нужна.
gstutils.c:1587:prepare_link_maybe_ghosting: filter-convert and video_filters in same bin, no need for ghost pads
Но его удаление перестало работать для меня.