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

Python中利用moviepy对视频进行剪辑以及拼接 moviepy是一个用于视频编辑的Python模块,它可被用于一些基本操作(如剪切、拼接、插入标题)、视频合成(即非线性编辑)、视频处理和创建高级特效。它可对大多数常见视频格式进行读写,包括GIF。...... 阅读详情

一、概述

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

说明:

VideoClip的子类还有DataVideoClip、UpdatedVideoClip这2个。

二、Clip类的属性

2.1、start属性

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

set_start语法:

set_start(self, t, change_end=True)

说明:

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

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

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

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

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

set_end语法

set_end(self, t)

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

duration属性保存剪辑的时长,如果为None,表示剪辑无限长。可以调用set_duration改变剪辑的时长。

set_duration调用语法:

set_duration(self, t, change_end=True)

2.4、memoize属性

memoize属性用于控制剪辑是否应保留内存读取的最后一帧,如果为True保留,否则不保留,默认值为False,可以通过方法set_memoize进行修改。

set_memoize 调用语法:

set_memoize(self, memoize)

2.5、memoized_t、memoized_frame属性

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

三、Clip类的方法

3.1、copy方法

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

调用语法:copy(self)
3.2、get_frame方法

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

调用语法:get_frame(self, t)

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

3.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.4、fl_time方法

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

调用语法:

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

说明:
3.5、fx方法

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

调用语法:

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

说明:

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

3.6、set_fps方法

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

3.7、set_ismask方法

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

3.8、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.9、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.10、cutout方法

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

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

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

3.11、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.12、close方法

释放剪辑使用的所有资源。

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

关于收费专栏

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

收费专栏文章目录《moviepy音视频开发专栏文章目录》、《使用PyQt开发图形界面Python应用专栏目录》,本文收费专栏对应文章为《moviepy音视频剪辑:moviepy中的剪辑基类Clip详解》。

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

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

跟老猿学Python、学5G!

【Python】MoviePy MoviePy的核心理念之一,是将音视频内容抽象为“剪辑”(Clip)对象。理解这些剪辑对象的内部构成、生命周期以及它们如何与底层数据交互,是掌握MoviePy的基石。在MoviePy中,无论是视频还是音频,都被视为一种时间序列数据。一个对象,是对这段时间序列数据及其相关元数据(如时长、分辨率、帧率等)的逻辑封装。它本身并不直接存储所有像素数据或音频采样点,而是提供了一种“按需访问”的机制。MoviePy中最基本的两种剪辑是(视频文件剪辑)和(音频文件剪辑)。它们是分别从视频文件和音频文件中加载数据的基础。 阅读详情

相关推荐

moviepy中clip的方法

clip的常用方法,以及fl和fx方法

wugou2014的博客 1796

python批量剪切视频文件

学习python中的moviepy模块,并用其进行批量视频剪切

gc_2299的博客 7157

moviepy中视频时长修改

详细的分析了set_duration的实际产生的效果,便于我们把握duration操作的本质

wugou2014的博客 2564

n行Python代码系列:三行程序实现从视频截取子窗内容输出

本文介绍了使用Python+Moviepy三行代码实现截取MP4视频部分子窗口对应内容输出到视频文件的实现方法,通过这种方法可以截取视频的中间矩形窗内对应视频输出,从而可以剔除视频四周的一些无用信息。这种方法使用了Moviepy的视频对象的操作函数VideoFileClip、crop和write_videofile,具体语法在本文中也进行了介绍。

老猿Python 3388

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

在MoviePy中,剪辑基类Clip是一个重要的概念,它是所有剪辑对象的基类,为我们提供了许多属性和方法来操作音视频剪辑。通过Clip类的属性和方法,我们可以轻松地控制剪辑的时长、帧率、尺寸,创建子剪辑,处理每一帧的内容,并将剪辑保存为视频文件或转换为静态图像。subclip(t_start, t_end):创建一个新的剪辑,该剪辑是原始剪辑在指定时间范围内的子剪辑。然后,我们调整了剪辑的尺寸,并创建了一个从2秒到5秒的子剪辑。方法将一个函数应用于剪辑的每一帧,实现了在每一帧上添加滤镜效果的功能。

uote_e的博客 286

