首页 > 其他分享 >moviepy字符动态效果

moviepy字符动态效果

时间:2024-12-06 17:00:32浏览次数:3  
标签:字符 moviepy screenpos lettersize 动态效果 screensize np tclip lambda

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)

标签:字符,moviepy,screenpos,lettersize,动态效果,screensize,np,tclip,lambda
From: https://www.cnblogs.com/msmsga/p/18591121

相关文章

  • 字符串拼接有哪些方式?哪种性能好?
    在前端开发中,字符串拼接有很多种方式,它们的性能各有优劣。以下列出几种常见的方法,并分析它们的性能:1.加号运算符(+)这是最简单直观的方法,也是初学者最常用的。letstr1="Hello";letstr2="World";letresult=str1+""+str2;//result="HelloWorld"优点:......
  • 【知识】字符串 最小表示法
    问题描述:最小表示法是字符串\(S\)循环同构的所有字符串中,字典序最小的串是哪个。最小表示法:考虑对于一对字符串\(A,B\),它们在原字符串\(S\)中的起始位置分别为\(i,j\),且它们的前\(k\)个字符均相同,即\[S[i\cdotsi+k-1]=S[j\cdotsj+k-1]\]不妨先考虑\(S[i+k]>......
  • 使用 `window.crypto.subtle.digest` 为字符串生成SHA-256哈希签名
    使用window.crypto.subtle.digest方法,可以为字符串生成哈希签名。以下是一个示例,演示如何为字符串生成SHA-256哈希值:asyncfunctiongenerateHash(text){//将文本编码为UTF-8字节数组constencoder=newTextEncoder();constdata=encoder.encode(text......
  • mybatis Integer字段值传0,判断不等于空字符串,识别成空字符串排查解决
    mybatisInteger字段值传0,判断不等于空字符串,识别成空字符串排查解决根本原因:mybatis将传入的Integer类型的0被识别成空字符串在mbatis中使用Xml配置sql语句时,出现了这样一个问题。入的参数为0去做判断时,mybatis会把参数0当成是空字符串去判断而引起查询结果错误。insertinto......
  • java 去重元素,元素是一组没有顺序的字符
    1、需求描述:            有一个大集合,大集合中的元素是是一个小集合,要求在大集合中的小集合不能重复,小集合中的元素没有顺序。例如有个大集合[[a,b],[b,c]]向这个元素中添加元素[b,a]就是添加重复元素因为与[a,b]是一样的都包含a,b添加[c,d]就可以。 2、实现......
  • 字符串函数和内存函数
    字符串函数1、strlcpy 【字符串拷贝】(将原字符串中的字符拷贝到目标字符数组中,包括终止符号\0,并在这里停止;为了避免越界,目标字符串数组应该足够大去接收)......
  • 查询某字段有特殊字符(PATINDEX函数)
    查询某字段有特殊字符(PATINDEX函数)创建时间:2023年11月09日概要在工作中遇到用户的usercode字段出现特殊字符。例如点,空格这些字符在开发中没有很好去做校验,需要在后台数据库中将这些有问题进行修改。技术server的select查询语句server的update更新语句查询语法SELECT*......
  • 06-转义字符
    06-转义字符1、打印信息(1)问题请在屏幕上打印出信息:c:\code\test.c。#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>intmain(){ printf("c:\code\test.c"); return0;}(2)原因因为存在转义字符,导致信息本能按照要求打印出来。2、C语言中的转义字符转......
  • 05-字符串
    05-字符串由英文双引号(DoubleQuote)引起来的一串字符称为字符串字面值(StringLiteral),或者简称字符串。【注】C语言中没有字符串类型!!!"abcdefghijklmnopqrstuvwxyz"一、证明(\0)字符串的结束标志是一个\0(转义字符),被隐藏起来了。【注】在计算字符串长度的时候\0是结束标志,不......
  • 反转字符串中每个单词的字符顺序,但保持单词之间的相对顺序不变(C++)
     需求:用户输入一行字符(一个英语句子lastweek,Iwenttocinima.),将该行字符按照每个单词逆序输出(即输出:tsalkeew,Itnewotaminic.)。要求1.写一个函数用来实现每个单词的字符顺序颠倒,拿到头和尾,对代码进行遍历(判断是否为单词首字母:当前为字母,前面是空格或者什么都没有;判......