#!/usr/bin/env python from __future__ import division import lxml import lxml.etree import ox import os import json import sys fps = 25 tree = lxml.etree.parse(sys.argv[1]) source = sys.argv[1] target = '%s.json' % os.path.splitext(source)[0] data = { 'descriptions': [], 'transcripts': [] } for g in tree.xpath('//generatoritem'): #start/end = relative position of the clip in the parent sequence. #in/out indicate the portion of the source media file to reference. _in = int(g.findall('in')[0].text) _out = int(g.findall('out')[0].text) _start = int(g.findall('start')[0].text) _end = int(g.findall('end')[0].text) effect = g.findall('effect') assert len(effect) == 1 for parameter in effect[0].findall('parameter'): if parameter.findall('parameterid')[0].text == 'str': value = parameter.findall('value')[0].text if _start == -1 and _end == -1: _start = _in _end = _out if _start == -1: _start = 0 #print _in, _out, _start, _end, value value = '
\n'.join([v.strip() for v in value.strip().split('\r')]) data['transcripts'].append({ 'in': _start/fps, 'out': (_end-1)/fps, 'value': value }) _last = 0 for g in tree.xpath('//clipitem'): #in/out indicate the portion of the source media file to reference. #start/end = relative position of the clip in the parent sequence. _in = int(g.findall('in')[0].text) / fps _out = int(g.findall('out')[0].text) / fps _start = int(g.findall('start')[0].text) / fps _end = int(g.findall('end')[0].text) / fps name= g.findall('name')[0].text.strip() #print _in, _out, _start, _end, name if _start == -0.04: _start = _last if _end == -0.04: _end = _start + (_out - _in) name = name.replace('.dv', '').replace('_ ', ': ') id = name.replace(' ', '%20') value = 'Source: %s/%s-%s' % (id, _in, _out, name, ox.formatDuration(_in), ox.formatDuration(_out)) data['descriptions'].append({ 'in': _start, 'out': _end-0.04, 'value': value }) _last = _end with open(target, 'w') as f: json.dump(data, f, indent=2) ''' import os import ox with open(os.path.expanduser('~/.ox/client.json')) as f: config = json.load(f) api = ox.API('https://pad.ma/api/') r = api.signin(username=config['username'], password=config['password']) assert(r['status']['code'] == 200) assert(r['data']['user'] != '') for s in data['descriptions']: s['item'] = 'BHK' s['layer'] = 'descriptions' print s r = api.addAnnotation(s) assert(r['status']['code'] == 200) for s in data['transcripts']: s['item'] = 'BHK' s['layer'] = 'transcripts' print s r = api.addAnnotation(s) assert(r['status']['code'] == 200) '''