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

视频插帧—学习笔记(算法+配置+云服务+Google-Colab) 恰好碰到同学项目需要,了解了一下关于利用深度学习视频插帧的相关知识,在这里做一个简单的记录。 一、方法+论文 1.DAIN (Depth-Aware Video Frame Interpolation) 论文:https://arxiv.org/pdf/1904.00830.pdf 摘要 Video frame interpolation aims to synthesize nonexistent frames in-between the original frames.... 阅读详情

一、引言

在《moviepy音视频剪辑:moviepy中的剪辑基类Clip的属性和方法详解》介绍了fl方法是对剪辑进行变换处理返回一个新剪辑的方法,新剪辑是调用剪辑的一个浅拷贝,但新剪辑的内容是原剪辑内容的变换,具体变换由fl的参数指定的函数fun来实现。

fl变换一般包括两种:

本文介绍基于帧实现剪辑内容变换的原理和案例。

二、fl变换的原理

2.1、视频帧的本质

在《音视频处理基础知识扫盲:数字视频YUV像素表示法以及视频帧和编解码概念介绍》介绍了数字视频的基础知识,我们知道视频流本质上是基于YUV表示的原始流或编码流,流的内容就是帧流,一个个连续的帧对应的静态图像连续播放构成的帧流就是播放的视频,内容的变换本质上就是对帧的处理。

帧本身是YUV表示的图像,在程序处理中,这些帧对应的图像本质是什么呢?我们来看案例:

>>> from  moviepy.editor import *
>>> from  moviepy.Clip import *
>>> clip = VideoFileClip(r"F:\video\WinBasedWorkHard.mp4")
>>> clip.size  #看剪辑的大小(也即分辨率)
[540, 960]
>>> frame = clip.get_frame(1)  #取剪辑时间为1秒位置的帧
>>> type(frame)
<class 'numpy.ndarray'>
>>> frame.ndim
3
>>> frame.shape
(960, 540, 3)
>>> 

可以看到,上述脚本加载了一个视频,该视频的分辨率大小为540*960,从该剪辑取了一个帧,可以看到帧的类型为numpy数组,其维度为3即三维数组,通过这个数组的shape可以看到,这个数组是由960行(高)数据构成,每行数据包含540列数据,这就对应了分辨率大小,数组的每个基本元素是一个三元组,应该就对应一个像素点的YUV值。

由以上案例可以看出来,视频帧在程序中被表示为与视频分辨率大小对应的一个矩阵,这个矩阵的行数是视频的高、列数是视频的宽,元素是YUV表示的像素点。

2.2、fl内容变换的原理

内容变换本质上就是对帧数据的处理,也就是对帧对应的三维数组数据的操作:

  • 调整行的位置就是在垂直方向上调整视频内容的位置
  • 调整列的位置就是在水平方向上调整视频内容的位置
  • 同时调整行和列的位置就是调整视频空间的内容位置
  • 调整三元组YUV就是对视频显示内容的变化
  • 调整行高或列宽就是对视频的内容进行裁剪或扩充并对分辨率进行调整
2.3、进行变换处理需要注意的地方

对视频进行变换处理时,实际上处理的是帧的内容,需要注意:

  1. 视频的大小(分辨率),处理视频时,要避免行和列超出分辨率限制的情况出现,代码要有对此的处理;
  2. 对内容进行变换不能只考虑一个帧自身的变换,一定要基于帧流来考虑,因为单独一个帧的呈现时间非常短,只有帧流都是连续变换的才能保证变换在播放时的可见。如果这种连续变换是针对位置的,一定要记住变换处理是针对每帧的,相关变换位置必须在上一帧变换位置之上再变换才有意义。关于这段话是老猿在进行变换处理的经验总结,单独理解有点困难,请结合下面的案例再理解这段话;
  3. 变换处理要平滑,否则视频播放会感知差。

三、滚屏案例的实现波折

2.1、案例说明

在《moviepy音视频剪辑:moviepy中的剪辑基类Clip详解》介绍fl方法时介绍了一个案例这个案例其实是参考moviepy的样例实现,想要达到一种屏幕视频向上滚动的效果。
下面是moviepy关于这个案例的有关介绍:

  In the following ``newclip`` a 100 pixels-high clip whose video
        content scrolls from the top to the bottom of the frames of
        ``clip``.

        >>> fl = lambda gf,t : gf(t)[int(t):int(t)+50, :]
        >>> newclip = clip.fl(fl, apply_to='mask')
2.2、模拟案例的实现

老猿模拟上述案例对滚屏实现进行了改动,改成了如下:

