☞ ░ 前往老猿Python博文目录

一、引言

在《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视频文件剪辑

2.1、概述

VideoFileClip类是VideoClip的直接子类,是从一个视频文件创建一个剪辑类,除了从父类继承的特性和方法外,VideoFileClip实现了自己的构造方法和close方法,另外VideoFileClip有1个自己独的属性filename。VideoFileClip加载视频文件时,可以调整剪辑对应分辨率大小,可以根据应用要求设定是否加载音频。VideoFileClip加载视频文件时,会调用FFMPEG_VideoReader来加载视频文件,加载时会对视频文件进行加锁处理。

2.2、filename属性

filename属性用于存储读取视频文件的文件名,该文件名与读取视频文件给的名字完全一致,无需进行本地化路径转换。

2.3、构造方法

调用语法:
__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')
参数说明:
  • filename:视频文件名,可以带路径
  • has_mask:是否有遮罩 ,如果视频文件带遮罩,则设置has_mask为True。视频文件一般很少带遮罩,但有些视频编码支持遮罩功能。例如如果moviepy合成了一个带遮罩的剪辑,则可以使用《moviepy音视频剪辑:视频剪辑基类VideoClip的属性及方法详解》介绍的VideoClip.write_videofile将剪辑和遮罩、音频信息一起保存到视频文件中
  • audio:如果视频文件不带音频或者不希望加载视频文件的音频,可以将audio参数设置为False
  • audio_buffersize:音频文件读取缓冲区大小,字节为单位,一般用缺省值足够,如果audio_buffersize比一个音频帧的大小还要小,会自动使用音频帧的大小代替
  • target_resolution:设置为加载后需要变换到的分辨率,类型为列表或元组,第一个元素为分辨率的高,第二个为宽,如果高或宽有一个为None,则保持现有纵横比调整帧的大小。如果保持原分辨率不变,则不需要设置本参数或设置为None。如果设置了新的分辨率,则在调用ffmpeg 返回视频剪辑的帧之前会按新的分辨率调整帧的大小。这比使用转换为高分辨率流然后再调整分辨率会快很多
  • resize_algorithm:要改变加载后的视频分辨率,可以通过resize_algorithm指定调整分辨率的算法,缺省值为 “bicubic”,还可以是 “bilinear” 、"fast_bilinear"等。关于算法的更多信息请参考:https://ffmpeg.org/ffmpeg-scaler.html
  • audio_fps:声音的采样频率
  • audio_nbytes:声音采样的位数
  • verbose:是否在标准输出设备上显示处理信息
  • fps_source:从视频的元数据metadata哪个数据中获取fps值,默认设置为’tbr’,但可以设置为’fps’,这可能有助于导入慢动作视频,否则可能会出意外。

2.2、close方法

构造方法会对视频文件进行加锁,并占用相关资源,如果要释放文件和资源,需要调用close方法或等加载处理的进程结束。close方法除了self无其他参数,其目的就是释放文件和其他占用的资源。

需要注意,如果一个VideoFileClip实例被浅拷贝到另一个对象,这两个对象中任意一个调用close方法都可能会释放文件导致另一个实例的close方法失败。具体情况与代码的上下文环境相关。

三、CompositeVideoClip合成视频剪辑

3.1、概述

CompositeVideoClip是一种由其他视频剪辑组合构成一起播放的视频剪辑,这是大多数合成剪辑的基类。《moviepy音视频剪辑:使用concatenate_videoclips和clips_array将多个视频合成一个顺序播放或同屏播放的视频》介绍的concatenate_videoclips在method参数设置为’compose’时,实际上就是调用的CompositeVideoClip完成合成的。

3.2、构造方法

调用语法:

__init__(self, clips, size=None, bg_color=None, use_bgclip=False,ismask=False)

参数说明:
  • clips:多个视频剪辑的列表,列表中的每个元素都是VideoClip类型的对象。列表中的每个剪辑都将显示在列表中其后面出现的剪辑的下面。每个剪辑的pos属性决定剪辑放置在最终合成剪辑屏幕的位置,每个剪辑的mask遮罩属性决定每个剪辑哪部分可见哪部分不可见
  • size:最终剪辑的大小(分辨率),如果size为None,则将clips中第一个剪辑的size作为最终剪辑的size
  • bg_color:设置合成剪辑的背景色,背景色用于剪辑未填充且无遮罩的区域,如果要一个透明剪辑,则设置为None,否则为一个代表RGB颜色的三元组,如(0,0,0)代表黑色,也即透明色。该参数只有use_bgclip为False的情况下使用,实际上是通过构建一个由bg_color指定颜色的ColorClip来实现的
  • use_bgclip:如果列表中的第一个剪辑应用作所有其他剪辑的“背景”,则设置为True。第一个剪辑的大小必须与最后合成剪辑的大小相同。如果没有透明度,则最终剪辑将没有遮罩
  • ismask:最终合成剪辑是否为遮罩剪辑。

