moviepy.video.tools.credits — MoviePy 1.0.1 documentation

# Source code for moviepy.video.tools.credits

    """
    This module contains different functions to make end and opening
    credits, even though it is difficult to fill everyone needs in this
    matter.
    """

    from moviepy.video.VideoClip import TextClip, ImageClip
    from moviepy.video.compositing.CompositeVideoClip import CompositeVideoClip
    from moviepy.video.fx.resize import resize

    def credits1(creditfile, width, stretch=30, color='white', stroke_color='black',
                 stroke_width=2, font='Impact-Normal', fontsize=60, gap=0):
        """

        Parameters
        -----------

        creditfile
          A text file whose content must be as follows: ::

            # This is a comment
            # The next line says : leave 4 blank lines
            .blank 4

            ..Executive Story Editor
            MARCEL DURAND

            ..Associate Producers
            MARTIN MARCEL
            DIDIER MARTIN

            ..Music Supervisor
            JEAN DIDIER

        width
          Total width of the credits text in pixels

        gap
          Horizontal gap in pixels between the jobs and the names

        color
          Color of the text. See ``TextClip.list('color')``
          for a list of acceptable names.

        font
          Name of the font to use. See ``TextClip.list('font')`` for
          the list of fonts you can use on your computer.

        fontsize
          Size of font to use

        stroke_color
          Color of the stroke (=contour line) of the text. If ``None``,
          there will be no stroke.

        stroke_width
          Width of the stroke, in pixels. Can be a float, like 1.5.

        Returns
        ---------

        image
          An ImageClip instance that looks like this and can be scrolled
          to make some credits:

              Executive Story Editor    MARCEL DURAND
                 Associate Producers    MARTIN MARCEL
                                        DIDIER MARTIN
                    Music Supervisor    JEAN DIDIER

        """

        # PARSE THE TXT FILE

        with open(creditfile) as f:
            lines = f.readlines()

        lines = filter(lambda x: not x.startswith('\n'), lines)
        texts = []
        oneline = True
        for l in lines:
            if not l.startswith('#'):
                if l.startswith('.blank'):
                    for i in range(int(l.split(' ')[1])):
                        texts.append(['\n', '\n'])
                elif l.startswith('..'):
                    texts.append([l[2:], ''])
                    oneline = True
                else:
                    if oneline:
                        texts.append(['', l])
                        oneline = False
                    else:
                        texts.append(['\n', l])

        left, right = ["".join(l) for l in zip(*texts)]

        # MAKE TWO COLUMNS FOR THE CREDITS

        left, right = [TextClip(txt, color=color, stroke_color=stroke_color,
                                stroke_width=stroke_width, font=font,
                                fontsize=fontsize, align=al)
                       for txt, al in [(left, 'East'), (right, 'West')]]

        cc = CompositeVideoClip([left, right.set_position((left.w+gap, 0))],
                                size=(left.w+right.w+gap, right.h),
                                bg_color=None)

        # SCALE TO THE REQUIRED SIZE

        scaled = resize(cc, width=width)

        # TRANSFORM THE WHOLE CREDIT CLIP INTO AN ImageCLip

        imclip = ImageClip(scaled.get_frame(0))
        amask = ImageClip(scaled.mask.get_frame(0), ismask=True)

        return imclip.set_mask(amask)