src = VideoFileClip(r"F:\video\抖音-爱拼才会赢.mp4")	
h = src.size[1] 
fl = lambda gf,t : gf(t)[int(t):int(t)+h/2, :]
newclip = src.fl(fl, apply_to='mask')
newclip.write_videofile(r"F:\video\抖音-爱拼才会赢_re.mp4"

上述案例在实现后,发现视频播放时并没有滚屏,而是将视频内容剪裁掉了一半,分辨率的高度变成了原视频的一半,百思不得其解,最后在moviepy网站上作为一个问题提出(详见https://github.com/Zulko/moviepy/issues/1213),人家次日就进行了答复,说是这个变化太小了,每秒才滚动了一个像素,肉眼是不可见的,建议改为如下:

newclip = clipVideo.fl(lambda gf, t: gf(t)[int(50*t):int(50*t) + h, :], apply_to='mask').set_duration(clipVideo.duration)
2.2、模拟案例的改良

按照网站就问题的答复,将上述代码改成了如下:

src = VideoFileClip(r"F:\video\抖音-爱拼才会赢.mp4")	
h = src.size[1] 
fl = lambda gf,t : gf(t)[int(t*50):int(t*50)+h/2, :]
newclip = src.fl(fl, apply_to='mask')
newclip.write_videofile(r"F:\video\抖音-爱拼才会赢_re.mp4")

运行后播放输出文件,才开始播放时看到确实实现了滚屏效果,但随着播放时间的延长,滚屏越来越快,最后就卡在某个页面不变换了。仔细分析了一些,发现这个改良方法太粗暴,才开始时间线很小所以变化不大,而随着播放时间线越来越大,t*50的值会越来越大,到后来已经超出了视频分辨率的高,导致这个播放就卡主了。

四、滚屏案例的最终实现

4.1、实现思路
4.1.1、滚屏的处理
  1. 相邻帧绝大多数情况下画面内容基本一致,只有少数内容发生变化,通过连续播放才能体现变化;
  2. 单帧是无法体现滚屏效果的,滚屏就是下一帧相对上一帧将下面的行往上面移动,如果将帧数据的数组首尾环接,相当于每个帧的所有行数据在这个环内滚动流动,但实际上数组没有环接,因此需要应用实现环接的处理;
  3. 假设在屏幕上每秒要滚动n个像素点,从第1帧来看是数据帧的行环绕前进n行,第2帧则需要环绕移动2n行(如果第二帧还是只移动n行,则第二帧的变化位置相对第一帧没有变化,这样连续播放时就无法体现滚动效果),…,第k行则要环绕移动kn行。如果记录了上个帧移动的行数(假设为m),则下个帧需要移动m+n行;
  4. 当一次移动的行数超出了帧高,则需要回到帧的头重新开始,形成环绕移动的效果;
  5. 帧的环绕移动通过数组的切片和数组的叠加进行处理,这样简洁高效。
4.1.2、怎么在变换函数内获取帧高和fps

moviepy提供的变换方法fl的参数fn只能带两个参数,一个是类似get_frame获取帧的方法名,一个是帧的时间位置变量t。但上面说到,要实现环绕移动,需要知道帧高,在这个变换函数内怎么获取呢?另外滚屏的速度与帧率fps相关,同样移动的行数fps越大感知到的移动就越快,可能需要参考帧的这些属性来进行变换处理。

但fl对应的参数fun函数是无法通过自身的属性直接获取帧相关的数据的,同时上一帧移动位置到哪里里也不能通过函数变量进行传递。解决这个问题老猿想到两个办法:

  1. 通过全局变量进行变量传递(请参考《第5.4节 Python函数中的变量及作用域》),本文的样例就是这样来传递的;
  2. 帧数据通过fun函数的参数对应函数gf的返回值来获取,因为gf返回的是原剪辑参数t指定时刻的帧,通过这个可以获取到帧高、fps等数据,而滚动行数通过公式计算,假设每次滚动k行,具体公式为:rows = int(t*fps*k)%帧高。
4.2、代码实现
4.2.1、主程序
from  moviepy.editor import *
import  numpy as np
if __name__=='__main__':
    clipVideo = VideoFileClip(r"F:\video\WinBasedWorkHard_src.mp4")

    global framePos,clipHeight  #存储滚动位置和帧高的全局变量定义,下面两行为初始化值
    framePos = 0
    clipHeight = clipVideo.size[1]

    newclip = clipVideo.fl(flFunc , apply_to=['mask']).set_duration(clipVideo.duration) #使用fl进行变换处理,每个帧的变换调用flFunc函数进行
    newclip.write_videofile(r"F:\video\WinBasedWorkHard_new.mp4") 
    newclip.close()
    clipVideo.close()

4.2.2、实现变换函数及其子函数
def flFunc(gf,t):  #变换主函数
    return frameScroll(gf(t),2) #一帧往前滚动2行
    
def frameScroll(frame,x): #实现帧数据环绕滚动x行
    global framePos,clipHeight

    moveCount = framePos+x #本次移动行数在前一次行数基础上加x行
    if moveCount>clipHeight:  #环绕判断处理,其实用moveCount %= clipHeight语句更简洁效果相同,但取余的运算效率低一些
        moveCount -= clipHeight
    framePos = moveCount  #记录本次移动的行数
    remainFrame = frame[:moveCount]  #取前moveCount-1行
    exceedFrame = frame[moveCount:] #取后面剩余行

    return np.vstack((exceedFrame,remainFrame))  #将两部分数据叠加实现环绕效果,返回作为变换后的帧

五、滚屏效果

通过以上代码就实现了滚屏效果,我们截取3张结果视频文件的播放图对比看一下。
在这里插入图片描述
可以看到视频确实在滚动。

六、小结

本文详细介绍了视频帧的数据存储本质、moviepy的剪辑基类Clip的帧变换方法fl的原理,并通过实现视频播放从下往上滚动的案例详细介绍了帧内容变换处理的实现。写作不易,如果觉得从这篇文章能有所收获,敬请点赞!谢谢!

本文的滚屏案例其实还可以用vfx.scroll方法来实现,这个方法老猿还没使用,且和讲解fl方法关系不大,在此暂不进行介绍。

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

关于收费专栏

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

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

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

跟老猿学Python、学5G!

moviepy中视频帧大小crop 介绍了视频画面大小裁剪的函数代码,并给出了关键函数resize和crop的函数说明 阅读详情

相关推荐

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

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

HackDyno的博客 303

MoviePy不同尺寸视频vedio_clip或者图片image_clip拼接出现花屏

昨天有网友在群里提出问题: 线性合并两个不同尺寸的视频,第二个会出现花屏。 实际上:不仅仅是vedio_clip之间的连接会出现这样的问题,image_clip的合并也同样会出现这样的问题,本质上讲,image_clip是一种特殊的vedio_clip。 解决建议: 首先,尺寸不同是绝对没有办法进行正常拼接的。 我们首先想到的解决办法是:对不同尺寸的clip进行resize操作( 即clip.r...

ucsheep-You see sheep! 8886

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

具体方法是根据当前视频文件的编解码器信息选择一个支持时间戳读取功能的编解码器,或将视频文件转换为支持时间戳读取功能的格式,例如MP4格式。在使用fl_time()函数时,需要通过读取视频文件的时间戳信息来实现时间特效处理,如果视频编解码器不支持时间戳读取功能,则会导致该函数无法正常使用,从而出现OSError: Error in file xxxx, Accessing time Python错误。然后,根据当前视频文件的编解码器信息,选择一个支持时间戳读取功能的编解码器,例如H.264编解码器。

CyberNerdX的博客 395

【python + FFmpeg】对视频进行分辨率改变,(带音频)

最近购入诺基亚E72i手机,导入视频发现只有声音却没有画面,原因是原画的画质分辨率过高识别不了,只能转成适合手机屏幕的分辨率才行(320 * 240)

子根的博客 2785

Clip的fl方法进行变换处理的原理以及滚屏案例 Python

Clip的fl方法进行变换处理的原理以及滚屏案例 Python在Python中,Clip是一种用于处理图像的库,它提供了各种功能来修改和转换图像。其中,fl方法是Clip库中的一个函数,用于进行图像的变换处理。在本文中,我们将详细介绍fl方法的原理,并提供一个滚屏案例来演示其用法。

ByteLegend的博客 264

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

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

学习使你进步。 624

python调整视频内容比例_moviepy音视频剪辑:与大小相关的视频变换函数crop、even_size、margin、resize介绍...

一、引言实际上moviepy所有视频变换的方法都是以Clip的fl方法为基础衍生出来的,最后都会调用到fl方法实施真正的变换,只是变换处理的逻辑由上次方法提供,如fl_time就是针对剪辑的时间线进行变换、fl_image就是针对剪辑的内容进行变换,开发者也可以根据自己的需要实现自己的变换方法。为了支持一些常规的变换处理,moviepy提供了一系列常用的变换函数,开发者可以直接使用这些方法进行变换...

weixin_31292909的博客 3866

老N卡福音:GT1030/GTX1050在MacOS Ventura 13.2上的完整驱动指南(附实测截图)

本文详细介绍了如何在MacOS Ventura 13.2上通过OCLP工具链驱动GT1030和GTX1050等老款NVIDIA显卡,涵盖硬件兼容性验证、BIOS设置、OpenCore配置、驱动安装及性能测试全流程。实测数据显示,这些基于Pascal和Maxwell架构的显卡在当代MacOS系统中仍能发挥实用价值,为老N卡用户提供完整解决方案。

weixin_30832143的博客 632

moviepy基本参数用法大全

MoviePy 是一个用于视频编辑的 Python 库,使用户能够处理、编辑和操作视频文件。这个库允许你剪辑视频、添加文本、合并视频剪辑,以及应用各种效果和转换。它建立在 NumPy、imageio 和 Decorator 等库的基础上,使得在处理视频时能够更加高效。MoviePy 允许你从现有视频中选择特定的片段,然后将它们合并成一个新的视频文件。你可以在视频中添加文本、图形和其他元素,以创建字幕、水印或其他视觉效果。

小小明-代码实体的专栏 5362

ANSYS Fluent 2023R2实战:用欧拉多相流模型搞定流化床模拟(附详细参数避坑)

本文详细解析了ANSYS Fluent 2023R2中欧拉多相流模型在流化床模拟中的应用,包括模型选择、材料属性设置、相间作用力配置及初始化技巧。特别针对高颗粒浓度工况提供参数优化方案,帮助工程师提升模拟精度与效率,适用于化工、能源等领域的流化床反应器设计。

weixin_30938149的博客 269

JDK8升级JDK17过程中遇到的那些坑

JDK8虽然非常好,但是JDK版本已经发布到JDK20了,且JDK8后的版本升级了很多新的特性,如模块化、ZGC以及虚拟线程、结构性并发等,也是非常有吸引力的,所以决定将基于JDK8的项目升级到最近的LTS版本JDK17。

BASK2312的博客 6685

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

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

老猿Python 6315

从零构建:如何在VSCode中为HBuilderX迁移的UniApp项目搭建TypeScript支持环境

本文详细指导如何将HBuilderX中的UniApp项目迁移至VSCode并搭建TypeScript支持环境。通过pnpm包管理器初始化项目、配置tsconfig.json和vite.config.ts文件,实现工程化迁移与TypeScript深度集成,提升开发效率和代码质量。

book8的博客 1050

魔性,用 Python 实现火爆全网的「蚂蚁呀嘿」视频特效!

完整文章、资料阅读公众号文章还有视频:https://mp.weixin.qq.com/s/RsJWPWKE0YCebelxHr-KaA 你好,我是悦创。这篇文章搞了前后两天,至于为什么搞,后面会说。写到这个文章的生时候,我估计我后面还会写 Python 处理视频的自动化文章,也敬请期待!期待的同时希望你们的转发分享,这样我会更有动力,如果可以也可以赞赏来一些,我们来一个众筹写作好吗?——后面我写一篇这样的文章,希望大家支持我哈。 最近悦创在抖音上看到很多「蚂蚁呀嘿」的魔性视频,各方大佬齐齐上阵。其实把真

AI悦创·编程私教1v1 2513

VMware Ubuntu虚拟机突然断网?我用5步彻底解决了(附避坑指南)

Ubuntu虚拟机断网问题通常由网络配置冲突和VMware服务未正确绑定导致。本文提供5步解决方案:1)清理Ubuntu重复有线连接;2)重启Windows主机的VMware服务;3)检查VMware虚拟网络配置;4)重新配置Ubuntu网络参数;5)测试网络连通性。关键避坑点包括:避免多连接共存、修改配置后必重启服务、确保虚拟网卡绑定主机。通过"网卡状态→IP/路由→网关→服务"的排查思路,可快速解决虚拟机网络故障。文末附有详细的故障症状对照表,便于快速定位问题。

