diff --git a/fcp2json.py b/fcp2json.py index 9785488..eda254b 100755 --- a/fcp2json.py +++ b/fcp2json.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3 +#!/usr/bin/env python from __future__ import division import lxml @@ -45,10 +45,10 @@ 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 + _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() + name= g.findall('name')[0].text.strip() #print _in, _out, _start, _end, name if _start == -0.04: _start = _last @@ -56,7 +56,7 @@ for g in tree.xpath('//clipitem'): _end = _start + (_out - _in) name = name.replace('.dv', '').replace('_ ', ': ') id = name.replace(' ', '%20') - value = 'Source: %s %s-%s' % (id, _in, _out, name, ox.format_timecode(_in), ox.format_timecode(_out)) + 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 }) @@ -68,23 +68,24 @@ with open(target, 'w') as f: ''' import os import ox -import ox.api -item = 'KFB' +with open(os.path.expanduser('~/.ox/client.json')) as f: + config = json.load(f) -api = ox.api.signin('https://pad.ma/api/') -request = { - 'item': item, -} -if data['descriptions']: - request['layer'] = 'descriptions' - request['annotations'] = data['descriptions'] - r = api.addAnnotations(request) +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) - -if data['transcripts']: - request['layer'] = 'transcripts' - request['annotations'] = data['transcripts'] - r = api.addAnnotations(request) +for s in data['transcripts']: + s['item'] = 'BHK' + s['layer'] = 'transcripts' + print s + r = api.addAnnotation(s) assert(r['status']['code'] == 200) ''' diff --git a/fcp2srt.py b/fcp2srt.py index f768822..c29b2c9 100755 --- a/fcp2srt.py +++ b/fcp2srt.py @@ -1,4 +1,5 @@ -#!/usr/bin/python3 +#!/usr/bin/env python +from __future__ import division import lxml import lxml.etree @@ -12,42 +13,31 @@ target = '%s.srt' % os.path.splitext(source)[0] fps = 25 data = [] tree = lxml.etree.parse(source) -''' -for g in tree.xpath('//clipitem//effect'): - if g.findall('effectid')[0].text == "GraphicAndType": - print (g.findall('name')[0].text) -''' -for g in tree.xpath('//clipitem'): - if g.findall('name')[0].text != 'Graphic': - continue +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) + _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 - for efilter in g.findall('filter'): - value = None - for effect in efilter.findall('effect'): - if effect.findall('effectid')[0].text == 'GraphicAndType': - value = effect.findall('name')[0].text - if not value: - print(lxml.etree.tostring(effect).decode()) - print(value) - if _start == -1 and _end == -1: - _start = _in - _end = _out - if _start == -1: - _start = 0 - if value: - print('i', _in, 'o', _out, '-> s', _start, 'e', _end, 'v', value) - value = '\n'.join([v.strip() for v in value.strip().split('\r')]) - data.append({ - 'in': _start/fps, - 'out': (_end-1)/fps, - 'value': value - }) -with open(target, 'wb') as f: + 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')]) + value = value.replace('\n\n', '

\n') + data.append({ + 'in': _start/fps, 'out': (_end-1)/fps, 'value': value + }) + +with open(target, 'w') as f: f.write(ox.srt.encode(data))