moviepy音视频剪辑:moviepy中的剪辑基类Clip的属性和方法详解

1、概述

在moviepy中,全部剪辑的基类是Clip,对应的模块为moviepy.Clip,经常使用的剪辑类包括:VideoClip、AudioClip、VideoFileClip、AudioFileClip、ImageSequenceClip、ImageClip、CompositeVideoClip、CompositeAudioClip、TextClip、ColorClip,它们之间的继承关系以下:
在这里插入图片描述html

2、Clip类的属性

2.一、start属性

start属性用于多个子剪辑拼接成一个剪辑的场景,每一个子剪辑经过设置本身的start来指定本身在合成后的剪辑中的播放开始时间,该属性经过方法set_start来设置。python

set_start语法:

set_start(self, t, change_end=True)web

说明:

该方法会返回一段调用者的浅拷贝剪辑,该拷贝剪辑的start会被设置为t。
其中:数组

  • t为须要设置的开始时间,表示方法能够是以下四种之一:
  • 秒,为一个浮点数数字,如75.35;
  • 分钟和秒组成的元组,如(1,15.35);
  • 时、分、秒组成的元组,如(0,1,15.35)
  • 用冒号分隔的时间字符串,如‘0:1:15.35’

下面剪辑的时间参数如无特别说明均可以是这四种形式的时间。app

  • change_end,表示是否修改剪辑的end的值
  • 若是为False,则copy剪辑的end值保持不变,当end存在有效值时,copy剪辑的duration属性被设置为end-start
  • 若是为True,且剪辑duration存在有效值,则拷贝剪辑的end属性被更改成:start+duration

2.二、end属性

end属性用于多个子剪辑拼接成一个剪辑的场景,每一个子剪辑经过设置本身的end来指定本身在合成后的剪辑中的播放的结束时间,该属性经过方法set_end来设置。ide

set_end语法

set_end(self, t)svg

说明:
  • 相似set_start方法,该方法返回一个调用者的拷贝剪辑,该拷贝剪辑的end被设置为t
  • 若是该拷贝剪辑设置了start属性,则剪辑的duration属性会被设置为end-start,start属性保持不变
  • 若是该拷贝剪辑未置start属性,则duration属性保持不变,start属性被设置为max(0,end-duration)

2.三、duration属性

duration属性保存剪辑的时长,若是为None,表示剪辑无限长。能够调用set_duration改变剪辑的时长。函数

set_duration调用语法:

set_duration(self, t, change_end=True)学习

2.四、memoize属性

memoize属性用于控制剪辑是否应保留内存读取的最后一帧,若是为True保留,不然不保留,默认值为False,能够经过方法set_memoize进行修改。ui

set_memoize 调用语法:

set_memoize(self, memoize)

2.五、memoized_t、memoized_frame属性

当memoize为True时,则memoized_t、memoized_frame用于保存最后一次读取的帧的位置和对应的帧。

3、Clip类的方法

3.一、copy方法

copy方法会将调用者对应剪辑用浅拷贝(Shallow copy )方式复制一份,若是对应剪辑有音轨和遮罩,一样会浅拷贝复制到新剪辑中。

调用语法:copy(self)

3.二、get_frame方法

get_frame方法返回剪辑指定时刻位置的视频或音频帧,每一个帧实际上一个表示RGB图像或音频的numpy类型数组。

调用语法:get_frame(self, t)

若是剪辑的memoize属性为True,则会使用memoized_t、memoized_frame保留访问帧的位置和帧数据。

3.三、fl方法

fl方法是一个通用的剪辑处理方法,它返回一个新剪辑,新剪辑的全部帧是当前调用剪辑对象的帧通过函数fun变换处理后的帧。

调用语法:

fl(self, fun, apply_to=None, keep_duration=True)

