Add a title clip to the timeline
authorAntonio Ospite <ao2@ao2.it>
Wed, 7 Dec 2016 15:26:45 +0000 (16:26 +0100)
committerAntonio Ospite <ao2@ao2.it>
Wed, 7 Dec 2016 16:04:47 +0000 (17:04 +0100)
vidi-timeline.py
vidi/Timeline.py

index 17165fc..07639e6 100755 (executable)
@@ -22,15 +22,30 @@ import sys
 import mido
 import vidi
 
 import mido
 import vidi
 
-# TODO: turn that into a command line option
+# TODO: turn these into command line options
 ADD_REST_BACKGROUND = True
 ADD_REST_BACKGROUND = True
+ADD_TITLE = True
+TITLE_TEXT = None
+TITLE_DURATION = 5
+TITLE_CREDITS = "Created with vidi-timeline\nhttps://git.ao2.it/vidi-player.git"
 
 
 def timeline_from_midi(midi_file, video_font_path):
     timeline = vidi.Timeline()
 
 
 
 def timeline_from_midi(midi_file, video_font_path):
     timeline = vidi.Timeline()
 
-    elapsed_time = 0
-    start_time = 0
+    if ADD_TITLE:
+        title = TITLE_TEXT
+        if not title:
+            title = os.path.splitext(os.path.basename(midi_file.filename))[0]
+            title += "\n\n"
+            title += TITLE_CREDITS
+
+        timeline.add_title_clip(title, 0, TITLE_DURATION)
+
+        elapsed_time = start_time = TITLE_DURATION
+    else:
+        elapsed_time = start_time = 0
+
     for msg in midi_file:
         elapsed_time += msg.time
         if vidi.is_note_on(msg) and msg.channel == 0:
     for msg in midi_file:
         elapsed_time += msg.time
         if vidi.is_note_on(msg) and msg.channel == 0:
index 59c891a..da8e83c 100755 (executable)
@@ -29,6 +29,10 @@ GES.init()
 
 from .Player import Player
 
 
 from .Player import Player
 
+TITLE_BACKGROUND = 0xFF000000
+TITLE_COLOR = 0xFFFFFFFF
+TITLE_OUTLINE_COLOR = 0x00000000
+TITLE_FONT_DESC = "Georgia, 24"
 
 class Timeline(object):
     def __init__(self):
 
 class Timeline(object):
     def __init__(self):
@@ -47,6 +51,23 @@ class Timeline(object):
         ges_pipeline.set_timeline(self.timeline)
         self.player = Player(ges_pipeline)
 
         ges_pipeline.set_timeline(self.timeline)
         self.player = Player(ges_pipeline)
 
+    def add_title_clip(self, text, start_time, duration):
+        title_clip = GES.TitleClip()
+        title_clip.set_start(start_time * Gst.SECOND)
+        title_clip.set_duration(duration * Gst.SECOND)
+        self.layer.add_clip(title_clip)
+
+        # Now that the clip is inserted in the timeline, it has a source which
+        # can be used to set its properties. (comment taken from Pitivi)
+        title_source = title_clip.find_track_element(None, GES.TitleSource)
+        title_source.set_child_property("text", text)
+        title_source.set_child_property("background", TITLE_BACKGROUND)
+        title_source.set_child_property("color", TITLE_COLOR)
+        title_source.set_child_property("outline-color", TITLE_OUTLINE_COLOR)
+        title_source.set_child_property("font-desc", TITLE_FONT_DESC)
+        title_source.set_child_property("halignment", GES.TextVAlign.ABSOLUTE)
+        title_source.set_child_property("valignment", GES.TextHAlign.ABSOLUTE)
+
     def add_clip(self, clip_path, start_time, duration):
         clip_uri = Gst.filename_to_uri(clip_path)
         asset = GES.UriClipAsset.request_sync(clip_uri)
     def add_clip(self, clip_path, start_time, duration):
         clip_uri = Gst.filename_to_uri(clip_path)
         asset = GES.UriClipAsset.request_sync(clip_uri)