m0_58530495的博客 626

手把手教你用EG2153搭建开关电源:SOP-8封装驱动芯片的5个设计技巧

本文详细介绍了使用EG2153自振荡半桥驱动芯片搭建开关电源的五个核心设计技巧。内容涵盖从深入理解芯片工作机制、频率编程计算误区、SOP-8封装的热管理方案,到死区时间评估与外部保护电路设计,以及实战调试与故障排查指南,旨在帮助工程师实现稳定可靠的小功率电源设计。

weixin_29200485的博客 378

用tim从左到右移动帧(感兴趣区域)的Moviepy裁剪视频

我正在使用MoviePy从服务器上的视频剪辑自动创建GIF。图书馆帮助进行各种各样的视频转换和剪辑,以创建gif。在 在我当前的项目中,我有一个视频剪辑,里面有很多移动的物体,很难对感兴趣的区域进行自动跟踪。 (下面一个快速的gif显示了场景,虽然那里的背景可以很容易地消除和做目标的跟踪。但假设跟踪对象超出了项目的范围)。 如下面的gif所示,红色矩形是随时间从左向右移动的感兴趣区域。 我想裁剪这个区域并创建一个GIF。在 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gRP

编辑编辑器 3452

服务器centos上安装IC618(virtuoso)教程

只需要按照提供的步骤即可实现IC618安装。有需要详情请联系QQ:563962386

