diff options
Diffstat (limited to 'rapid/metadatavideo.py')
-rw-r--r-- | rapid/metadatavideo.py | 223 |
1 files changed, 0 insertions, 223 deletions
diff --git a/rapid/metadatavideo.py b/rapid/metadatavideo.py deleted file mode 100644 index 7b6bc6c..0000000 --- a/rapid/metadatavideo.py +++ /dev/null @@ -1,223 +0,0 @@ -#!/usr/bin/python -# -*- coding: latin1 -*- - -### Copyright (C) 2007-11 Damon Lynch <damonlynch@gmail.com> - -### This program is free software; you can redistribute it and/or modify -### it under the terms of the GNU General Public License as published by -### the Free Software Foundation; either version 2 of the License, or -### (at your option) any later version. - -### This program is distributed in the hope that it will be useful, -### but WITHOUT ANY WARRANTY; without even the implied warranty of -### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -### GNU General Public License for more details. - -### You should have received a copy of the GNU General Public License -### along with this program; if not, write to the Free Software -### Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -DOWNLOAD_VIDEO = True - -import os -import datetime -import time -import subprocess -import tempfile - -import multiprocessing -import logging -logger = multiprocessing.get_logger() - -import gtk -import paths - -import rpdfile - -try: - from hachoir_core.cmd_line import unicodeFilename - from hachoir_parser import createParser - from hachoir_metadata import extractMetadata -except ImportError: - DOWNLOAD_VIDEO = False - -if DOWNLOAD_VIDEO: - - def version_info(): - from hachoir_metadata.version import VERSION - return VERSION - - def get_video_THM_file(full_filename): - """ - Checks to see if a thumbnail file (THM) is in the same directory as the - file. Expects a full path to be part of the file name. - - Returns the filename, including path, if found, else returns None. - """ - - f = None - name, ext = os.path.splitext(full_filename) - for e in rpdfile.VIDEO_THUMBNAIL_FILE_EXTENSIONS: - if os.path.exists(name + '.' + e): - f = name + '.' + e - break - if os.path.exists(name + '.' + e.upper()): - f = name + '.' + e.upper() - break - - return f - - class VideoMetaData(): - def __init__(self, filename): - """ - Initialize by loading metadata using hachoir - """ - - self.filename = filename - self.u_filename = unicodeFilename(filename) - self.metadata = None - - def _kaa_get(self, key, missing, stream=None): - if not hasattr(self, 'info'): - try: - from kaa.metadata import parse - except ImportError: - msg = """The package Kaa metadata does not exist. -It is needed to access FPS and codec video file metadata.""" - logger.error(msg) - self.info = None - else: - self.info = parse(self.filename) - if self.info: - if stream != None: - v = self.info['video'][stream][key] - else: - v = self.info[key] - else: - v = None - if v: - return str(v) - else: - return missing - - def _load_hachoir_metadata_parser(self): - self.parser = createParser(self.u_filename, self.filename) - self.metadata = extractMetadata(self.parser) - - def _get(self, key, missing): - if self.metadata is None: - self._load_hachoir_metadata_parser() - - try: - v = self.metadata.get(key) - except: - v = missing - return v - - def date_time(self, missing=''): - return self._get('creation_date', missing) - - def time_stamp(self, missing=''): - """ - Returns a float value representing the time stamp, if it exists - """ - dt = self.date_time(missing=None) - if dt: - # convert it to a time stamp (not optimal, but better than nothing!) - v = time.mktime(dt.timetuple()) - else: - v = missing - return v - - def codec(self, stream=0, missing=''): - return self._kaa_get('codec', missing, stream) - - def length(self, missing=''): - """ - return the duration (length) of the video, rounded to the nearest second, in string format - """ - delta = self.metadata.get('duration') - l = '%.0f' % (86400 * delta.days + delta.seconds + float('.%s' % delta.microseconds)) - return l - - - def width(self, missing=''): - v = self._get('width', missing) - if v != None: - return str(v) - else: - return None - - def height(self, missing=''): - v = self._get('height', missing) - if v != None: - return str(v) - else: - return None - - def frames_per_second(self, stream=0, missing=''): - fps = self._kaa_get('fps', missing, stream) - try: - fps = '%.0f' % float(fps) - except: - pass - return fps - - def fourcc(self, stream=0, missing=''): - return self._kaa_get('fourcc', missing, stream) - - - -class DummyMetaData(): - """ - Class which gives metadata values for an imaginary video. - - Useful for displaying in preference examples etc. when no video is ready to - be downloaded. - - See VideoMetaData class for documentation of class methods. - """ - def __init__(self, filename): - pass - - def date_time(self, missing=''): - return datetime.datetime.now() - - def codec(self, stream=0, missing=''): - return 'H.264 AVC' - - def length(self, missing=''): - return '57' - - def width(self, stream=0, missing=''): - return '1920' - - def height(self, stream=0, missing=''): - return '1080' - - def frames_per_second(self, stream=0, missing=''): - return '24' - - def fourcc(self, stream=0, missing=''): - return 'AVC1' - - -if __name__ == '__main__': - import sys - - - if (len(sys.argv) != 2): - print 'Usage: ' + sys.argv[0] + ' path/to/video/containing/metadata' - sys.exit(0) - - else: - m = VideoMetaData(sys.argv[1]) - dt = m.date_time() - if dt: - print dt.strftime('%Y%m%d-%H:%M:%S') - print "codec: %s" % m.codec() - print "%s seconds" % m.length() - print "%sx%s" % (m.width(), m.height()) - print "%s fps" % m.frames_per_second() - print "Fourcc: %s" % (m.fourcc()) - |