class Media2Waveform(object): def __init__(self, media_dir, img_dir, log_file): self.root_dir = os.path.join(os.path.dirname(__file__), media_dir) self.img_dir = os.path.join(os.path.dirname(__file__), img_dir) self.scheme = GrapherScheme() self.width = self.scheme.width self.height = self.scheme.height self.bg_color = self.scheme.bg_color self.color_scheme = self.scheme.color_scheme self.force = self.scheme.force self.threads = self.scheme.threads self.logger = Logger(log_file) self.counter = 0 self.media_list = self.get_media_list() if not os.path.exists(self.img_dir): os.makedirs(self.img_dir) self.path_dict = self.get_path_dict() def get_media_list(self): media_list = [] for root, dirs, files in os.walk(self.root_dir): if root: for file in files: if file[0] != '.': ext = file.split('.')[-1] media_list.append(root+os.sep+file) return media_list def get_path_dict(self): path_dict = {} for media in self.media_list: filename = media.split(os.sep)[-1] name, ext = os.path.splitext(filename) size = str(self.width) + '_' + str(self.height) image = self.img_dir + os.sep + name + '.' + self.scheme.id + '.' + size + '.png' if not os.path.exists(image) or self.force: path_dict[media] = image return path_dict def process(self): q = Queue.Queue() for i in range(0, self.threads): worker = Thread(target=Worker, args=(self.width, self.height, self.bg_color, self.color_scheme, q, self.logger)) worker.setDaemon(True) worker.start() mess = str(self.threads) + ' thread(s) started' self.logger.write_info(mess) for media, image in self.path_dict.iteritems(): q.put((media, image)) q.join()
class TelemetaPreprocessImport(object): def __init__(self, media_dir, dest_dir, log_file): self.root_dir = media_dir self.dest_dir = dest_dir self.threads = 1 self.logger = Logger(log_file) self.counter = 0 self.force = 0 self.cache = Cache(self.dest_dir) self.scheme = GrapherScheme() self.width = self.scheme.width self.height = self.scheme.height self.bg_color = self.scheme.bg_color self.color_scheme = self.scheme.color_scheme self.force = self.scheme.force self.threads = self.scheme.threads self.logger = Logger(log_file) self.counter = 0 self.analyzers = timeside.core.processors(timeside.api.IAnalyzer) self.grapher = timeside.grapher.WaveformAwdio(width=self.width, height=self.height, bg_color=self.bg_color, color_scheme=self.color_scheme) self.media_list = self.get_media_list() if not os.path.exists(self.dest_dir): os.makedirs(self.dest_dir) def get_media_list(self): media_list = [] for root, dirs, files in os.walk(self.root_dir): if root: for file in files: if file[0] != '.': ext = file.split('.')[-1] media_list.append(root+os.sep+file) return media_list def process(self): for media in self.media_list: filename = media.split(os.sep)[-1] name, ext = os.path.splitext(filename) size = str(self.width) + '_' + str(self.height) image = self.dest_dir + os.sep + name + '.' + self.scheme.id + '.' + size + '.png' xml = name + '.xml' if not self.cache.exists(image) or not self.cache.exists(xml): mess = 'Processing ' + media self.logger.write_info(mess) decoder = timeside.decoder.FileDecoder(media) pipe = decoder | self.grapher analyzers = [] analyzers_sub = [] for analyzer in self.analyzers: subpipe = analyzer() analyzers_sub.append(subpipe) pipe = pipe | subpipe pipe.run() mess = 'Rendering ' + image self.logger.write_info(mess) self.grapher.render(output=image) mess = 'Frames / Pixel = ' + str(self.grapher.graph.samples_per_pixel) self.logger.write_info(mess) for analyzer in analyzers_sub: value = analyzer.result() if analyzer.id() == 'duration': value = datetime.timedelta(0,value) analyzers.append({'name':analyzer.name(), 'id':analyzer.id(), 'unit':analyzer.unit(), 'value':str(value)}) self.cache.write_analyzer_xml(analyzers, xml) filename = name data = name.split('.') date = data[0] collection_name = data[1] other = '' if len(data) > 2: other = '.'.join(data[2:]) item = telemeta.models.media.MediaItem.objects.filter(code=filename) collections = telemeta.models.media.MediaCollection.objects.filter(code=collection_name) if not collections: c = telemeta.models.media.MediaCollection(code=collection_name) c.title = collection_name c.save() msg = 'added' self.logger.write_info(collection_name, msg) collection = c else: collection = collections[0] if not item: item = telemeta.models.media.MediaItem(collection=collection, code=filename) item.title = filename item.file = self.media_dir + os.sep + media item.save() msg = 'added item : ' + filename self.logger.write_info(collection_name, msg)