swicthsober的博客 1万+

轻松剪辑、合并和添加特效,快速完成视频处理——掌握MoviePy库

🎥想要快速而轻松地完成视频处理吗?那么不要错过MoviePy库!这个易于使用且功能强大的库可以帮助你剪辑、合并、添加音频、文本、特效等多种功能。在本篇博客中,我们将介绍如何使用MoviePy库,让你轻松掌握视频处理技巧。

philosophy 2521

windows 配置 libxml2

路径:\libiconv-1.9.2-1-src.zip\src\libiconv\1.9.2\libiconv-1.9.2\include\。执行完后,在当前win32目录中会生成了一个bin.msvc目录,其中就有开发需要的libxml2.lib和libxml2.dll文件。将 libiconv.la 复制到 新建的 lib 目录,并将其改名为 iconv.lib。路径:libiconv-1.9.2-1-bin.zip\lib\。将如下的 iconv.h 复制到新建的 include 目录。

SHELLCODE_8BIT的博客 3886

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

利用moviepy对韩国女团视频进行自动剪辑

首先从网上下载女团的饭拍视频,建议是饭拍的竖屏视频,横屏的太远,女团的身体看得不明显,横屏的也不需要进行处理,因为我们的屏幕是横屏的,放横屏的视频自然是没有障碍。当然,看完这篇文章你也可以自己创建你喜欢的布局样式。我这里是从http://www.gaobei.com/fanpai下载的视频,当然你可能需要一个百度网盘的超级会员,或者自己破解客户端。为了对视频进行编辑,你可能会想到PR,但是PR的问...

