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

Но его удаление перестало работать для меня.

Другие вопросы по тегам