常见错误
安装MoviePy运行代码如果报错缺少ImageMagick或decode转码错误,“This error can be due to the fact that ImageMagick is not installed on your computer”,这是需要安装ImageMagic可执行文件。ImageMagic是用在视频中填入文本信息的工具,需要单独下载exe程序安装。可以参考下面这篇文章解决。
from moviepy.editor import*#视频旋转180度
clip = VideoFileClip("cat01.mp4").rotate(180)#The size of the clip, (width,heigth) in pixelsprint(clip.size)#(720, 1280)#播放视频#clip.ipython_display(width=100)#写入视频
clip.write_videofile("cat01_rotate.mp4")
import numpy as np
from moviepy.editor import*from moviepy.video.tools.segmenting import findObjects
# WE CREATE THE TEXT THAT IS GOING TO MOVE, WE CENTER IT.
screensize =(720,460)
txtClip = TextClip('Cool effect',color='white', font="Amiri-Bold",
kerning =5, fontsize=100)
cvc = CompositeVideoClip([txtClip.set_pos('center')],
size=screensize)# THE NEXT FOUR FUNCTIONS DEFINE FOUR WAYS OF MOVING THE LETTERS# helper function
rotMatrix =lambda a: np.array([[np.cos(a),np.sin(a)],[-np.sin(a),np.cos(a)]])defvortex(screenpos,i,nletters):
d =lambda t :1.0/(0.3+t**8)#damping
a = i*np.pi/ nletters # angle of the movement
v = rotMatrix(a).dot([-1,0])if i%2: v[1]=-v[1]returnlambda t: screenpos+400*d(t)*rotMatrix(0.5*d(t)*a).dot(v)defcascade(screenpos,i,nletters):
v = np.array([0,-1])
d =lambda t :1if t<0elseabs(np.sinc(t)/(1+t**4))returnlambda t: screenpos+v*400*d(t-0.15*i)defarrive(screenpos,i,nletters):
v = np.array([-1,0])
d =lambda t :max(0,3-3*t)returnlambda t: screenpos-400*v*d(t-0.2*i)defvortexout(screenpos,i,nletters):
d =lambda t :max(0,t)#damping
a = i*np.pi/ nletters # angle of the movement
v = rotMatrix(a).dot([-1,0])if i%2: v[1]=-v[1]returnlambda t: screenpos+400*d(t-0.1*i)*rotMatrix(-0.2*d(t)*a).dot(v)# WE USE THE PLUGIN findObjects TO LOCATE AND SEPARATE EACH LETTER
letters = findObjects(cvc)# a list of ImageClips# WE ANIMATE THE LETTERSdefmoveLetters(letters, funcpos):return[ letter.set_pos(funcpos(letter.screenpos,i,len(letters)))for i,letter inenumerate(letters)]
clips =[ CompositeVideoClip( moveLetters(letters,funcpos),
size = screensize).subclip(0,5)for funcpos in[vortex, cascade, arrive, vortexout]]# WE CONCATENATE EVERYTHING AND WRITE TO A FILE
final_clip = concatenate_videoclips(clips)
final_clip.write_videofile('coolTextEffects.avi',fps=25,codec='mpeg4')
# -*- coding: utf-8 -*- import os
from moviepy.editor import*#递归获取文件名称deffile_name(file_dir):
L=[]for root, dirs, files in os.walk(file_dir):forfilein files:if os.path.splitext(file)[1]=='.mp4':
L.append(os.path.join(root,file))return L
#主函数if __name__ =='__main__':
filePath ='vedio'
file_list = file_name(filePath)
k =1for name in file_list:print(name)#获取视频总时间
video = VideoFileClip(name)
times = video.duration
print(times)#剪切视频广告 省略最后4秒
video = VideoFileClip(name).subclip(0,times-4)
result ="save"+str(k)+".mp4"
video.write_videofile(result)
k = k +1
# -*- coding: utf-8 -*- import os
from moviepy.editor import*#递归获取文件名称deffile_name(file_dir):
L=[]for root, dirs, files in os.walk(file_dir):forfilein files:if os.path.splitext(file)[1]=='.mp4':
L.append(os.path.join(root,file))return L
#主函数if __name__ =='__main__':
filePath ='vedio'
file_list = file_name(filePath)
k =1
L =[]for name in file_list:print(name)#获取视频总时间
video = VideoFileClip(name)
times = video.duration
L.append(video)print(times)#视频合成 帧数大致就是24
final_clip = concatenate_videoclips(L)
final_clip.to_videofile('./final.mp4', fps=24, remove_temp=True)
video = CompositeVideoClip([clip1,#starts at t=0
clip2.set_start(5),#start at t=5s
clip3.set_start(9)])#start at t=9s,fade-in 的形式转换
video = CompositeVideoClip([clip1,
clip2.set_pos((45,150)),
clip3.set_pos((90,100))])