posts - 11,  comments - 0,  views - 663
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

moviepy==1.0.2
抄的别人的

import moviepy.editor as mpe
import numpy as np

rotMatrix = lambda a: np.array( [[np.cos(a),np.sin(a)],  [-np.sin(a),np.cos(a)]] )
def vortex(screenpos, i, nletters):
    d = lambda t: 1.0 / (0.3 + t ** 8)  # damping
    a = i * np.pi / nletters  # angle of the movement
    v = rotMatrix(a).dot([-1, 0])
    if i % 2: v[1] = -v[1]
    return lambda t: screenpos + 400 * d(t) * rotMatrix(0.5 * d(t) * a).dot(v)

def cascade(screenpos, i, nletters):
    v = np.array([0, -1])
    d = lambda t: 1 if t < 0 else abs(np.sinc(t) / (1 + t ** 4))
    return lambda t: screenpos + v * 400 * d(t - 0.15 * i)

def arrive(screenpos, i, nletters):
    v = np.array([-1, 0])
    d = lambda t: max(0, 3 - 3 * t)
    return lambda t: screenpos - 400 * v * d(t - 0.2 * i)

# 消失
def vortexout(screenpos, i, nletters):
    d = lambda t: max(0, t)  # damping
    a = i * np.pi / nletters  # angle of the movement
    v = rotMatrix(a).dot([-1, 0])
    if i % 2: v[1] = -v[1]
    return lambda t: screenpos + 400 * d(t - 0.1 * i) * rotMatrix(-0.2 * d(t) * a).dot(v)


def txtanimation(screensize, lettersize, text, func, offsetx, offsety, fontsize=70, color='white'):
    screenw = screensize[0]  # 屏幕宽度
    screenh = screensize[1]  # 屏幕高度
    letterw = lettersize[0]  # 单个字符宽度
    letterh = lettersize[1]  # 单个字符高度
    letternum = len(text)  # 字符数量

    # 字符的起始位置计算
    letteronex = (screenw - letterw * letternum) / 2 + offsetx  # 水平偏移
    letteroney = (screenh - letterh) / 2 + offsety  # 垂直偏移

    tclips = []  # 剪辑列表
    for i in range(letternum):
        tclip = mpe.TextClip(
            text[i],
            color=color,  # 设置字体颜色
            font='KaiTi',
            kerning=5,
            fontsize=fontsize,  # 设置字体大小
            size=lettersize
        )  # 创建单个字符文本剪辑

        # 设置字符的初始位置
        tclip = tclip.set_pos((letteronex + i * letterw, letteroney))

        # 调用特效函数来调整字符的位置
        tclip = tclip.set_pos(func(tclip.pos(0), i, letternum))

        # 添加到剪辑列表
        tclips.append(tclip)

    return tclips


screensize=(640,480)
lettersize=(80,80)
text=['s','啊','及','s','a']
clip1 = mpe.CompositeVideoClip(
    txtanimation(screensize, lettersize, text, cascade, 50, 100, fontsize=100, color='red'),
    size=screensize
).subclip(0, 10)
clip1 = clip1.fadeout(3)
# clip2 = mpe.CompositeVideoClip(
#     txtanimation(screensize, lettersize, text, vortexout, 50, 100, fontsize=100, color='blue'),
#     size=screensize
# ).subclip(0, 5)
iclip=mpe.ImageClip('1128.jpg').set_duration(10)
clip=mpe.CompositeVideoClip([iclip,clip1])
clip.write_videofile('letter.mp4', codec="libx264", fps=24)
posted on   msms123  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示