3.2、clips属性

clips属性保存合成剪辑所需要的所有剪辑的列表,但不包含背景剪辑,即如果use_bgclip为True,则clips保存的为构造方法clips参数对应列表第二个及之后的所有剪辑,如果use_bgclip为False,则就是构造方法clips参数对应的列表。

3.3、playing_clips方法

playing_clips方法用于判断clips属性中对应剪辑在参数指定的t时刻是否处于播放状态,对处于播放状态的剪辑存放到一个列表中返回。

调用语法:playing_clips(self, t=0)

3.4、close方法

用于关闭音频及由CompositeVideoClip创建的背景剪辑,其他资源的释放不处理。

四、ImageSequenceClip图像序列剪辑

4.1、引言

在《moviepy音视频剪辑:视频剪辑基类VideoClip的属性及方法详解》介绍了write_images_sequence方法,write_images_sequence方法用于将剪辑输出到一系列图像文件中,而ImageSequenceClip则基本上与write_images_sequence过程可逆,用于将一系列图像生成剪辑。

ImageSequenceClip是VideoClip的直接子类,该类自身只有构造方法,其他方法和属性都是继承自父类。

4.2、构造方法

调用语法:
__init__(self, sequence, fps=None, durations=None, with_mask=True,
ismask=False, load_images=False)
参数说明:
  • sequence:参数sequence可以是如下三种之一
  • 一个仅包含图片的文件夹路径目录名,目录下的文件将按字母顺序排列作为处理的系列图像文件
  • 一个图像文件名的列表,在这种情况下开发者可以通过load_images参数控制选择将文件图像一次性加载到内存中
  • 一个表示图像的numpy数组列表,注意这种情况不支持遮罩
  • fps:每秒读入的图像帧数,该参数可以通过设定durations来替代
  • durations:每个图像在剪辑中显示的时长列表,因此可以给每个图像不同的播放时间,如果设置了fps,该参数将不起作用
  • with_mask:是否将PNG图像的alpha层作为遮罩
  • ismask:是否将生成剪辑作为遮罩
  • load_images:是否在处理前集中将图像文件加载到内存,如果为True,则对于sequence对应图像文件的情况,一次性的将所有图像文件先加载到内存,否则每处理一个文件加载一个。该参数仅对sequence为文件名列表的情况生效。

更多moviepy的介绍请参考《PyQt+moviepy音视频剪辑实战文章目录》或《moviepy音视频开发专栏》。

关于收费专栏

老猿的付费专栏《使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,付费专栏《moviepy音视频开发专栏》详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,两个专栏加起来只需要19.9元,都适合有一定Python基础但无相关专利知识的小白读者学习。这2个收费专栏都有对应免费专栏,只是收费专栏的文章介绍更具体、内容更深入、案例更多。

收费专栏文章目录:《moviepy音视频开发专栏文章目录》、《使用PyQt开发图形界面Python应用专栏目录》,本文收费专栏对应文章为《moviepy音视频剪辑:视频基类VideoClip子类VideoFileClip、CompositeVideoClip、ImageSequenceClip介绍及使用案例》。

对于缺乏Python基础的同仁,可以通过老猿的免费专栏《专栏:Python基础教程目录》从零开始学习Python。

如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

跟老猿学Python、学5G!

☞ ░ 前往老猿Python博文目录

