0

I have the following code that works and displays a video in a window. Can someone help me and give a simple python example on how I can extract the video resolution ( width x height ) of the video file ?

I am stuck on this since several days ... and any help would be appreciated.

import os
import Tkinter as tkinter

import gi
gi.require_version('Gst', '1.0')
gi.require_version('GstVideo', '1.0')
from gi.repository import Gst, GObject, GstVideo

def set_frame_handle(bus, message, frame_id):
    if not message.get_structure() is None:
        if message.get_structure().get_name() == 'prepare-window-handle':
            display_frame = message.src
            display_frame.set_property('force-aspect-ratio', True)
            display_frame.set_window_handle(frame_id)

window = tkinter.Tk()
window.title('')
window.geometry('400x300-30-100')

Gst.init(None)
GObject.threads_init()

display_frame = tkinter.Frame(window, bg='')
display_frame.place(relx = 0, rely = 0, anchor = tkinter.NW, relwidth = 1, relheight = 1)
frame_id = display_frame.winfo_id()
player = Gst.ElementFactory.make('playbin', None)
filepath = os.path.realpath('kbps.mp4')
filepath2 = "file:///" + filepath.replace('\\', '/').replace(':', '|')
print filepath2
player.set_property('uri', filepath2)

player.set_state(Gst.State.PLAYING)

bus = player.get_bus()
bus.enable_sync_message_emission()
bus.connect('sync-message::element', set_frame_handle, frame_id)

window.geometry('400x300+30+300')
window.update
window.mainloop()
A. Pace
  • 45
  • 1
  • 8

1 Answers1

0

Once the URI is set, set your pipeline into PAUSED state. Once that has been done, you should be prerolled, and can check the current caps on the gst-video-pad. For example:

self._playBin.set_state(Gst.State.PAUSED)
self._playBin.get_state(5000000000)
videoPad=self._playBin.emit("get-video-pad", 0)
videoPadCapabilities=videoPad.get_current_caps()(success, videoWidth) = \
videoPadCapabilities.get_structure(0).get_int("width")
(success, videoHeight) = \
videoPadCapabilities.get_structure(0).get_int("height") 
Samer Tufail
  • 1,835
  • 15
  • 25