From b3558df3be4ed9bcefda2be5a8614962e490bfbe Mon Sep 17 00:00:00 2001 From: j <0x006A@0x2620.org> Date: Tue, 10 Jul 2007 20:01:41 +0000 Subject: [PATCH] clips frames --- oxdbarchive/cache.py | 5 ++-- oxdbarchive/controllers.py | 9 ++++--- oxdbarchive/model.py | 53 +++++++++++++++++++++++--------------- oxdbarchive/subtitles.py | 2 ++ 4 files changed, 42 insertions(+), 27 deletions(-) diff --git a/oxdbarchive/cache.py b/oxdbarchive/cache.py index 93ee6ee..a58be8c 100644 --- a/oxdbarchive/cache.py +++ b/oxdbarchive/cache.py @@ -31,9 +31,8 @@ def saveFile(f_name, data): def loadStaticFile(fname): return loadFile(join(dirname(abspath(__file__)), "static", fname)) - def loadFrame(afile, position): - position = basename(position) + position = basename(position).replace(':', '.') frame = join(afile.frameFolder, '%s.%s' % (position, img_extension)) if not exists(frame): afile.extractFrame(position) @@ -42,7 +41,7 @@ def loadFrame(afile, position): return '' def loadClip(afile, position): - position = basename(position) + position = basename(position).replace(':', '.') flash = join(afile.frameFolder, '%s.%s' % (position, 'flv')) if not exists(flash): afile.extractClip(position) diff --git a/oxdbarchive/controllers.py b/oxdbarchive/controllers.py index 19c6491..199050e 100644 --- a/oxdbarchive/controllers.py +++ b/oxdbarchive/controllers.py @@ -31,16 +31,19 @@ class Root(controllers.RootController): if action == 'metadata': return dict(metadata = f) elif action in ('timeline', 'timeline.png'): - cherrypy.response.headerMap['Content-Type'] = "image/jpeg" + cherrypy.response.headerMap['Content-Type'] = "image/png" cherrypy.response.headerMap["Expires"] = httpExpires(60*60*24*15) return f.timeline() elif position: #clip / frame - cherrypy.response.headerMap['Content-Type'] = "image/jpeg" - cherrypy.response.headerMap["Expires"] = httpExpires(60*60*24*15) position = position.replace('.png', '').replace('.jpg', '') + position = position.replace('.flv', '') position = position.replace('-', ':').replace('.',':') if action == 'clip': + cherrypy.response.headerMap['Content-Type'] = "video/x-flv" + cherrypy.response.headerMap["Expires"] = httpExpires(60*60*24*15) return f.clip(position) elif action == 'frame': + cherrypy.response.headerMap['Content-Type'] = "image/jpeg" + cherrypy.response.headerMap["Expires"] = httpExpires(60*60*24*15) return f.frame(position) return dict() \ No newline at end of file diff --git a/oxdbarchive/model.py b/oxdbarchive/model.py index d2bf04e..d9edb83 100644 --- a/oxdbarchive/model.py +++ b/oxdbarchive/model.py @@ -8,14 +8,15 @@ import turbogears import re from urllib import quote, quote_plus import os -from os.path import abspath, join, dirname +from os.path import abspath, join, dirname, exists from datetime import datetime import time import math from glob import glob import shutil - +from scrapeit.utils import read_url +import socket import cache import oxdb_import from oxdb_utils import oxdb_title, oxdb_director, oxdb_id @@ -40,9 +41,12 @@ class Archive(SQLObject): def notifyFrontend(self, action, md5sum): if self.baseUrlFrontend: + dto = socket.getdefaulttimeout() + socket.setdefaulttimeout(100) url = "%s/%s?md5sum=%s" % (self.baseUrlFrontend, action, md5sum) result = read_url(url) print "Frontend:", result + socket.setdefaulttimeout(dto) def _get_files(self): q = ArchiveFile.select(ArchiveFile.q.archiveID == self.id) @@ -263,7 +267,7 @@ class ArchiveFile(SQLObject): def updateMeta(self): self.findSubtitleLink() - if os.path.exists(self.absolutePath): + if exists(self.absolutePath): info = midentify.identify(self.absolutePath) self.length = info['length'] self.width = info['width'] @@ -338,7 +342,7 @@ class ArchiveFile(SQLObject): return join(cache.cache_root, 'mini', self.md5sum[:4], "%s.avi" % self.md5sum) def _get_frameFolder(self): - f = join(cache.cache_root, 'mini', self.md5sum[:4], self.md5sum) + f = join(cache.cache_root, 'frame', self.md5sum[:4], self.md5sum) if not exists(f): os.makedirs(f) return f @@ -347,7 +351,7 @@ class ArchiveFile(SQLObject): return join(cache.cache_root, 'timeline', self.md5sum[:4], "%s.png" % self.md5sum) def removeMiniMovie(self): - if os.path.exists(self.mini_movie_file): + if exists(self.mini_movie_file): os.remove(self.mini_movie_file) def _findSubtitleByStart(self, start): @@ -365,13 +369,16 @@ class ArchiveFile(SQLObject): self.extractTimeline() self.extracted = True - def extractClip(self, inpoint, outpoint=-1, flash_folder=cache.frame_cache_root): + def extractClip(self, inpoint, outpoint=-1, flash_folder=-1): + if flash_folder == -1: + flash_folder = self.frameFolder movie_file = self.mini_movie_file position = inpoint.replace(':', '.') flash_movie = join(self.frameFolder, '%s.%s' % (position, 'flv')) width = 128 height = int(width / (self.width / self.height)) height = height - height % 2 + inpoint = inpoint.replace('.', ':') if outpoint == -1: s = self._findSubtitleByStart(inpoint) if s: @@ -381,21 +388,23 @@ class ArchiveFile(SQLObject): extract_flash(movie_file, flash_movie, inpoint, outpoint, width, height, offset = 0) #extract_flash_ng(self.absolutePath, flash_movie, inpoint, outpoint, width, height, offset) - def extractFrame(self, position, img_folder=cache.frame_cache_root): + def extractFrame(self, position, img_folder=-1): + if img_folder == -1: + img_folder = self.frameFolder if self.movieFile: return self.movieFile.extractFrame(position, img_folder) movie_file = self.mini_movie_file - img_folder = join(img_folder, self.oxdb) - if not os.path.exists(img_folder): + if not exists(img_folder): os.makedirs(img_folder) + + position = position.replace('.', ':') extract_frame(movie_file, position, img_folder, offset = 0, redo = False) def extractFrames(self, img_folder=cache.frame_cache_root): if self.movieFile: return self.movieFile.extractFrames(img_folder) movie_file = self.absolutePath - img_folder = join(img_folder, self.oxdb) - if not os.path.exists(img_folder): + if not exists(img_folder): os.makedirs(img_folder) extract_subtitles(movie_file, self.srt.encode('utf-8'), img_folder, width=100, offset=self.offset) @@ -404,12 +413,12 @@ class ArchiveFile(SQLObject): return mini_movie_file = self.mini_movie_file movie_file = self.absolutePath - if not movie_file or not os.path.exists(movie_file): + if not movie_file or not exists(movie_file): return - if os.path.exists(mini_movie_file) and not force: + if exists(mini_movie_file) and not force: print "clip exists, skipping extraction", mini_movie_file return - if not os.path.exists(dirname(mini_movie_file)): + if not exists(dirname(mini_movie_file)): os.makedirs(dirname(mini_movie_file)) options = '' options += " -ovc lavc -lavcopts vcodec=mjpeg" @@ -423,7 +432,7 @@ class ArchiveFile(SQLObject): def removeTimeline(self): - if os.path.exists(self.timelineFile): + if exists(self.timelineFile): os.unlink(self.timelineFile) def extractTimeline(self, force = False): @@ -437,18 +446,20 @@ class ArchiveFile(SQLObject): return t = self.timelineFile - if os.path.exists(self.mini_movie_file): - if not os.path.exists(os.path.dirname(t)): + if exists(self.mini_movie_file): + if not exists(os.path.dirname(t)): os.makedirs(os.path.dirname(t)) #lets only extract the timeline if it does not exist yet - if os.path.exists(t): + if exists(t): print "skipping, ", self.path return - extractTimelineScript = abspath(join(dirname(__file__), "tools/extract_timeline.py")) + #this fails in tg-admin shell + #extractTimelineScript = abspath(join(dirname(__file__), "tools/extract_timeline.py")) + extractTimelineScript = "oxdbarchive/tools/extract_timeline.py" cmd = "python %s %s %s" %(extractTimelineScript, t, self.mini_movie_file) os.system(cmd) - def loadSubtitleFromFile(self): + def loadSubtitleFromFile(self): if self.movieFile: movieFile = self.movieFile subtitle = self @@ -458,7 +469,7 @@ class ArchiveFile(SQLObject): if movieFile: movieFile.srt = '' if subtitle and movieFile: - if not subtitle.absolutePath or not os.path.exists(subtitle.absolutePath): + if not subtitle.absolutePath or not exists(subtitle.absolutePath): return if not subtitle.absolutePath.endswith('.srt'): print "this is not a subtitle", subtitle.absolutePath diff --git a/oxdbarchive/subtitles.py b/oxdbarchive/subtitles.py index 083e1fd..3a74d60 100644 --- a/oxdbarchive/subtitles.py +++ b/oxdbarchive/subtitles.py @@ -6,6 +6,7 @@ import re import os from os.path import abspath, join, dirname import shutil +import time import chardet @@ -214,6 +215,7 @@ def extract_frame(movie_file, timestamp, img_folder, width=128, offset = 0, redo for f in files[:-2]: print "unlink", f os.unlink(f) + time.sleep(0.1) else: print "update the cache %s missing" % movie_file shutil.rmtree(framedir)