☞ ░ 前往老猿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、构造方法

调用语法:
  1. __init__(self, filename, has_mask=False,
  2. audio=True, audio_buffersize=200000,
  3. target_resolution=None, resize_algorithm='bicubic',
  4. audio_fps=44100, audio_nbytes=2, verbose=False,
  5. 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、构造方法

调用语法:
  1. __init__(self, sequence, fps=None, durations=None, with_mask=True,
  2. 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. How to Convert and Import VHD to VMDK (VMWare)

    VHD or Virtual Hard Disk is the disk image format used by Microsoft virtualization software such as ...

  2. 带货直播源码开发采用MySQL有什么优越性

    MySQL是世界上最流行的开源关系数据库,带货直播源码使用MySQL,可实现分钟级别的数据库部署和弹性扩展,不仅经济实惠,而且稳定可靠,易于运维.云数据库 MySQL 提供备份恢复.监控.容灾.快速扩 ...

  3. OJ-2:区间问题【九度1554】

      题目描述: 给定一个数组,判断数组内是否存在一个连续区间,使其和恰好等于给定整数k. 输入: 输入包含多组测试用例,每组测试用例由一个整数n(1<=n<=10000)开头,代表数组的大 ...

  4. c# ToolStrip控件图片和文字显示--原创

    如上图达到这样的效果 首先我们给属性Image和Text分别赋予需要显示的图片和文字 然后设置DisplyStyle属性为ImageAndText,意为同时显示图片和文字 各种设置ImageAlign ...

  5. Linux的内部命令和外部命令

    为了提高系统运行效率,将经常使用的轻量的命令在系统启动时一并加载这些命令到内存中供shell随时调用,这部分命令即为内部命令.反之,只有当被调用时才会被硬盘加载的这部分命令即为外部命令. 内部命令实际 ...

  6. Java实现FTP跨服务器文件操作

    在过去的几年工作中,曾经多次需要把文件上传到单独的服务器,而程序是在单独的服务器上部署的,在进行文件操作的时候就需要跨服务器进行操作包括:文件上传.文件下载.文件删除等.跨服务器文件操作一般是需要FT ...

  7. 深入浅出 webpack 之基础配置篇

    前言 前端工程化经历过很多优秀的工具,例如 Grunt.Gulp.webpack.rollup 等等,每种工具都有自己适用的场景,而现今应用最为广泛的当属 webpack 打包了,因此学习好 webp ...

  8. wait()系统调用分别演示在父子进程

    废话不多说开代码 在父进程调用wait() #include<stdio.h> #include<unistd.h> #include<sys/wait.h> in ...

  9. nginx&http 第三章 ngx 事件http 初始化1

    在 http 配置块中,我们配置了 http 连接相关的信息,HTTP 框架也正是从这里启动的 在 nginx 初始化的过程中,执行了 ngx_init_cycle 函数,其中进行了配置文件解析,调用 ...

  10. Linux安装JAVA并且配置环境

    在写之前我先说一下我遇到的坑,我在配置环境的时候由于/etc/profile文件没有配置好导致系统彻底坏掉 1.ls vi等等命令使用不了,报错说找不到命令 2.在重启后虚拟机不能进入桌面 1.下载j ...