moviepy中文字符特效

2023-12-04 09:48
文章标签 特效 中文 字符 moviepy

本文主要是介绍moviepy中文字符特效,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

moviepy文档中给出了一个《移动的字母》的程序实例。代码写的有些繁琐,而且对于中文字符也会出错,在这里修正一下,使其支持中文字符,也易于理解。

原文链接:moviepy-cn
原文效果:
在这里插入图片描述
原文中保留的代码:

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)  # dampinga = i * np.pi / nletters  # angle of the movementv = 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)  # dampinga = i * np.pi / nletters  # angle of the movementv = 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)

上边这段代码,是产生文字特效的函数,返回随时间变化字符所在的位置,我们拷贝过来调用即可。
原文中使用findObjects()方法,返回由单个英文字符组成的图片剪辑列表。但当使用中文字符时,可能返回不完整的中文字符,例如对于"中文特效"四个字符,效果如下:
在这里插入图片描述
为了能够支持中文,重建文字动画函数:

import moviepy.editor as mpe
def txtanimation(screensize,lettersize,text,func,offsetx,offsety):screenw=screensize[0]    #屏幕宽度screenh=screensize[1]    #屏幕高度letterw=lettersize[0]    #单个字符宽度letterh=lettersize[1]    #单个字符高度letternum=len(text)    #字符数量letteronex=(screenw-letterw*letternum)/2+offsetx    #首个字符在屏幕中的x坐标letteroney=(screenh-letterh)/2+offsety    #首个字符在屏幕中的y坐标tclips = []    #剪辑列表for i in range(letternum):tclip = mpe.TextClip(text[i], color='white', font='KaiTi', kerning=5, fontsize=70, 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=['树','大','好','乘','凉']
clip1=mpe.CompositeVideoClip(txtanimation(screensize,lettersize,text,cascade,0,-100),size=screensize).subclip(0,10)
clip2=mpe.CompositeVideoClip(txtanimation(screensize,lettersize,text,vortexout,0,-100),size=screensize).subclip(0,5)
iclip=mpe.ImageClip('.\\pic\\tree.jpg').set_duration(10)
clip=mpe.CompositeVideoClip([iclip,clip1.fadeout(2),clip2.set_start(10).fadein(1)])
clip.write_gif('.\\pic\\letter.gif',fps=5)

效果如下:
在这里插入图片描述
玉不琢、不成器,人不学、不知义!

这篇关于moviepy中文字符特效的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/453007

相关文章

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

Go语言实现将中文转化为拼音功能

《Go语言实现将中文转化为拼音功能》这篇文章主要为大家详细介绍了Go语言中如何实现将中文转化为拼音功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 有这么一个需求:新用户入职 创建一系列账号比较麻烦,打算通过接口传入姓名进行初始化。想把姓名转化成拼音。因为有些账号即需要中文也需要英

Go语言使用Buffer实现高性能处理字节和字符

《Go语言使用Buffer实现高性能处理字节和字符》在Go中,bytes.Buffer是一个非常高效的类型,用于处理字节数据的读写操作,本文将详细介绍一下如何使用Buffer实现高性能处理字节和... 目录1. bytes.Buffer 的基本用法1.1. 创建和初始化 Buffer1.2. 使用 Writ

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

vscode中文乱码问题,注释,终端,调试乱码一劳永逸版

忘记咋回事突然出现了乱码问题,很多方法都试了,注释乱码解决了,终端又乱码,调试窗口也乱码,最后经过本人不懈努力,终于全部解决了,现在分享给大家我的方法。 乱码的原因是各个地方用的编码格式不统一,所以把他们设成统一的utf8. 1.电脑的编码格式 开始-设置-时间和语言-语言和区域 管理语言设置-更改系统区域设置-勾选Bata版:使用utf8-确定-然后按指示重启 2.vscode

解决Office Word不能切换中文输入

我们在使用WORD的时可能会经常碰到WORD中无法输入中文的情况。因为,虽然我们安装了搜狗输入法,但是到我们在WORD中使用搜狗的输入法的切换中英文的按键的时候会发现根本没有效果,无法将输入法切换成中文的。下面我就介绍一下如何在WORD中把搜狗输入法切换到中文。

string字符会调用new分配堆内存吗

gcc的string默认大小是32个字节,字符串小于等于15直接保存在栈上,超过之后才会使用new分配。

如何将一个文件里不包含某个字符的行输出到另一个文件?

第一种: grep -v 'string' filename > newfilenamegrep -v 'string' filename >> newfilename 第二种: sed -n '/string/!'p filename > newfilenamesed -n '/string/!'p filename >> newfilename

『功能项目』战士的平A特效【35】

我们打开上一篇34武器的切换实例的项目, 本章要做的事情是在战士的每次按A键时在指定位置生成一个平A特效 首先将之前下载的技能拖拽至场景中 完全解压缩后重命名为AEffect 拖拽至预制体文件夹 进入主角动画的战士动画层级 双击第一次攻击 选择Animation 创建事件 创建的动画事件帧放在攻击动画挥剑指定处 命名为PerpetualAtt

第49课 Scratch入门篇:骇客任务背景特效

骇客任务背景特效 故事背景:   骇客帝国特色背景在黑色中慢慢滚动着! 程序原理:  1 、 角色的设计技巧  2 、克隆体的应用及特效的使用 开始编程   1、使用 黑色的背景: ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/7d74c872f06b4d9fbc88aecee634b074.png#pic_center)   2