moviepy音视频剪辑:moviepy中的剪辑基类Clip详解

一、moviepy中的剪辑 1.1、clip 所有剪辑的基类是clip,clip提供了如下方法: copy():用于从剪辑返回一份浅拷贝,该方法被广泛地用于每当剪辑有一个输出变换(如resize、subclip)时产生新剪辑时,音频和遮罩也会同样浅拷贝 get_frame(t):获取指定时间的帧,结果为一个numpy数组,该数组表示在时间t时剪辑的RGB图片或声音剪辑的(单声道或立体声)值 fl(self, fun, apply_to=None, keep_duration=True) VideoFil

老猿Python 4097

Python+moviepy音视频剪辑:视频帧数据的本质、Clip的fl方法进行变换处理的原理以及滚屏案例

本文详细介绍了视频帧的数据存储本质、moviepy的剪辑基类Clip的帧变换方法fl的原理,并通过实现视频播放从下往上滚动的案例详细介绍了帧内容变换处理的实现。文章内容深入浅出、条理清晰、案例详尽,适合所有对moviepy感兴趣的人员。

老猿Python 5750

MoviePy音视频剪辑:Clip的属性和方法详解

上面的代码先创建了一个30秒的红色背景视频,然后使用to_image方法将其转换为PIL图像对象,并保存为gif图像文件。接着使用subclip方法创建了一个新的剪辑,只包含原始剪辑的前10秒,并将其保存为MP4视频文件。在MoviePy中,Clip是一个非常重要的抽象基类,作为所有音视频文件的基础类,提供了很多有用的属性和方法,下面我们就来分别介绍一下。总之,Clip类是MoviePy库中非常重要的一个基础类,提供了很多有用的属性和方法,帮助我们轻松地进行音视频剪辑和处理。

学习使你进步。 624

moviepy音视频剪辑:mask clip遮罩剪辑、遮片、蒙版的作用以及其包含的构成内容

☞ ░ 前往老猿Python博文目录 ░ 在阅读moviepy的类ImageClip的构造方法代码时,对于其中涉及遮罩的处理没有理解,到处查找遮罩的资料没有查到,最后到moviepy的官网上尝试了一下,终于有所收获。 下面结合官网材料结合本人的理解介绍一下: mask:有人译为遮罩、遮片、蒙版,而这三个词在不同的剪辑处理或图像处理软件中可能有不同含义,在此不详细介绍,为了连贯和一致性,老猿还是将其翻译为遮罩; mask遮罩是一种特殊的视频剪辑,它指示当带遮罩的视频剪辑与其他视频剪辑合成时,带遮罩的剪辑对

老猿Python 4811

MoviePy音视频剪辑:深入了解MoviePy剪辑基类Clip

Clip类的实现原理非常简单,它主要是由两个基本元素组成:一是一个持续时间为duration的视频或音频片段,二是该片段在时间轴上的位置(即start和end属性)。这个例子中,我们首先创建了一个时长为5秒的空视频片段,然后从一个音频文件中提取出前5秒的音频,将其添加到视频片段上,并最终将结果保存到一个MP4格式的文件中。总之,Clip类是一个非常强大的剪辑工具,它为我们提供了各种各样的剪辑方法和属性,可以帮助我们轻松地实现各种各样的音视频剪辑效果。duration属性表示该剪辑的总时长,单位为秒(s)。

HackDyno的博客 303

Python音视频剪辑:深入剖析moviepy中的Clip基类

如下示例代码所示,我们创建了一个简单的VideoClip,并输出了该Clip的duration、start和end属性值。而MoviePy中的Clip基类则是整个库中最为核心的基础类别之一,掌握它可以帮助我们更好地进行音视频剪辑。接下来,我们以subclip方法为例,演示如何截取视频的指定时间段。通过学习Clip基类的属性和方法,我们能够更加深入地掌握MoviePy在音视频剪辑中的使用。可以看到,该VideoClip对象的duration属性值为5秒,起始位置在时间轴上为0秒,结束位置在时间轴上为5秒。

CyberLancer的博客 211

MoviePy:超强的 视频处理Python 库

