首页 > 解决方案 > 在 MoviePy 中有效地逐帧更改文本属性?

问题描述

我试图能够逐帧更改剪辑对象的任意部分以制作自定义效果。我可以使用以下代码来实现这一点,但效率极低。

def make_text(clip, text=''):
    duration = clip.duration
    fps = clip.fps
    frame_duration = math.floor(duration * fps)

    text_frames = []
    print(duration, fps, math.floor(duration * fps))
    for t in range(frame_duration):
        text_frame = TextClip(text, font='Arial', color='green', fontsize=120)
        text_frame = text_frame.set_duration(t/ fps)
        text_frame = text_frame.set_position(50 + t**2.67, 'center')
        text_frames.append(text_frame)

    text = concatenate(text_frames)
    clip_text = CompositeVideoClip([clip, text])
    return clip_text

我知道我可以通过简单地给它一个函数来更有效地改变文本的位置 t - 上面的代码旨在证明任何剪辑的任意属性(如文本字距调整、文本大小)的概念证明文档中的一些自定义效果示例,但即使是那些似乎也仅限于某些类。我似乎无法找到一种方法为任何对象的任何部分编写好的代码,而不会大大降低程序的速度 - 有没有办法有效地实现这一点?

标签: pythonmoviepy

解决方案


推荐阅读