43 lines
1.2 KiB
Python
Executable file
43 lines
1.2 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
from __future__ import division
|
|
|
|
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('//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')])
|
|
value = value.replace('\n\n', '<br><br>\n')
|
|
data.append({
|
|
'in': _start/fps, 'out': (_end-1)/fps, 'value': value
|
|
})
|
|
|
|
with open(target, 'wb') as f:
|
|
f.write(ox.srt.encode(data))
|