作者:小小明https://xxmdmst.blog.youkuaiyun.com/article/details/134938026阅读本文档的前置说明:本文档用于讲解Python的moviepy库的自带函数的用法,主要目的是讲一下每个函数的每个参数的含义,无需一开始就全部掌握,粗略看一下就行,可以在后面自己开发过程,遇到不会用的函数再回过头来看看本文档,我将在后续的文章中,通过几下实际的案例来理解视频特效...

idol24的博客 2664

STM32F103 实例应用(10)——I2C读写24C32

一、应用简介 本文介绍24C32的读写,基于野火的软件I2C程序。 board_i2c.h /**=========================================================================== @file board_i2c.h @brief 本文件是用于I2C驱动 @author 青梅煮久 @version r0.1 @date 2021/01/13 -------------------------.

qq_34118600的博客 3447

moviepy音视频剪辑:moviepy中的剪辑相关类及关系

专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt+moviepy音视频剪辑实战 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 y在moviepy中,所有剪辑的基类是Clip,对应的模块为moviepy.Clip,常用的剪辑类包括:VideoClip、AudioClip、VideoFileClip、AudioFileClip、ImageSequenceClip、ImageClip、CompositeVideoClip、Composite.

老猿Python 2007

STM32与HT7038的高精度电能计量系统设计与实现

本文详细介绍了基于STM32微控制器与HT7038三相电能计量芯片的高精度电能计量系统设计与实现。文章从项目选型出发,深入剖析了硬件电路设计、SPI驱动开发、芯片校准及系统集成等关键环节,为智能电表、能源监控等应用提供了高性价比且稳定的国产化解决方案。

pytorch8learner的博客 389

完整的申请邓白氏编码的流程(手把手教你申请邓白氏编码)

申请公司的苹果开发者账号和企业级的苹果开发者账号时,都会用到邓白氏编码,也就是我们申请苹果开发者账号时需要填写的D-U-N-S Number。     申请这个邓白氏编码是免费的,但是从像华夏邓白氏公司提交申请到可以申请苹果开发者账号来用这个9位的D-U-N-S Number,需要一段时间,我申请得到D-U-N-S Number,用了8个工作日(不算周末哦)

wxw2011014003的博客 9万+

moviepy音视频剪辑:与大小相关的视频变换函数crop、even_size、margin、resize介绍

☞ ░ 前往老猿Python博文目录 ░ 一、引言 在《moviepy音视频剪辑:moviepy中的剪辑基类Clip详解》介绍了剪辑基类的fl、fl_time、fx方法,在《moviepy音视频剪辑:视频剪辑基类VideoClip的属性及方法详解》介绍了fl_image和subfx方法, 在《Python+moviepy音视频剪辑:视频帧数据的本质、Clip的fl方法进行变换处理的原理以及滚屏案例》及《moviepy音视频剪辑:使用fl_time进行诸如快播、慢播、倒序播放等时间特效处理的原理和可能遇到的

老猿Python 6341

Memory SystemsCache, DRAM, Disk翻译学习DRAM部分(二)

DRAM 的发展史

qq_33473931的博客 995

PyQt+moviepy音视频剪辑实战1:多个音视频合成顺序播放或同屏播放的视频文件实现详解

专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一、引言 在《moviepy音视频剪辑:音视频的加载和输出》、《moviepy音视频剪辑:多个视频合成一个视频》、《moviepy音视频剪辑:使用VideoFileClip、AudioFileClip和write_videofile、write_audiofile进行音视频的加载和输出》和《moviepy音视频剪辑:使用concatenate_videoc.

老猿Python 2996

随机变量序列 收敛 检验 matlab,利用MATLAB验证样条插值的收敛性

问题提出多项式插值是不收敛的,即插值的节点多,效果不一定就好。对样条函数插值又如何呢?理论上证明样条插值的收敛性是比较困难的,但通过本实验可以验证这一理论结果。.实验内容请按一定的规则分别选择等距或者非等距的插值节点,并不断增加插值节点的个数。考虑实验2.1中的函数或选择其他你有兴趣的函数。(中函数)。实验要求(1)随节点个数增加,比较被逼近函数和样条插值函数误差的变化情况。分析所得结果并与拉格朗...

weixin_30895121的博客 4735

Halcon dyn_threshold详解

dyn_threshold 原型 dyn_threshold(OrigImage, ThresholdImage : RegionDynThresh : Offset, LightDark : ) 功能 利用局部阈值分割图像 参数列表 OrigImage (input_object):原始图像 ThresholdImage (input_object):处理后图像(一般采用滤波处理) RegionDynThresh (output_object):分割后区域 Offset (input_control):灰

ZiLiangQin的博客 1万+

moviepy音视频剪辑:使用fl_time进行诸如快播、慢播、倒序播放等时间特效处理的原理和可能遇到的坑

专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt+moviepy音视频剪辑实战 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一、引言 在《moviepy音视频剪辑:moviepy中的剪辑基类Clip的属性和方法详解》介绍了fl_time方法返回一个新剪辑,新剪辑是调用剪辑的一个浅拷贝,但新剪辑的时间线被调整,实际上这个方法就是对剪辑进行一个基于时间特效的处理,如快播、慢播、倒序播放等。 二、时间特效处理的基本原理 时间特效处理其实非.

老猿Python 4938

【2026OD新机考】【哈希表】20260422-文章特征提取【Py/Java/C++/C/JS/Go六种语言OD真题】【欧弟算法】全网注释最详细分类最全的华子OD真题题解

90+天陪伴式学习,100+直播课时,300+动画图解视频,500+LeetCode经典题,500+华为OD真题/大厂真题,还有简历修改、模拟面试、陪伴小群、资深HR对接将为你解锁。这道题的本质是多集合交集问题的变形,属于非常典型的哈希表应用题。,储存全局的每个片段中,各个字符最少出现的次数。表示该字母并非所有片段的公共字母。,按照顺序构建答案即可。没有字母在所有三个字符串中都出现。每个字母在各字符串中都至少出现。次,所以结果中每个字母出现一次。这样,当上述循环结束后,最终。显然在上述代码中,如果字母。

weixin_48157259的博客 66

moviepy音视频剪辑:使用fl_time进行时间特效处理报错OSError: Error in file xxxx, Accessing time

☞ ░ 前往老猿Python博文目录 ░ 老猿在使用moviepy音视频剪辑的fl_time进行时间特效处理时,系统报错: OSError: Error in file F:\video\WinBasedWorkHard_src.mp4, Accessing time t=54.84-54.93 seconds, with clip duration=54 seconds, 这个报错信息应该是访问的音频超出了剪辑的时长导致,如果不变换音频不会报错。有2个办法,一是视频变换时不同步改变音频,但视频du

老猿Python 2436

Hermes接入IMA知识库全攻略:将知识库装进你的Hermes智能体

本文详细介绍了如何将IMA知识库功能接入Hermes Agent平台,实现一站式笔记管理和知识库操作。主要内容包括:获取IMA访问凭证、下载技能包、配置凭据(支持文件和环境变量两种方式)、验证配置有效性,以及实际应用演示(查询知识库列表、创建笔记并添加到知识库)。文章还提供了常见问题解决方案,如认证失败处理、版本更新等。通过该集成,用户可在Hermes中直接调用IMA的笔记创建、知识库管理等强大功能,提升工作效率。

小石头的专栏 641

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

MoviePy 核心基类 Clip 完全解析:从属性、时间切片到变换与效果机制

Clip 是 MoviePy 中所有剪辑(视频剪辑 VideoClip、音频剪辑 AudioClip)的公共基类,承载了帧获取、时间定位、切片、变换、效果应用与资源管理等核心能力。本文以官方 API 参考文档 [moviepy.Clip.rst](https://link.gitcode.com/i/e613f4b6a4e8ee0886cdd00dc4fa3135) 为骨架,结合 [Clip.py

gitblog_00213的博客 427

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

上一篇: moviepy音视频剪辑:moviepy中的剪辑基类Clip详解
下一篇: moviepy音视频剪辑:使用fl_time进行诸如快播、慢播、倒序播放等时间特效处理的原理、代码实现以及需要注意的坑
LaoYuanPython
LaoYuanPython 2020年博客之星Top3 2020年博客之星Top3 领域专家: Python技术领域 领域专家: Python技术领域
博客等级 码龄8年 15万+粉丝 1324原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LaoYuanPython

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值