radrupt 发表于 2018-10-13 16:51:10

ffmpeg里如何实现cubic-bezier曲线的效果

本帖最后由 radrupt 于 2018-10-14 22:31 编辑

效果如下
http://cubic-bezier.com/#1,.06,.66,1.04

radrupt 发表于 2018-10-14 22:32:45

这个问题目前已经搞定了
使用moviepy
import numpy as np
import bezier
from moviepy.editor import *
from moviepy.video.tools.segmenting import findObjects

# WE CREATE THE TEXT THAT IS GOING TO MOVE, WE CENTER IT.

screensize = (960,544)
txtClip = TextClip('王迪',color='white', font="MicrosoftYaHei",
                   kerning = 5, fontsize=100)
cvc = CompositeVideoClip( ,
                        size=screensize)

# THE NEXT FOUR FUNCTIONS DEFINE FOUR WAYS OF MOVING THE LETTERS
print ( TextClip.list("font") )
nodes1 = np.asfortranarray([
,
,
])
# 三阶bezier curve
curve1 = bezier.Curve(nodes1, degree=3)

# for t in range(0,10):
#   print(t,curve1.evaluate(t/10))

# 字符当前在屏幕上的位置,第几个字符,字符总数
def moveUp(screenpos,i,nletters):
    v = np.array()
    s = 1
    d = lambda t : 1 if t <=s else 0
    return lambda t: screenpos +d(t)*v*(320*(1-curve1.evaluate(t/s)))

# WE USE THE PLUGIN findObjects TO LOCATE AND SEPARATE EACH LETTER
letters = findObjects(cvc) # a list of ImageClips


# WE ANIMATE THE LETTERS

def moveLetters(letters, funcpos):
    return [ letter.set_pos(funcpos(letter.screenpos,i,len(letters)))
            for i,letter in enumerate(letters)]

# 遍历函数数组,将灭一个函数赋值给CompositeVideoClip,
clip = CompositeVideoClip( moveLetters(letters,moveUp),
                              size = screensize).subclip(0,5)

# WE CONCATENATE EVERYTHING AND WRITE TO A FILE

clip.write_videofile('./new.mp4',fps=25,codec='mpeg4')
页: [1]
查看完整版本: ffmpeg里如何实现cubic-bezier曲线的效果