Exemple #1
0
class VideoPlayerApp(App):
    def build(self):
        filename = 'videoplayback.avi'
        self.layout = GridLayout(cols=2)
        self.video = VideoPlayer(source=filename, state='play')
        self.layout.add_widget(self.video)

        button1 = Button(text='Play video1', font_size=14)
        button1.bind(on_press=self.play_video1)
        button1.size_hint = (0.2, 0.1)
        self.layout.add_widget(button1)
        button2 = Button(text='pauza video1', font_size=14)
        button2.size_hint = (0.2, 0.1)
        button2.bind(on_press=self.pauza_video1)
        self.layout.add_widget(button2)
        button3 = Button(text='stop video1', font_size=14)
        button3.size_hint = (0.2, 0.1)
        button3.bind(on_press=self.stop_video1)
        self.layout.add_widget(button3)
        button4 = Button(text='la 1/3 din film', font_size=14)
        button4.size_hint = (0.2, 0.1)
        button4.bind(on_press=self.un_sfert_video1)
        self.layout.add_widget(button4)
        button5 = Button(text='la 2/3 din film', font_size=14)
        button5.size_hint = (0.2, 0.1)
        button5.bind(on_press=self.doua_sferturi_video1)
        self.layout.add_widget(button5)
        button6 = Button(text='volum : -', font_size=14)
        button6.size_hint = (0.2, 0.1)
        button6.bind(on_press=self.minus_video1)
        self.layout.add_widget(button6)
        button7 = Button(text='volum : +', font_size=14)
        button7.size_hint = (0.2, 0.1)
        button7.bind(on_press=self.plus_video1)
        self.layout.add_widget(button7)
        return self.layout

    def play_video1(self, buton):
        self.video.state = 'play'

    def pauza_video1(self, buton):
        self.video.state = 'pause'

    def stop_video1(self, buton):
        self.video.state = 'stop'

    def un_sfert_video1(self, buton):
        self.video.seek(0.33)

    def doua_sferturi_video1(self, buton):
        self.video.seek(0.66)

    def minus_video1(self, buton):
        if (self.video.volume > 0):
            self.video.volume -= 0.1

    def plus_video1(self, buton):
        if (self.video.volume < 1):
            self.video.volume += 0.1
Exemple #2
0
class VideoPlayerApp(App):

    def build(self):
        filename = 'videoplayback.avi'
        self.layout = GridLayout(cols=2)
        self.video =  VideoPlayer(source=filename, state='play')
        self.layout.add_widget(self.video)
        
        button1 = Button(text='Play video1', font_size=14)
        button1.bind(on_press=self.play_video1)
        button1.size_hint=(0.2,0.1)
        self.layout.add_widget(button1)
        button2 = Button(text='pauza video1', font_size=14)
        button2.size_hint=(0.2,0.1)
        button2.bind(on_press=self.pauza_video1) 
        self.layout.add_widget(button2)
        button3 = Button(text='stop video1', font_size=14)
        button3.size_hint=(0.2,0.1)
        button3.bind(on_press=self.stop_video1) 
        self.layout.add_widget(button3)
        button4 = Button(text='la 1/3 din film', font_size=14)
        button4.size_hint=(0.2,0.1)
        button4.bind(on_press=self.un_sfert_video1) 
        self.layout.add_widget(button4)
        button5 = Button(text='la 2/3 din film', font_size=14)
        button5.size_hint=(0.2,0.1)
        button5.bind(on_press=self.doua_sferturi_video1) 
        self.layout.add_widget(button5)
        button6 = Button(text='volum : -', font_size=14)
        button6.size_hint=(0.2,0.1)
        button6.bind(on_press=self.minus_video1) 
        self.layout.add_widget(button6)
        button7 = Button(text='volum : +', font_size=14)
        button7.size_hint=(0.2,0.1)
        button7.bind(on_press=self.plus_video1) 
        self.layout.add_widget(button7)
        return self.layout
    
    def play_video1 (self,buton):
        self.video.state='play'
    def pauza_video1 (self,buton):
        self.video.state='pause'
    def stop_video1 (self,buton):
        self.video.state='stop'
    def un_sfert_video1 (self,buton):
        self.video.seek(0.33)
    def doua_sferturi_video1 (self,buton):
        self.video.seek(0.66)
    def minus_video1 (self,buton):
        if (self.video.volume>0):
            self.video.volume -=0.1
    def plus_video1 (self,buton):
        if (self.video.volume<1):
            self.video.volume +=0.1
