from xmltodict2 import *
-class KdenliveAutoFade(object):
+class AutoFade(object):
+ """ Automatically applies a fade in and a fade out trasitions between each segment of a KdenLive session.
+ Each video clip needs to be splitted into one video track and an audio one ("Split audio"),
+ so that an audio fade in/out is also applied.
- def __init__(self):
- self.n_frames = 2
+ MLT files are also supported.
+ """
+
+ def __init__(self, path, frames=3):
+ self.frames = frames
+ self.path = path
+ self.session = xmltodict(self.path)
def audio_fade_in(self, frame_out):
child = {'attributes': {u'id': u'fadeout',
- u'in': unicode(int(frame_out)-self.n_frames),
+ u'in': unicode(int(frame_out)-self.frames),
u'out': unicode(frame_out)},
'children': [{'attributes': {u'name': u'track'},
'cdata': '0',
def audio_fade_out(self, frame_in):
child = {'attributes': {u'id': u'fadein',
u'in': unicode(frame_in),
- u'out': unicode(int(frame_in)+self.n_frames)},
+ u'out': unicode(int(frame_in)+self.frames)},
'children': [{'attributes': {u'name': u'track'},
'cdata': '0',
'name': 'property'},
def video_fade_in(self, frame_out):
child = {'attributes': {u'id': u'fade_to_black',
- u'in': unicode(int(frame_out)-self.n_frames),
+ u'in': unicode(int(frame_out)-self.frames),
u'out': unicode(frame_out)},
'children': [{'attributes': {u'name': u'track'},
'cdata': '0',
def video_fade_out(self, frame_in):
child = {'attributes': {u'id': u'fade_from_black',
u'in': unicode(frame_in),
- u'out': unicode(int(frame_in)+self.n_frames)},
+ u'out': unicode(int(frame_in)+self.frames)},
'children': [{'attributes': {u'name': u'track'},
'cdata': '0',
'name': 'property'},
return child
- def run(self, path_in, path_out):
+ def run(self):
audio_count = 0
video_count = 0
- d = xmltodict(path_in)
- for attr in d['children']:
+ for attr in self.session['children']:
if 'playlist' in attr['name'] and 'children' in attr:
for att in attr['children']:
if 'producer' in att['attributes']:
att['children'] = [self.video_fade_out(frame_in)]
video_count += 1
- data = dicttoxml(d)
- f = open(path_out, 'w')
- f.write(data.encode('utf-8'))
- f.close()
+ return dicttoxml(self.session).encode('utf-8')