说明:
  • fun:参数fun是对剪辑帧进行变换的函数,带2个参数,第一个参数gf表示当前剪辑的get_frame方法,第二个参数为以秒为单位的剪辑位置t,t会做为gf的参数。fun函数的返回值为通过变换后的帧
  • apply_to:apply_to表示变换过滤器fl是否须要同时做用于剪辑的音频和遮罩,其值能够为’mask’、‘audio’、[‘mask’,‘audio’]
  • keep_duration:若是为True表示不改变剪辑的duration属性

3.四、fl_time方法

fl_time方法返回一个新剪辑,新剪辑是调用剪辑的一个浅拷贝,但新剪辑的时间线被调整,实际上这个方法就是对剪辑进行一个基于时间特效的处理,如快播、慢播、倒序播放等。

调用语法:

fl_time(self, t_func, apply_to=None, keep_duration=False)

说明:

3.五、fx方法

fx方法是用于执行参数指定的函数,并返回函数的执行结果。

调用语法:

fx(self, func, *args, **kwargs)

说明:

该方法等同于执行:func(self, *args, **kwargs)
这个方法的用途是当须要使用一系列方法依次调用处理剪辑且每一个方法返回的新剪辑做为下次调用者时能够简化语句。

3.六、set_fps方法

set_fps方法很是简单,就是用于设置fps的值,调用方法为:set_fps(self, fps),但该方法修改的不是调用剪辑对象的值,而是调用对象剪辑的浅拷贝对象的fps值,返回对象为新剪辑。

3.七、set_ismask方法

set_ismask方法很是简单,就是用于设置是否有遮罩,调用方法为:set_ismask(self, ismask)`,但该方法修改的不是调用剪辑对象的值,而是调用对象剪辑的浅拷贝对象的ismask值,返回对象为新剪辑。

3.八、is_playing方法

该方法用于判断对应时间是否在剪辑的start和end之间。

调用语法:is_playing(self, t)
说明:

若是t是一个时间,且位于剪辑的start和end之间,则返回True,不然返回False。
若是t是一个numpy数组,若是数组的全部元素表明时间都不在剪辑的start和end之间则返回False,不然返回一个向量[b_1, b_2, b_3…], 若是数组指定位置i的时间在剪辑的start和end之间,则b_i为True,不然为False。

3.九、subclip方法

subclip方法用于从调用剪辑中取指定的剪辑段构造一个新剪辑对象返回,原剪辑保持不变。

调用语法:subclip(self, t_start=0, t_end=None)
说明:

返回调用剪辑的t_start到t_end之间的剪辑段,若是t_end为None,则t_end被设置为剪辑的duration,若是t_end为负数,则t_end被设置为剪辑的duration + t_end。

3.十、cutout方法

cutout方法将调用剪辑对象的剪辑去除掉指定位置段后返回。

调用语法:cutout(self, ta, tb)
说明:

返回调用剪辑对象的剪辑去除ta到tb这一段以后的剪辑,若是原剪辑设置了duration属性,则返回剪辑的duration=原剪辑的duration-(tb - ta)。

3.十一、iter_frames方法

iter_frames方法不是一个剪辑编辑的方法,其功能是为了迭代访问剪辑的全部帧,返回值为一个迭代器,每迭代一次返回下一帧。

调用语法:

iter_frames(self, fps=None, with_times = False, logger=None, dtype=None)

说明:
  • iter_frames方法将剪辑的每帧做为一个HxWxN的numpy数组返回,N为1表示遮罩剪辑帧,N=3为RGB剪辑帧
  • 若是剪辑自己有fps参数,则fps为可选参数
  • 使用图片流编写视频时,dtype设置为“uint8”

3.十二、close方法

释放剪辑使用的全部资源。

广告

老猿关于PyQt的付费专栏《使用PyQt开发图形界面Python应用》只须要9.9元,本专栏《PyQt+moviepy音视频剪辑实战》文档的一样内容在付费专栏上也有相应内容,整体来讲付费专栏介绍更详细或案例更多。本节内容对应付费专栏的《moviepy音视频剪辑:moviepy中的剪辑基类clip详解》。若是有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

跟老猿学Python、学5G!