From 48eb88ef549002c66b59ba96418f77fb9515222e Mon Sep 17 00:00:00 2001 From: jaseg Date: Thu, 3 Aug 2017 12:37:55 +0200 Subject: Add pillow-based screenshot_raw command --- README.rst | 6 ++++++ mpv.py | 11 +++++++++++ 2 files changed, 17 insertions(+) diff --git a/README.rst b/README.rst index a06509a..a1f0987 100644 --- a/README.rst +++ b/README.rst @@ -90,6 +90,12 @@ Advanced Usage print('THERE IS NO ESCAPE') player.register_key_binding('q', my_q_binding) + def my_s_binding(state, key): + if state[0] == 'd': + pillow_img = player.screenshot_raw() + pillow_img.save('screenshot.png') + player.register_key_binding('s', my_s_binding) + player.play('https://youtu.be/DLzxrzFCyOs') player.wait_for_playback() diff --git a/mpv.py b/mpv.py index 27af879..5348d8f 100644 --- a/mpv.py +++ b/mpv.py @@ -659,6 +659,17 @@ class MPV(object): """ Mapped mpv screenshot_to_file command, see man mpv(1). """ self.command('screenshot_to_file', filename.encode(fs_enc), includes) + def screenshot_raw(self, includes='subtitles'): + """ Mapped mpv screenshot_raw command, see man mpv(1). Returns a pillow Image object.""" + from PIL import Image + res = self.node_command('screenshot-raw', includes) + if res['format'] != 'bgr0': + raise ValueError('Screenshot in unknown format "{}". Currently, only bgr0 is supported.' + .format(res['format'])) + img = Image.frombytes('RGBA', (res['w'], res['h']), res['data']) + b,g,r,a = img.split() + return Image.merge('RGB', (r,g,b)) + def playlist_next(self, mode='weak'): """ Mapped mpv seek command, see man mpv(1). """ self.command('playlist_next', mode) -- cgit