Moviepy是一个用于视频编辑的Python模块,它可被用于一些基本操作(如剪切、拼接、插入标题)、视频合成(即非线性编辑)、视频处理和创建高级特效。它可对大多数常见视频格式进行读写,包括GIF。
Pip安装方式:pip install moviepy
MoviePy依赖 Numpy 、 imageio 、 Decorator 和 tqdm ,他们将在安装MoviePy的同时自动安装。运行平台为Windows/Mac/Linux,并使用Python2.7以上的版本和Python3。
MoviePy依赖FFMPEG软件对视频进行读写。不用对此担心,在你第一次使用MoviePy的时候,FFMPEG将会自动由ImageIO下载和安装(不过需要花一些时间)。如果你想使用FFMPEG的特定版本,你可以设置FFMPEG_BINARY环境变量。详见moviepy/config_defaults.py。
moviepy的功能:

在Moviepy中,核心对象是剪辑,可以使用AudioClips或VideoClips来处理,它有六个直接子类(VideofileClip、ImageSequenceClip、CompositeVideoClip、ImageClip、DataVideoClip、UpdatedVideoClip)和两个间接子类(ColorClip,TextClip)
相应的模块有:VideoClip,CompositeVideoClip,VideoFileClip,Concatenate_videoclips
基本功能介绍及使用方式:
VideoClip:这个模块是专门用于处理视频文件剪辑的,其能实现的功能主要有视频文件剪辑,拼接,混编其中:
剪辑功能:主要通过VideoFileClip模块实现
拼接功能:主要通过Concatenate_videoclips模块实现
混编功能:主要通过CompositeVideoClip模块实现
VideoFileClip
- videofile = "new_video.mp4"
- videoinfo = VideoFileClip(videofile).subclip(3, 10)
- videoinfo.write_videofile("new_video_1.mp4")
以上代码就是把new_video.mp4的第3秒到第10秒剪裁下载生成在new_video_1.mp4中
Concatenate_videoclips
- F_col_new = ['video1.mp4','video2.mp4','video3.mp4']
- S_column = "video_out.mp4"
- size_1 = (1024,1024)
- for j in F_column:
- clip2 = VideoFileClip(j).resize(size_1).set_position((0, 0))
- video.append(clip2)
-
- concatenate_videoclips(video, method="chain").write_videofile(S_column)
以上代码就是把video1.mp4(1分钟时长),video2.mp4(2分钟时长),video3.mp4(1分钟时长)按照先后循序拼接在一起,然后经过加工生成一个video_out.mp4(4分钟时长,video1,video2,video3的合成循序)。
CompositeVideoClip
- screen_video_filename = 'Movie1.mp4'
- name = "input.mp4"
- size = (300, 300)
- clip1 = VideoFileClip(screen_video_filename)
- clip2 = VideoFileClip(name).resize(size).set_position((0, 0))
- video = CompositeVideoClip([clip1,clip2])
- video.write_videofile("output.mp4")
以上代码是以Movie1.mp4(2分钟)作为背景,将input.mp4(1分50秒)同步混编成一个以Movie1.mp4为背景展示input.mp4的混编视频output.mp4(2分钟).
相应的模块有:AudioClip,AudioFileClip,CompositeAudioClip,Concatenate_audioclips
基本功能介绍及使用方式:
AudioClip:这个模块是专门用于音频文件处理的,其能实现的功能主要有音频文件剪辑,拼接,混编其中:
剪辑功能:主要通过AudioFileClip模块实现
拼接功能:主要通过Concatenate_audioclips模块实现
混编功能:主要通过CompositeAudioClip模块实现
AudioFileClip
- audio1 = AudioFileClip('Teeth.mp3').subclip(35,75)
- audio1.write_audiofile("Teeth2.mp3")
以上代码就是把Teeth.mp3的第35秒到第75秒剪裁下载生成在Teeth2.mp3中
Concatenate_audioclips
- audio1 = AudioFileClip('Teeth.mp3').subclip(35,75)
- audio2 = AudioFileClip('Teeth.mp3').subclip(131,172)
- audio3 = AudioFileClip('Teeth.mp3').subclip(102,130)
-
- audio4 = concatenate_audioclips([audio1,audio2,audio3]).write_audiofile(r"Teeth2.mp3")
以上代码就是把audio1(40秒),audio2(41秒),audio3(28秒)按照先后循序拼接在一起,然后经过加工生成一个Teeth2.mp3(109秒,audio1,audio2,audio3的合成循序)。
CompositeAudioClip
- audio1 = AudioFileClip('Teeth.mp3').subclip(35,75)
- audio2 = AudioFileClip('Teeth.mp3').subclip(131,172)
- audio_input = CompositeAudioClip([audio1, audio2]).write_audiofile(r"Teeth2.mp3")
以上代码是将Teeth.mp3的35秒到75秒(audio1 40秒)与131秒到172秒(audio2 41秒)混音成一个新的音频文件Teeth2.mp3(41秒).
相应的模块有:ImageClip,TextClip,ImageSequenceClip
基本功能介绍及使用方式:
ImageClip:这个模块是专门用于图片,文字,颜色处理的,其能实现的功能主要有贴图,贴文字,图片时序合成其中:
贴图功能:主要通过 ImageClip模块实现
贴文字功能:主要通过TextClip模块实现
图片时序功能:主要通过ImageSequenceClip模块实现
TextClip,ImageClip
- name = "videofile.mp4"
-
- clip1 = VideoFileClip(name)
-
- size = (int(clip1.size[0]),int(clip1.size[1]))
-
- y = 200
-
- clip2 = VideoFileClip(name).resize(size).set_position((0,0))
-
- logo =(mp.ImageClip("test.jpg").set_duration(clip2.duration).
- resize(height=y,width=int(clip1.size[0])).set_pos((0, 0)))
-
- video_info = [clip2,logo]
-
- video_info.append(TextClip("吉尔伽美什", font='simsun.ttc', fontsize=60, color='white').
- set_position((50,50)).set_duration(clip2.duration))
-
- video_info.append(TextClip("乌鲁克神殿", font='simsun.ttc', fontsize=60, color='white').
- set_position((50,150)).set_duration(clip2.duration))
-
- video_info.append(TextClip("贤王的战前演讲", font='simsun.ttc', fontsize=60, color='white').
- set_position((50,250)).set_duration(clip2.duration))
-
- CompositeVideoClip(video_info).write_videofile(r'pip3.mp4')
Textclip和ImageClip是一个添加在视频剪辑中的文字添加和图片添加功能,所以主要是设置在视频当中的出现时长,出现位置,字体,内容一系列属性,
在以上代码中logo就是ImageClip功能将图片test.jpg添加视频的一个(0,0,200,int(clip1.size[1]))的方位,
之后video_info.append的就是TextClip功能将三段文本按照一定的格式,设定在(50,50),(50,150),(50,250)方位,设定时长为videofile.mp4播放时长
TextClip和ImageClip最好结合CompositeVideoClip功能一起生成pip3.mp4视频文件。
ImageSequenceClip
- fps = 1
- pic_info = ['pic1.jpg','pic2.jpg','pic3.jpg','pic4.jpg','pic5.jpg']
- clip = moviepy.video.io.ImageSequenceClip.ImageSequenceClip(pic_info, fps=fps)
- clip.write_videofile('pic_movie.mp4')
以上代码是使用ImageSequenceClip功能,以1秒1张图片的方式将pic1.jpg至pic5.jpg这5张图片合成一个5秒的pic_movie.mp4图片展示视频。