class VideoShotApp(App):
    def build(self):
        return Builder.load_file("ui.kv")

    def on_start(self, *args):
        self.videoplayer = VideoPlayer(source="", allow_fullscreen=False)
        self.root.ids.mainfloat.add_widget(self.videoplayer)
        keyboard.on_press_key("right", self.rightpressed)
        keyboard.on_press_key("left", self.leftpressed)
        keyboard.on_press_key("space", self.spacepressed)

    def rightpressed(self, *args):
        new_value = (((self.videoplayer.position - 0) / (self.videoplayer.duration - 0)) * (1 - 0) + 0) + 0.0019
        self.videoplayer.seek(new_value, precise=True)

    def leftpressed(self, *args):
        new_value = (((self.videoplayer.position - 0) / (self.videoplayer.duration - 0)) * (1 - 0) + 0) - 0.0019
        self.videoplayer.seek(new_value, precise=True)

    def spacepressed(self, *args):
        if self.videoplayer.state == "stop" or self.videoplayer.state == "pause":
            self.videoplayer.state = "play"

        elif self.videoplayer.state == "play":
            self.videoplayer.state = "pause"

    def getFrame(self, ms):
        self.vidcap.set(cv2.CAP_PROP_POS_MSEC, ms)
        hasFrames, image = self.vidcap.read()
        savewindow = Tk()
        savewindow.geometry("0x0")
        filename = filedialog.asksaveasfilename(title='Save Image As',
                                                filetypes=(('JPEG File', '*.jpg'), ('All Files', '*.*')))
        if filename.endswith(".jpg"):
            filename = filename[:-4]
            
        cv2.imwrite(filename + ".jpg", image)  # Save frame as JPG file
        savewindow.destroy()
        return hasFrames

    def screenshot(self, *args):
        ms = self.videoplayer.position * 1000
        self.getFrame(ms)
        
    def loadvideo(self, *args):
        openwindow = Tk()
        openwindow.geometry("0x0")
        openfilename = filedialog.askopenfilename(title="Choose a Video File",
                                                             filetypes=(("MP4 Files", "*.mp4"), ('All Files', '*.*')))
        self.videoplayer.source = openfilename
        self.video = openfilename
        self.vidcap = cv2.VideoCapture(openfilename)
        openwindow.destroy()
