92 lines
2.7 KiB
Python
92 lines
2.7 KiB
Python
|
#!/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 = '<br>\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: <a href="/%s/%.3f,%.3f">%s/%s-%s</a>' % (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)
|
||
|
'''
|