#!/usr/bin/python # -*- coding: utf-8 -*- # vi:si:et:sw=4:sts=4:ts=4 # GPL 2008 import gobject gobject.threads_init() import os import pygst pygst.require("0.10") import gst from gst.extend import discoverer codec_list = { 'MPEG-1 layer 3': 'MPEG-1 Audio layer 3', 'MPEG-1 layer 3 audio': 'MPEG-1 Audio layer 3', 'MPEG 1 Audio, Layer 2': 'MPEG-1 Audio layer 2', 'VP6 Flash video': 'VP6', 'AC-3 audio': 'AC-3', 'Uncompressed 16-bit PCM audio': 'Uncompressed 16-bit PCM', 'Generic DV': 'DV Video', } class Info(dict): def __init__(self, path): self._stream_id = 0 self['video'] = [] self['audio'] = [] self['size'] = os.stat(path).st_size mainloop = gobject.MainLoop() def discovered(d, is_media): if is_media: if d.is_video: c = {} c['width'] = d.videowidth c['height'] = d.videoheight self['duration'] = float(d.videolength)/gst.SECOND c["framerate"] = "%d:%d" % (d.videorate.num, d.videorate.denom) s = d.videocaps[0] par = gst.Fraction(1, 1) if 'pixel-aspect-ratio' in s.keys(): par = s['pixel-aspect-ratio'] c["pixel_aspect_ratio"] = "%s:%s" %(par.num, par.denom) dar = gst.Fraction(d.videowidth * par.num, d.videoheight * par.denom) if 'display-aspect-ratio' in s.keys(): dar = s['display-aspect-ratio'] c["display_aspect_ratio"] = "%s:%s" %(dar.num, dar.denom) if 'video-codec' in d.tags: c['codec'] = codec_list.get(d.tags['video-codec'], d.tags['video-codec']) c['id'] = self._stream_id self._stream_id += 1 self['video'].append(c) if d.is_audio: c = {} #self['audio caps'] = d.audiocaps #self['audio format'] = d.audiofloat and 'floating-point' or 'integer' #self['sample width (bits)'] = d.audiowidth #self['sample depth (bits)'] = d.audiodepth c['samplerate'] = d.audiorate if 'duration' not in self: self['duration'] = float(d.audiolength)/gst.SECOND c['channels'] = d.audiochannels if 'audio-codec' in d.tags: c['codec'] = codec_list.get(d.tags['audio-codec'], d.tags['audio-codec']) c['id'] = self._stream_id self._stream_id += 1 self['audio'].append(c) mainloop.quit() d = discoverer.Discoverer(path) d.connect('discovered', discovered) d.discover() mainloop.run()