Exemple #4
0
class AppBase(RelativeLayout):
    def __init__(self, filename, **kwargs):
        super(AppBase, self).__init__(**kwargs)
        self.padding = 20

        self._keyboard = Window.request_keyboard(self._keyboard_closed, self, 'text')
        self._keyboard.bind(on_key_down=self._on_keyboard_down)

        self.v = VideoPlayer(source=filename, state='stop')
        self.add_widget(self.v)

        self.label = Label()
        self.label.pos_hint = {'center_x': .8, 'center_y': .8}
        self.label.color = (0, 255, 0, 1)
        self.label.font_size = '30sp'
        self.add_widget(self.label)
        self.rect_label = None

        self.time_label = Label(pos_hint={'center_x': .3, 'center_y': .2},
                                font_size='20sp',
                                color=(1, 1, 1, 1))
        self.add_widget(self.time_label)

        self.rect_label = Label(pos_hint={'center_x': .5, 'center_y': .5},
                                text='',
                                font_size='50sp',
                                color=(1, 1, 1, 1))
        self.add_widget(self.rect_label)

        self.rect = None
        self.value = 0.0

        self.last_position = None
        self.frameGaps = collections.deque([0.1], maxlen=10)
        self.framegap = 0.0
        self.updated = False
        self.customspeed = False
        self.speed = 2.0

        self.draw_rect = False
        self.bind(pos=self.on_resize, size=self.on_resize)

    def _keyboard_closed(self):
        print('My keyboard have been closed!')
        self._keyboard.unbind(on_key_down=self._on_keyboard_down)
        self._keyboard = None

    def _on_keyboard_down(self, keyboard, keycode, text, modifiers):
        # print 'The key', keycode[1], 'have been pressed'
        # print(' - text is %r' % text)
        # print(' - modifiers are %r' % modifiers)

        if keycode[1] == 'h':
            self.draw_rect = True
        elif keycode[1] == 'g':
            self.draw_rect = False
        elif keycode[1] == 's':
            self.custom_play_pause()
        elif keycode[1] == 'left':
            self.play_pause(force=True)
            self.step_video(False)
            self.label.text = "<< Step backward"
        elif keycode[1] == 'right':
            self.play_pause(force=True)
            self.step_video(True)
            self.label.text = "Step forward >>"
        elif keycode[1] == 'spacebar':
            self.play_pause()
        elif keycode[1] == 'enter':
            self.v.state = 'stop'
            self.v.seek(0.0)
            self.label.text = ''
        elif keycode[1] == 'escape':
            sys.exit(1)
        elif keycode[1] == 'pageup':
            if self.speed < 16.0:
                self.speed *= 2.0
                if self.speed == 1.0:
                    self.speed = 2.0
        elif keycode[1] == 'pagedown':
            if self.speed > 1.0 / 16.0:
                self.speed /= 2.0
                if self.speed == 1.0:
                    self.speed = 0.5
        # Return True to accept the key. Otherwise, it will be used by
        # the system.
        return True

    def play_pause(self, force=False):
        if force:
            Clock.unschedule(self.update)
            Clock.unschedule(self.custom_update)
            self.v.state = 'pause'
            self.customspeed = False
            self.label.text = 'Pause ||'
        else:
            if self.customspeed:
                self.custom_play_pause()
            if self.v.state == 'play':
                self.v.state = 'pause'
                Clock.unschedule(self.update)
                self.label.text = 'Pause ||'
            else:
                self.v.state = 'play'
                Clock.schedule_interval(self.update, 0.0)  # Schedule at max interval (once per frame)
                self.label.text = 'Play >'

    def custom_play_pause(self):
        if self.v.state == 'play':
            self.play_pause()
        if self.customspeed is False:
            self.customspeed = True
            Clock.schedule_interval(self.custom_update, 0.0)
        else:
            self.customspeed = False
            Clock.unschedule(self.custom_update)
            self.label.text = 'Pause ||'

    def step_video(self, direction, step_size=0.05):
        if direction:
            self.value = (self.v.position + step_size) / self.v.duration
        else:
            self.value = (self.v.position - step_size) / self.v.duration
        self.v.seek(self.value)
        self.tickReset()
        self.on_draw()

    def on_draw(self):
        if self.rect is None and self.draw_rect:
            with self.canvas:
                Color(1, 0, 0, 0.3, mode='rgba')
                self.rect = Rectangle(pos=(self.padding, self.padding),
                                      size=(self.width - 2 * self.padding, self.height - 2 * self.padding))
                self.rect_label.text = 'Objects'
        elif self.rect is not None and not self.draw_rect:
            self.canvas.remove(self.rect)
            self.rect_label.text = ''
            self.rect = None
            # self.canvas.clear()

        self.time_label.text = "Time: %.4f" % self.v.position
        # print self.rect_label is None

    def on_resize(self, *args):
        if self.rect is not None:
            self.rect.pos = (self.padding, self.padding)
            self.rect.size = (self.width - 2 * self.padding, self.height - 2 * self.padding)

    def tick(self):
        if self.last_position is None:
            self.last_position = self.v.position
        else:
            if self.v.position > self.last_position:
                self.frameGaps.append(self.v.position - self.last_position)
                self.last_position = self.v.position
                self.updated = True

    def _frameGap(self):
        if self.updated:
            self.framegap = np.mean(self.frameGaps)
            self.updated = False

    def tickReset(self):
        '''To prevent frame calculation error when custom play'''
        self.last_position = None

    def update(self, dt):
        self.tick()
        self.on_draw()

    def custom_update(self, dt):
        if self.v.position + 0.5 > self.v.duration:
            self.tickReset()
            self.play_pause()
        else:
            self._frameGap()
            self.step_video(True, step_size=self.framegap * self.speed)
            if self.speed > 1:
                self.label.text = 'Custom speed x %d ' % int(self.speed)
            else:
                self.label.text = 'Custom speed x 1/%d ' % int(1/self.speed)