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#去掉文件夹或文件名非法字符net类库提供了非法字符的数组这里还有个小窍门总结C#去掉文件夹或文件名非法字符实现有输入字

RedisTemplate默认序列化方式显示中文乱码的解决

《RedisTemplate默认序列化方式显示中文乱码的解决》本文主要介绍了SpringDataRedis默认使用JdkSerializationRedisSerializer导致数据乱码,文中通过示... 目录1. 问题原因2. 解决方案3. 配置类示例4. 配置说明5. 使用示例6. 验证存储结果7.

idea报错java: 非法字符: ‘\ufeff‘的解决步骤以及说明

《idea报错java:非法字符:‘ufeff‘的解决步骤以及说明》:本文主要介绍idea报错java:非法字符:ufeff的解决步骤以及说明,文章详细解释了为什么在Java中会出现uf... 目录BOM是什么?1. BOM的作用2. 为什么会出现 \ufeff 错误?3. 如何解决 \ufeff 问题?最

使用Java编写一个字符脱敏工具类

《使用Java编写一个字符脱敏工具类》这篇文章主要为大家详细介绍了如何使用Java编写一个字符脱敏工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、字符脱敏工具类2、测试工具类3、测试结果1、字符脱敏工具类import lombok.extern.slf4j.Slf4j

解决IDEA报错:编码GBK的不可映射字符问题

《解决IDEA报错:编码GBK的不可映射字符问题》:本文主要介绍解决IDEA报错:编码GBK的不可映射字符问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录IDEA报错:编码GBK的不可映射字符终端软件问题描述原因分析解决方案方法1:将命令改为方法2:右下jav

基于Python和MoviePy实现照片管理和视频合成工具

《基于Python和MoviePy实现照片管理和视频合成工具》在这篇博客中,我们将详细剖析一个基于Python的图形界面应用程序,该程序使用wxPython构建用户界面,并结合MoviePy、Pill... 目录引言项目概述代码结构分析1. 导入和依赖2. 主类:PhotoManager初始化方法:__in

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.图