在《moviepy音视频剪辑:moviepy中的剪辑相关类及关系》介绍了VideoClip主要有六个直接子类(VideoFileClip、 ImageSequenceClip、CompositeVideoClip、ImageClip、DataVideoClip、UpdatedVideoClip)和两个间接子类(ColorClip, TextClip)。在《moviepy音视频剪辑:视频基类VideoClip子类DataVideoClip、UpdatedVideoClip、ImageClip、ColorClip、TextClip类详解》介绍了DataVideoClip、UpdatedVideoClip、ImageClip、ColorClip、TextClip类,这是因为这几个子类都与VideoClip类在同一模块文件VideoClip.py中。本文将介绍VideofileClip、 ImageSequenceClip、CompositeVideoClip这三个子类。
VideoFileClip类是VideoClip的直接子类,是从一个视频文件创建一个剪辑类,除了从父类继承的特性和方法外,VideoFileClip实现了自己的构造方法和close方法,另外VideoFileClip有1个自己独的属性filename。VideoFileClip加载视频文件时,可以调整剪辑对应分辨率大小,可以根据应用要求设定是否加载音频。VideoFileClip加载视频文件时,会调用FFMPEG_VideoReader来加载视频文件,加载时会对视频文件进行加锁处理。
filename属性用于存储读取视频文件的文件名,该文件名与读取视频文件给的名字完全一致,无需进行本地化路径转换。
__init__(self, filename, has_mask=False,
audio=True, audio_buffersize=200000,
target_resolution=None, resize_algorithm='bicubic',
audio_fps=44100, audio_nbytes=2, verbose=False,
fps_source='tbr')
构造方法会对视频文件进行加锁,并占用相关资源,如果要释放文件和资源,需要调用close方法或等加载处理的进程结束。close方法除了self无其他参数,其目的就是释放文件和其他占用的资源。
需要注意,如果一个VideoFileClip实例被浅拷贝到另一个对象,这两个对象中任意一个调用close方法都可能会释放文件导致另一个实例的close方法失败。具体情况与代码的上下文环境相关。
CompositeVideoClip是一种由其他视频剪辑组合构成一起播放的视频剪辑,这是大多数合成剪辑的基类。《moviepy音视频剪辑:使用concatenate_videoclips和clips_array将多个视频合成一个顺序播放或同屏播放的视频》介绍的concatenate_videoclips在method参数设置为’compose’时,实际上就是调用的CompositeVideoClip完成合成的。
__init__(self, clips, size=None, bg_color=None, use_bgclip=False,ismask=False)
clips属性保存合成剪辑所需要的所有剪辑的列表,但不包含背景剪辑,即如果use_bgclip为True,则clips保存的为构造方法clips参数对应列表第二个及之后的所有剪辑,如果use_bgclip为False,则就是构造方法clips参数对应的列表。
playing_clips方法用于判断clips属性中对应剪辑在参数指定的t时刻是否处于播放状态,对处于播放状态的剪辑存放到一个列表中返回。
playing_clips(self, t=0)
用于关闭音频及由CompositeVideoClip创建的背景剪辑,其他资源的释放不处理。
在《moviepy音视频剪辑:视频剪辑基类VideoClip的属性及方法详解》介绍了write_images_sequence方法,write_images_sequence方法用于将剪辑输出到一系列图像文件中,而ImageSequenceClip则基本上与write_images_sequence过程可逆,用于将一系列图像生成剪辑。
ImageSequenceClip是VideoClip的直接子类,该类自身只有构造方法,其他方法和属性都是继承自父类。
__init__(self, sequence, fps=None, durations=None, with_mask=True,
ismask=False, load_images=False)
更多moviepy的介绍请参考《PyQt+moviepy音视频剪辑实战文章目录》或《专栏:使用PyQt开发图形界面Python应用》。
老猿关于PyQt的付费专栏《使用PyQt开发图形界面Python应用》只需要9.9元(老猿正在考虑是否调整专栏价格,如果调整价格至少是19.9元),本专栏《PyQt+moviepy音视频剪辑实战》文档的同样内容在付费专栏上也有相应内容,总体来说付费专栏介绍更详细或案例更多。
本节内容对应付费专栏的《moviepy音视频剪辑:视频基类VideoClip子类VideoFileClip、CompositeVideoClip、ImageSequenceClip介绍及使用案例》。如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。