>From 04282bd701228d22f8f658d7a94ac542b33fa034 Mon Sep 17 00:00:00 2001 From: Germain Zouein Date: Sat, 20 Jul 2013 03:52:39 +0300 Subject: [PATCH] preview Video using ffmpeg --- ranger/container/file.py | 2 + ranger/core/actions.py | 27 ++++++++++++ ranger/gui/widgets/browsercolumn.py | 8 ++++ 3 files changed, 37 insertions(+) diff --git a/ranger/container/file.py b/ranger/container/file.py index 7c83cac..4accbec 100644 --- a/ranger/container/file.py +++ b/ranger/container/file.py @@ -73,6 +73,8 @@ class File(FileSystemObject): return True if self.image and self.fm.settings.preview_images: return True + if self.video and self.fm.settings.preview_images: + return True if self.container: return False if PREVIEW_WHITELIST.search(self.basename): diff --git a/ranger/core/actions.py b/ranger/core/actions.py index 80b3597..deaced4 100644 --- a/ranger/core/actions.py +++ b/ranger/core/actions.py @@ -781,6 +781,8 @@ class Actions(FileManagerAware, EnvironmentAware, SettingsAware): pager = self.ui.open_pager() if self.settings.preview_images and self.thisfile.image: pager.set_image(self.thisfile.realpath) + elif self.settings.preview_images and self.thisfile.video: + self.thisfile.get_preview_source(pager.wid, pager.hei) else: pager.set_source(self.thisfile.get_preview_source(pager.wid, pager.hei)) @@ -802,6 +804,31 @@ class Actions(FileManagerAware, EnvironmentAware, SettingsAware): pager.set_image(path) return None + if self.settings.preview_images and file.video: + from hashlib import sha1 + try: + data = self.previews[path] + except: + data = self.previews[path] = {'loading': True} + else: + if data['loading'] is True: + return None + else: + self.notify(data['fhash']) + return data['fhash'] + data['fhash'] = '/tmp/' + sha1(path.encode()).hexdigest() + '.png' + cmd = CommandLoader(["ffmpeg", "-itsoffset", "-10", + "-i", path, "-vframes", "1", "-y", + data['fhash']], + descr="loading preview image", silent=True) + def on_after(signal): + data['loading'] = False + pager.set_image(data['fhash']) + if self.thisfile and self.thisfile.realpath == path: + self.ui.need_redraw = True + cmd.signal_bind('after', on_after) + self.loader.add(cmd) + if self.settings.preview_script and self.settings.use_preview_script: # self.previews is a 2 dimensional dict: # self.previews['/tmp/foo.jpg'][(80, 24)] = "the content..." diff --git a/ranger/gui/widgets/browsercolumn.py b/ranger/gui/widgets/browsercolumn.py index d705e6b..5f057e0 100644 --- a/ranger/gui/widgets/browsercolumn.py +++ b/ranger/gui/widgets/browsercolumn.py @@ -11,6 +11,7 @@ from time import time from . import Widget from .pager import Pager from ranger.ext.widestring import WideString +from ranger.core.loader import CommandLoader from ranger.gui.color import * @@ -181,6 +182,13 @@ class BrowserColumn(Pager): if self.fm.settings.preview_images and self.target.image: self.set_image(self.target.realpath) Pager.draw(self) + elif self.fm.settings.preview_images and self.target.video: + f = self.target.get_preview_source(self.wid, self.hei) + if f is None: + Pager.close(self) + else: + self.set_image(f) + Pager.draw(self) else: f = self.target.get_preview_source(self.wid, self.hei) if f is None: -- 1.7.10.4