Moviepy简介
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图片展示视频。