ai-content-maker/.venv/Lib/site-packages/moviepy/video/tools/credits.py

119 lines
3.3 KiB
Python
Raw Permalink Normal View History

2024-05-11 23:00:43 +03:00
"""
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.compositing.CompositeVideoClip import CompositeVideoClip
from moviepy.video.fx.resize import resize
from moviepy.video.VideoClip import ImageClip, TextClip
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
texts = []
oneline = True
with open(creditfile) as f:
for l in f:
if l.startswith(('\n', '#')):
# exclude blank lines or comments
continue
elif l.startswith('.blank'):
# ..blank n
for i in range(int(l.split(' ')[1])):
texts.append(['\n', '\n'])
elif l.startswith('..'):
texts.append([l[2:], ''])
oneline = True
elif 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)