moviepy音视频剪辑:视频基类VideoClip子类VideoFileClip、CompositeVideoClip、ImageSequenceClip介绍的更多相关文章

  1. moviepy音视频剪辑:视频基类VideoClip子类DataVideoClip、UpdatedVideoClip、ImageClip、ColorClip、TextClip类详解

    ☞ ░ 前往老猿Python博文目录 ░ 一.概述 在<moviepy音视频剪辑:moviepy中的剪辑相关类及关系>介绍了剪辑相关类及关系,其中VideoClip有多个直接子类和间接子类 ...

  2. moviepy音视频剪辑:视频剪辑基类VideoClip的__init__构造方法参数has_constant_size的作用

    ☞ ░ 前往老猿Python博文目录 ░ moviepy音视频剪辑模块的视频剪辑基类VideoClip构造方法: __init__(self, make_frame=None, ismask=Fals ...

  3. moviepy音视频剪辑基类VideoClip的write_gif方法opt、fuzz、dispose、colors、loop等参数的作用

    ☞ ░ 前往老猿Python博文目录 ░ moviepy音视频剪辑模块的视频剪辑基类write_gif方法用于将视频剪辑输出到gif文件,调用语法如下: def write_gif(self, fil ...

  4. moviepy音视频剪辑基类VideoClip的write_videofile方法codec、bitrate、preset、audio_bitrate、audio_nbytes等参数的作用

    ☞ ░ 前往老猿Python博文目录 ░ moviepy音视频剪辑模块的视频剪辑基类write_videofile方法用于将视频剪辑输出到文件,调用语法如下: write_videofile(self ...

  5. moviepy音视频剪辑:视频剪辑基类VideoClip的属性及方法详解

    ☞ ░ 前往老猿Python博文目录 ░ 一.概述 在<moviepy音视频剪辑:moviepy中的剪辑基类Clip详解>和<moviepy音视频剪辑:moviepy中的剪辑基类Cl ...

  6. Java: 基类、子类、构造函数、程序块的初始化顺序

    初始化顺序 基类static block 子类static block 基类non-static block 子类non-static block 基类constructor 子类constructo ...

  7. moviepy音视频剪辑:视频剪辑基类VideoClip详解

    ☞ ░ 前往老猿Python博文目录 ░ 一.概述 在<moviepy音视频剪辑:moviepy中的剪辑基类Clip详解>和<moviepy音视频剪辑:moviepy中的剪辑基类Cl ...

  8. 关于C#基类和子类函数调用问题

    c#基类子类的函数调用关系,代码说明newkeyword后面的类中的函数为对象调用的函数,当然必需要有virtual和override,继承就相当于包括了基类的函数,子类对象调用时基类的函数相当于就在 ...

  9. mfc 基类与子类

    基类(父类) 派生类(子类) 一.基类(父类) 基类(又称为父类,基类与派生类是相对的关系! 通过继承机制,可以利用已有的数据类型来定义新的数据类型.所定义的新的数据类型不仅拥有新定义的成员,而且还同 ...

随机推荐

  1. Java_基础(一)

    注释 单行注释: // 多行注释: /*开头, */结尾, 可跨行, 可嵌入 public static void main(String[] args/* 哈哈 */) 文档注释: /** 开头, ...

  2. 找出"吸血鬼数"(Java)

    吸血鬼数是指位数为偶数的数字,可以由一 对数字相乘而得到,而这对数字各包含乘积的一半 位数的数字,其中从最初的数字中选取的数字可以任意排序.以两个0结尾的数字是不允许的,例如,下列数字都是 " ...

  3. VSCode--HTML代码片段(基础版,react、vue、jquery)

    起因是最近在学习前端,看的网上的demo也是在react.vue.jquery之间穿插,为了方便一键生成html模板(懒)写demo,有了以下折腾. 本人使用的前端编辑工具是vscode(方便.懒), ...

  4. MySQL全面瓦解8:查询的正则匹配

    概述 上一章 查询的过滤条件,我们了解了MySQL可以通过 like % 通配符来进行模糊匹配.同样的,它也支持其他正则表达式的匹配,我们在MySQL中使用 REGEXP 操作符来进行正则表达式匹配. ...

  5. SpringBoot的外部化配置最全解析!

    目录 SpringBoot中的配置解析[Externalized Configuration] 本篇要点 一.SpringBoot官方文档对于外部化配置的介绍及作用顺序 二.各种外部化配置举例 1.随 ...

  6. 使用pipenv管理python虚拟环境

    前言 近期的项目中,我开始尝试着从virtualenv管理python虚拟环境,切换到用pipenv来管理. 经过一段时间的使用,着实觉得pipenv使用的更加顺手,更加的便捷.这当然也延续了 Ken ...

  7. Docker - 解决 gitlab 容器上的项目进行 clone 时,IP 地址显示一串数字而不是正常 IP 地址的问题

    问题背景 通过 gitlab 容器创建了一个项目,想 clone 到本地,结果发现项目的 IP 地址是一串数字 问题排查 明明创建项目的时候,IP 地址还是正常的鸭! 再看看项目的 settings ...

  8. 《Machine Learning in Action》—— 剖析支持向量机,优化SMO

    <Machine Learning in Action>-- 剖析支持向量机,优化SMO 薄雾浓云愁永昼,瑞脑销金兽. 愁的很,上次不是更新了一篇关于支持向量机的文章嘛,<Machi ...

  9. mdp文件-Chapter4-MD.mdp

    终于到了mdp系列的第四篇,最终MD模拟的mdp文件 先上代码,md.mdp 1 title = OPLS Lysozyme MD simulation 2 ; Run parameters 3 in ...

  10. 调度器简介,以及Linux的调度策略(转)

    进程是操作系统虚拟出来的概念,用来组织计算机中的任务.但随着进程被赋予越来越多的任务,进程好像有了真实的生命,它从诞生就随着CPU时间执行,直到最终消失.不过,进程的生命都得到了操作系统内核的关照.就 ...