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

相关文章

C语言字符函数和字符串函数示例详解

《C语言字符函数和字符串函数示例详解》本文详细介绍了C语言中字符分类函数、字符转换函数及字符串操作函数的使用方法,并通过示例代码展示了如何实现这些功能,通过这些内容,读者可以深入理解并掌握C语言中的字... 目录一、字符分类函数二、字符转换函数三、strlen的使用和模拟实现3.1strlen函数3.2st

一文教你解决Python不支持中文路径的问题

《一文教你解决Python不支持中文路径的问题》Python是一种广泛使用的高级编程语言,然而在处理包含中文字符的文件路径时,Python有时会表现出一些不友好的行为,下面小编就来为大家介绍一下具体的... 目录问题背景解决方案1. 设置正确的文件编码2. 使用pathlib模块3. 转换路径为Unicod

C# string转unicode字符的实现

《C#string转unicode字符的实现》本文主要介绍了C#string转unicode字符的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录1. 获取字符串中每个字符的 Unicode 值示例代码:输出:2. 将 Unicode 值格式化

Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)

《Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)》本文介绍了如何使用Python和Selenium结合ddddocr库实现图片验证码的识别和点击功能,感兴趣的朋友一起看... 目录1.获取图片2.目标识别3.背景坐标识别3.1 ddddocr3.2 打码平台4.坐标点击5.图

Java下载文件中文文件名乱码的解决方案(文件名包含很多%)

《Java下载文件中文文件名乱码的解决方案(文件名包含很多%)》Java下载文件时,文件名中文乱码问题通常是由于编码不正确导致的,使用`URLEncoder.encode(filepath,UTF-8... 目录Java下载文件中文文件名乱码问题一般情况下,大家都是这样为了解决这个问题最终解决总结Java下

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