#!/usr/bin/python3 import lxml import lxml.etree import ox import os import json import sys source = sys.argv[1] 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 #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) 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: f.write(ox.srt.encode(data))