Beispiel #1
0
    def crop_scale(self, dimensions: Tuple[int, int]) -> 'Segment':
        """
        Returns
        -------
        A new Segment, cropped and/or scaled as necessary to reach specified dimensions
        """
        segment = self.copy()
        dimensions = Dimensions(*dimensions)

        def blur(image):
            #return cv2.GaussianBlur(image.astype(float),(99,99),0)
            return cv2.blur(image.astype(float), (30, 30), 0)

        #if segment.aspect_ratio != dimensions.aspect_ratio:
        # Crop segment to match aspect ratio
        #segment = segment.crop_to_aspect_ratio(dimensions.aspect_ratio)

        #if segment.dimensions != dimensions:
        # Resize segment to reach final dimensions
        #segment = segment.resize(dimensions)

        replace_width = dimensions.width
        replace_height = dimensions.height

        if segment.aspect_ratio != replace_width / replace_height:

            ##########################################Below 1 AR##################################################
            if segment.aspect_ratio <= 1:
                #print("below 1")
                if segment.size[0] != replace_width:
                    segment = segment.resize(width=replace_width)
                if segment.size[1] != replace_height:
                    segment = segment.resize(height=replace_height)

                segment = segment.set_position("center")
                background1 = segment.crop(x1=0, width=(segment.w / 2))
                background2 = segment.crop(x1=(segment.w / 2),
                                           width=(segment.w / 2))

                if segment.aspect_ratio != 1:
                    #print("Not 1:1")
                    background1 = background1.resize(
                        width=(replace_width - segment.w) / 2)
                    background2 = background2.resize(
                        width=((replace_width - segment.w) / 2) + 1)

                background1 = background1.set_position(
                    ("left", 'center')).fl_image(blur)
                background2 = background2.set_position(
                    ("right", 'center')).fl_image(blur)

                segment = CompositeVideoClip(
                    [background1, background2, segment],
                    size=(replace_width, replace_height))
                segment.effects = self.effects

        #########################################Above 1080 ratio###############################################
            elif segment.aspect_ratio > round(replace_width / replace_height,
                                              2):
                #print("above 1.7")
                if segment.size[1] != replace_height:
                    segment = segment.resize(height=replace_height)
                if segment.size[0] != replace_width:
                    segment = segment.resize(width=replace_width)

                test = (replace_height - segment.h) / 2
                segment = segment.set_position("center")
                background1 = segment.crop(
                    y1=0, height=((replace_height - segment.h) / 2))
                background2 = segment.crop(y1=segment.h - test, height=test)

                background1 = background1.set_position(
                    ('center', 'top')).fl_image(blur)
                background2 = background2.set_position(
                    ('center', 'bottom')).fl_image(blur)
                segment = CompositeVideoClip(
                    [background1, background2, segment],
                    size=(replace_width, replace_height))
                segment.effects = self.effects

    ######################################other#######################################################
            elif segment.aspect_ratio > 1 and segment.aspect_ratio < round(
                    replace_width / replace_height, 2):
                #print('midway between')
                if segment.size[0] != replace_width:
                    segment = segment.resize(width=replace_width)
                if segment.size[1] != replace_height:
                    segment = segment.resize(height=replace_height)

                segment = segment.set_position("center")
                background1 = segment.crop(x1=0, width=(segment.w / 2))
                background2 = segment.crop(x1=(segment.w / 2),
                                           width=(segment.w / 2))

                background1 = background1.set_position(
                    ("left", 'center')).fl_image(blur)
                background2 = background2.set_position(
                    ("right", 'center')).fl_image(blur)
                segment = CompositeVideoClip(
                    [background1, background2, segment],
                    size=(replace_width, replace_height))
                segment.effects = self.effects

        #############################################################################################

        if segment.w != replace_width and segment.h != replace_height:
            segment = segment.resize((replace_width, replace_height))
            #print("On Aspect, too big or small")

        return segment
Beispiel #2
0
def build_start_title(vid, title_end, texts, text_i):
    dirname = os.path.dirname(__file__) # Relative path to the folder
    # Images
    maila = "Karttu.png"
    logo = "logo.png"
    # Fonts
    font = "Ebrima-Bold"
    # font = "Fixedsys Regular"
    fontsize = 150
    color = "#e94b3cff"
    stroke_color = "#1d1b1b"

    if float(title_end) - 4.0 > 0.0:
        clip = vid.subclip(float(title_end) - 4.0, title_end)
    else: # if start is shorter than 4 s
        rate = title_end / 4
        clip = vid.subclip(0, title_end).speedx(rate)
    t = texts[text_i]
    t = t.replace('\\n', '\n')
    t = t.split(";")    # separate players and event. Example: player1 vs. player2; Event 2020
    if len(t) == 2:
        players = t[0]
        event = t[1]
    else:
        event = t[0]
        players = ""

    maila_img = ImageClip(os.path.join(dirname ,maila), duration = 4)\
                .resize(height = int(clip.size[1] * 0.7))
    logo_img = ImageClip(os.path.join(dirname ,logo), duration = 4)\
                .resize(width = maila_img.size[0] + 100)\
                .set_position(("center", "top"))
    maila_img = maila_img.margin(top = logo_img.size[1],\
                                 left = int((logo_img.size[0] - maila_img.size[0]) / 2),\
                                 right = int((logo_img.size[0] - maila_img.size[0]) / 2),\
                                 opacity = 0)
    images = CompositeVideoClip([maila_img,logo_img])
    images_rot = images.set_position("center")\
                .resize(lambda t: min(0.2 + t*1.5 , 1))\
                .rotate(lambda t: 500 * (tanh(t*4 + 0.5) * -5 + 5), resample = "nearest")
    event_txt = TextClip(event,
                         stroke_color = stroke_color,\
                         stroke_width = 4, color=color,\
                         font= font,\
                         kerning = 5,\
                         fontsize=fontsize)\
                .set_duration(4)
    event_txt = event_txt.resize(width = clip.size[0] / 2 - 300)
    event_txt = event_txt.set_pos(lambda t:(min(clip.size[0]/2 + 100,-800 + t * 1500),clip.size[1]/2))
    player_txt = TextClip(players,\
                          stroke_color = stroke_color,\
                          stroke_width = 4, color=color,\
                          font=font,\
                          kerning = 5,\
                          fontsize=fontsize)\
                .set_duration(4)
    player_txt = player_txt.set_pos(lambda t:(max(clip.size[0]/2 - player_txt.size[0]- 100, clip.size[0] + 600 + t * -1800),clip.size[1]/2 - player_txt.size[1]/2))
    mask_left = np.zeros((clip.size[1],clip.size[0], 4))
    mask_right = B = np.copy(mask_left)
    mask_left = cv2.rectangle(mask_left, (0, 0), (int(clip.size[0]/2), clip.size[1]), (255,255,255,255), -1)
    mask_right = cv2.rectangle(mask_right, (int(clip.size[0]/2), 0), (clip.size[0], clip.size[1]),  (255,255,255,255), -1)
    mask_left = ImageClip(mask_left, duration=2, ismask=True)
    mask_right = ImageClip(mask_right, duration=2, ismask=True)
    # cv2.imwrite("kala.png",mask_right)
    comp_clip = CompositeVideoClip([clip, event_txt, clip.set_mask(mask_left)])
    comp_clip = CompositeVideoClip([comp_clip, player_txt, comp_clip.set_mask(mask_right), images_rot])
    return comp_clip, text_i + 1