]> git.parisson.com Git - telemeta.git/commitdiff
fix no separated audio tracks in kdenlive parser 1.4.6-5
authorGuillaume Pellerin <yomguy@parisson.com>
Tue, 9 Dec 2014 23:28:31 +0000 (00:28 +0100)
committerGuillaume Pellerin <yomguy@parisson.com>
Tue, 9 Dec 2014 23:29:09 +0000 (00:29 +0100)
telemeta/util/kdenlive/session.py

index 6c6b1380c45522ba41d166ce20b3c396167a5428..74eb425888c944c28da0b03a2ea93a006fde7759 100644 (file)
@@ -39,115 +39,114 @@ from telemeta.util.xmltodict2 import *
 
 class KDEnLiveSession(object):
 
-       def __init__(self, path):
-               self.session = xmltodict(path)
-
-       def entries(self):
-               entries = []
-               for attr in self.session['children']:
-                       if 'playlist' in attr['name'] and 'children' in attr:
-                               for att in attr['children']:
-                                       if 'entry' in att['name'] and att['attributes']['producer'] != 'black':
-                                               entries.append(att['attributes'])
-               return entries
-
-       def video_entries(self):
-               entries = []
-               for attr in self.session['children']:
-                       if 'playlist' in attr['name'] and 'children' in attr:
-                               for att in attr['children']:
-                                       if 'entry' in att['name'] and att['attributes']['producer'] != 'black' \
-                                                       and 'video' in att['attributes']['producer']:
-                                               entries.append(att['attributes'])
-               return entries
-
-
-       def entries_sorted(self):
-               return sorted(self.entries(), key=lambda k: int(k['in']), reverse=False)
-
-       def entries_video_seconds(self):
-               fps = float(self.profile()['frame_rate_num'])
-               list = []
-               entries = self.video_entries()
-               for i in range(0,len(entries)):
-                       id = entries[i]['producer'].split('_')[0]
-                       t_in = int(entries[i]['in'])/fps
-                       t_out = int(entries[i]['out'])/fps
-
-                       if i == 0:
-                               t = 0
-                       else:
-                               t = list[i-1]['t'] + int(entries[i-1]['out'])/fps - int(entries[i-1]['in'])/fps
-
-                       list.append({'id' : id, 't': t, 'in': t_in , 'out': t_out })
-
-               return list
-
-       def cuts(self, entries):
-               i = 0
-               cuts = [0, ]
-               for entry in entries:
-                       if i > 0:
-                               cuts.append(cuts[i-1] + int(entries[i]['in'])-int(entries[i-1]['out']))
-                       i += 1
-               return cuts
-
-       def first_video_frame(self):
-               return int(self.entries_sorted()[0]['in'])
-
-       def profile(self):
-               for attr in self.session['children']:
-                       if 'profile' in attr['name']:
-                               return attr['attributes']
-
-       def fix_text(self, text):
-               try:
-                       s = text.split(' ')
-                       i = int(s[1])
-                       s.insert(2, ':')
-                       return ' '.join(s)
-               except:
-                       return text
-
-       def markers(self, offset=0, from_first_marker=False):
-               """ by default return a dict of markers with timecodes relative to an origin
-
-                   if from_first_marker=False: the origin is the first entry timecode
-                   if from_first_marker=True: the origin is the first entry timecode before the first marker
-
-                   offset: general origin offset
-               """
-
-               abs_time = 0
-               markers = []
-               i = 0
-               entries = self.entries_video_seconds()
-
-               for attr in self.session['children']:
-                       if 'kdenlivedoc' in attr['name']:
-
-                               for att in attr['children']:
-                                       if 'markers' in att['name'] and 'children' in att.keys():
-
-                                               for at in att['children']:
-                                                       if 'marker' in at['name']:
-
-                                                               marker_time = float(at['attributes']['time'].replace(',','.'))
-                                                               id = at['attributes']['id']
-                                                               rel_time = 0
-
-                                                               for entry in entries:
-                                                                       if marker_time >= entry['in'] and marker_time <= entry['out'] and id == entry['id']:
-                                                                               if i == 0 and from_first_marker:
-                                                                                       abs_time = entry['t']
-                                                                               rel_time = entry['t'] + (marker_time - entry['in']) - abs_time + offset
-                                                                               break
-
-                                                               at['attributes']['time'] = rel_time
-                                                               at['attributes']['session_timecode'] = time.strftime('%H:%M:%S', time.gmtime(rel_time))
-                                                               at['attributes']['comment'] = self.fix_text(at['attributes']['comment'])
-                                                               markers.append(at['attributes'])
-
-                                                       i += 1
-               return markers
+    def __init__(self, path):
+        self.session = xmltodict(path)
+
+    def entries(self):
+        entries = []
+        for attr in self.session['children']:
+            if 'playlist' in attr['name'] and 'children' in attr:
+                for att in attr['children']:
+                    if 'entry' in att['name'] and att['attributes']['producer'] != 'black':
+                        entries.append(att['attributes'])
+        return entries
+
+    def video_entries(self):
+        entries = []
+        for attr in self.session['children']:
+            if 'playlist' in attr['name'] and 'children' in attr:
+                for att in attr['children']:
+                    if 'entry' in att['name'] and att['attributes']['producer'] != 'black' \
+                            and not 'audio' in att['attributes']['producer']:
+                        entries.append(att['attributes'])
+        return entries
+
+    def entries_sorted(self):
+        return sorted(self.entries(), key=lambda k: int(k['in']), reverse=False)
+
+    def entries_video_seconds(self):
+        fps = float(self.profile()['frame_rate_num'])
+        list = []
+        entries = self.video_entries()
+        for i in range(0,len(entries)):
+            id = entries[i]['producer'].split('_')[0]
+            t_in = int(entries[i]['in'])/fps
+            t_out = int(entries[i]['out'])/fps
+
+            if i == 0:
+                t = 0
+            else:
+                t = list[i-1]['t'] + int(entries[i-1]['out'])/fps - int(entries[i-1]['in'])/fps
+
+            list.append({'id' : id, 't': t, 'in': t_in , 'out': t_out })
+
+        return list
+
+    def cuts(self, entries):
+        i = 0
+        cuts = [0, ]
+        for entry in entries:
+            if i > 0:
+                cuts.append(cuts[i-1] + int(entries[i]['in'])-int(entries[i-1]['out']))
+            i += 1
+        return cuts
+
+    def first_video_frame(self):
+        return int(self.entries_sorted()[0]['in'])
+
+    def profile(self):
+        for attr in self.session['children']:
+            if 'profile' in attr['name']:
+                return attr['attributes']
+
+    def fix_text(self, text):
+        try:
+            s = text.split(' ')
+            i = int(s[1])
+            s.insert(2, ':')
+            return ' '.join(s)
+        except:
+            return text
+
+    def markers(self, offset=0, from_first_marker=False):
+        """ by default return a dict of markers with timecodes relative to an origin
+
+            if from_first_marker=False: the origin is the first entry timecode
+            if from_first_marker=True: the origin is the first entry timecode before the first marker
+
+            offset: general origin offset
+        """
+
+        abs_time = 0
+        markers = []
+        i = 0
+        entries = self.entries_video_seconds()
+
+        for attr in self.session['children']:
+            if 'kdenlivedoc' in attr['name']:
+
+                for att in attr['children']:
+                    if 'markers' in att['name'] and 'children' in att.keys():
+
+                        for at in att['children']:
+                            if 'marker' in at['name']:
+
+                                marker_time = float(at['attributes']['time'].replace(',','.'))
+                                id = at['attributes']['id']
+                                rel_time = 0
+
+                                for entry in entries:
+                                    if marker_time >= entry['in'] and marker_time <= entry['out'] and id == entry['id']:
+                                        if i == 0 and from_first_marker:
+                                            abs_time = entry['t']
+                                        rel_time = entry['t'] + (marker_time - entry['in']) - abs_time + offset
+                                        break
+
+                                at['attributes']['time'] = rel_time
+                                at['attributes']['session_timecode'] = time.strftime('%H:%M:%S', time.gmtime(rel_time))
+                                at['attributes']['comment'] = self.fix_text(at['attributes']['comment'])
+                                markers.append(at['attributes'])
+
+                            i += 1
+        return markers