zic234gh9的博客 4220

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

第五章FLTK的画图函数

第五章FLTK的画图函数   这章涵盖了FLTK提供的所有画图函数什么时候可以画图只有在几个地方可以执行画图代码。在其他地方调用该函数会出现未定义该行为的错误1最常出现的地方是在虚拟函数Fl_Widget::draw()中。你的类需要继承一个Fl_Widget类,然后在自己的类中写draw()函数。2在写boxtype和labeltype函数中用到。3你可以调用Fl_Win

minifang的专栏 1万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

python代码实现的特效_Python实现高级电影特效

为了方便,我们全都使用pip安装:pip install pillowpip install opencv-pythonpip install moviepy# 安装paddlepaddlepython -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple# 安装paddlehubpip install -i htt...

weixin_39860583的博客 715

【python】只需一段代码,剪辑一个视频——Moviepy详解

知道吗,用moviepy一行代码就能够快速剪辑视频中某个区间的片段:这一段代码,能够在3秒内将videoplayback.mp4的50秒-60秒的视频片段提取出来,非常方便。仅如此,moviepy还支持添加字幕、调整音量、片段链接等功能。下面看看详细的操作方法。

liaozp88的博客 2545

MoviePy - 中文文档2-快速上手-MoviePy-Clips变换与特效

回到目录 下面是MoviePy中的几种对clip的修改: 非常常见的修改clip属性的方法有:clip.set_duration, clip.set_audio, clip.set_mask, clip.set_start 等. 已经实现的特效.clip.subclip(t1,t2):截取t1到t2时间段内的片段;还有一些高级效果,loop:让clip循环播放、time_mirror:让cl...

ucsheep-You see sheep! 1万+
上一篇: moviepy音视频剪辑:使用fl_time报错OSError: MoviePy error: failed to read the first frame of video file
下一篇: 老猿学5G扫盲贴:中国移动网络侧CHF的功能分解说明
LaoYuanPython
LaoYuanPython 2020年博客之星Top3 2020年博客之星Top3 领域专家: Python技术领域 领域专家: Python技术领域
博客等级 码龄8年 15万+粉丝 1324原创
评论 7
成就一亿技术人!
拼手气红包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、付费专栏及课程。

余额充值