目录
1. moviepy安装
版本选择
moviepy有两个主流版本:
1.0.3 和 2.x
目前2.x版本称不上好用, 语法上有所改进,除此之外变动不算很大,但与1.x版本不兼容,
因此是否升级到2.x全看个人需求,本人先接触并学习使用了1.0.3版本,所以就用该版本展开。
安装命令
pip install moviepy==1.0.3
# 或者安装最新版2.x
pip install moviepy
2. 使用文档
1.0.3文档
https://zulko.github.io/moviepy/v1.0.3/index.html
除了快速入门指导外,还有一个画廊章节(Gallery)值得一看,可以提供一些剪辑的进阶思路
中文文档
https://moviepy-cn.readthedocs.io/zh/latest/index.html
写的比较好的学习博客
https://blog.51cto.com/u_11866025/8923754
可以作为1.0.3版本基础用法的速查表
2.x文档
https://zulko.github.io/moviepy/index.html
放弃升级到2.x的一个理由就是他的用户指南有代码跑不通。。。。
1.0.3到2.x快速上手
经过实际测试,1.0.3的代码,改动几个地方就可以在2.x的环境上跑通:
- 导入时去掉
.editor
# 1.0.3的依赖导入
from moviepy.editor import *
# 2.x的依赖导入
from moviepy import *
set_
方法改成with_
方法
# 示例
# 1.0.3
clip.set_duration()
# 2.x
clip.with_duration()
- vx特效调用方式本来就有多种,2.x统一了下
增加了一个.with_effect()
调用方式
3. 可能遇到的问题
3.1 依赖问题
使用TextClip渲染文本需要安装ImageMagick
库
可能会用到pygame
库
3.2 中文显示问题
如果中文文本没有出现,大概率是字体库的问题,换一个font即可。
查看moviepy支持的字体库:
from moviepy.editor import TextClip
print(TextClip.list("font"))
4. 特效示例中文显示的问题
移动的字母效果看上去非常不错,但实际复现时就会发现: 中文显示不全
即便用了正确的字体也会出现该问题
这是因为moviepy的findObject方法是基于像素级区域占比来识别独立对象的,
别说形状各异的汉字了,连字母里的i
都识别不了。。。。
这个示例代码把文本改成white text
就直接露馅儿了
整行文本只剩了Wh
两个字母出镜,其他的隐身了(bishi)
所以实际上想要正常显示中文,就要自己重写分词逻辑
我的解决思路是根据字数和每个字的像素尺寸逐字创建textclip,然后组成列表,和findObject返回值保持一致,这样就可以只替换函数调用,后续代码不用变。
具体代码挖坑待填(目前写的太乱,正在增加自动换行的逻辑)